From 6b4ce5538cdaa79c0317cc89e988b807ad35411f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 3 Dec 2019 11:47:21 -0800 Subject: [PATCH 001/141] feat(rush): Migrate to Rush (#1803) (#1871) fix(website): WIP fixing website with Rush (#1814) fixup pouchdb local file loading (#1823) fix(website): WIP to show how to fix website FS (#1822) fix(website): fixup neo-one source file loading into pouchDB (#1825) feat(rush clean): add new rush clean command/script (#1824) feat(rush): prepare rush for npm publishing (#1834) fix(script): fix spencers scripts (#1827) feat(CI): fixup e2e tests (#1833) fix(rush): move smart-contract-lib tests to neo-one-smart-contract-test (#1850) feat(rush): Add pack/release commands (#1854) feat(rush): add initial changelog for migration fix(rush): add git hooks back, add tsc command (#1845) fix(rush): fixup e2e test snapshot pin typescript 3.6.3 temporarily feat(rush): switch to pnpm (#1864) fix(rush): refine docker image copies (#1865) fix(rush): revert back to yarn for website (#1868) fix(rush): add/cleanup website prod cmds and compile scripts (#1844) fix(rush): add appropriate path-mapping, add sourcemaps for dev (#1869) --- .circleci/config.yml | 159 +- .dockerignore | 4 + .github/workflows/website.yaml | 16 +- .gitignore | 8 +- .huskyrc.js | 12 + .lintstagedrc.js | 19 + .prettierrc | 1 - .vscode/settings.json | 8 +- codecov.yml | 6 +- .../rush_2019-11-06-21-56.json | 11 + .../cli-common/rush_2019-11-06-21-56.json | 11 + .../@neo-one/cli/rush_2019-11-06-21-56.json | 11 + .../client-common/rush_2019-11-06-21-56.json | 11 + .../client-core/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../client-full/rush_2019-11-06-21-56.json | 11 + .../client-switch/rush_2019-11-06-21-56.json | 11 + .../client/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../http-context/rush_2019-11-06-21-56.json | 11 + .../@neo-one/http/rush_2019-11-06-21-56.json | 11 + .../logger-config/rush_2019-11-06-21-56.json | 11 + .../logger/rush_2019-11-06-21-56.json | 11 + .../node-bin/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../node-consensus/rush_2019-11-06-21-56.json | 11 + .../node-core/rush_2019-11-06-21-56.json | 11 + .../node-http-rpc/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../node-network/rush_2019-11-06-21-56.json | 11 + .../node-offline/rush_2019-11-06-21-56.json | 11 + .../node-protocol/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../node-vm/rush_2019-11-06-21-56.json | 11 + .../@neo-one/node/rush_2019-11-06-21-56.json | 11 + .../react-common/rush_2019-11-06-21-56.json | 11 + .../react-core/rush_2019-11-06-21-56.json | 11 + .../@neo-one/react/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../smart-contract/rush_2019-11-06-21-56.json | 11 + .../@neo-one/suite/rush_2019-11-06-21-56.json | 11 + .../ts-utils/rush_2019-11-06-21-56.json | 11 + .../rush_2019-11-06-21-56.json | 11 + .../utils-node/rush_2019-11-06-21-56.json | 11 + .../@neo-one/utils/rush_2019-11-06-21-56.json | 11 + .../rush/browser-approved-packages.json | 1226 +++ common/config/rush/command-line.json | 443 + common/config/rush/common-versions.json | 9 + .../rush/nonbrowser-approved-packages.json | 5 + common/config/rush/version-policies.json | 90 + yarn.lock => common/config/rush/yarn.lock | 7254 ++++++----------- common/scripts/install-run-rush.js | 67 + common/scripts/install-run-rushx.js | 18 + common/scripts/install-run.js | 418 + cypress/common/lessons.ts | 4 +- deploy/Dockerfile | 2 +- gulpfile.js | 1110 --- jest/base.js | 34 - jest/ci.js | 3 - lerna.json | 9 - package.json | 277 - packages/neo-one-build-common/package.json | 28 + packages/neo-one-build-tests/babel.config.js | 12 + .../environments}/e2e/NodeEnvironment.js | 0 .../environments}/e2e/One.js | 35 +- .../environments}/e2e/checkPort.js | 0 .../environments/e2e/jestSetup.js | 30 + .../environments}/test/NodeEnvironment.js | 0 .../environments}/test/One.js | 0 .../environments/test/jestSetup.js | 26 + packages/neo-one-build-tests/jest/base.js | 49 + packages/neo-one-build-tests/jest/ci.js | 9 + .../neo-one-build-tests/jest}/e2e-ci.js | 0 .../neo-one-build-tests/jest}/e2e.js | 8 +- .../neo-one-build-tests/jest}/ledger.js | 0 .../neo-one-build-tests/jest}/other.js | 0 .../neo-one-build-tests/jest}/unit-ci.js | 0 .../neo-one-build-tests/jest}/unit.js | 4 +- packages/neo-one-build-tests/package.json | 28 + .../serializers/blockchain.js | 0 .../neo-one-build-tests}/serializers/bn.js | 0 .../serializers/buffer.js | 0 .../neo-one-build-tests/tsconfig.jest.json | 36 + packages/neo-one-build-tools-web/gulpfile.js | 32 + .../includes/now}/package.json.now | 0 .../includes}/now/preview.now.json | 0 .../includes}/now/server.now.json | 0 .../includes}/now/static.now.json | 0 .../includes}/now/testRunner.now.json | 0 packages/neo-one-build-tools-web/package.json | 114 + .../neo-one-build-tools-web/src}/compile.ts | 18 +- .../src}/createKillProcess.ts | 0 .../src}/runCypress.ts | 23 +- .../neo-one-build-tools-web/src}/types.ts | 0 .../src}/webpack/addDefaultRules.ts | 0 .../src}/webpack/alias.ts | 0 .../src}/webpack/browsers.ts | 0 .../src}/webpack/common.ts | 8 + .../src}/webpack/console.js | 0 .../src}/webpack/index.ts | 0 .../src}/webpack/loaders/babel.ts | 5 +- .../src}/webpack/loaders/babelLoader.ts | 0 .../src}/webpack/loaders/cacheLoader.ts | 4 +- .../src}/webpack/loaders/cssLoader.ts | 0 .../src}/webpack/loaders/fileLoader.ts | 0 .../src}/webpack/loaders/index.ts | 0 .../src}/webpack/loaders/jsLoader.ts | 0 .../src}/webpack/loaders/rawLoader.ts | 0 .../src/webpack/loaders/tsLoader.ts | 55 + .../src}/webpack/loaders/wasmFileLoader.ts | 0 .../src}/webpack/node.ts | 0 .../src}/webpack/optimization.ts | 4 +- .../src}/webpack/overlay.ts | 4 +- .../src}/webpack/plugin/node.api.js | 0 .../src}/webpack/plugin/node.tsx | 7 +- .../src}/webpack/plugins.ts | 0 .../src}/webpack/preview.ts | 2 +- .../src}/webpack/rules.ts | 0 .../src}/webpack/server.ts | 2 +- .../src}/webpack/testRunner.ts | 2 +- .../src}/webpack/tools.ts | 4 +- .../src}/webpack/workers.ts | 4 +- .../neo-one-build-tools-web/tsconfig.json | 30 + .../neo-one-build-tools/bin/neo-one-clean.js | 10 + .../bin/neo-one-lint-staged.js | 14 + .../neo-one-build-tools/bin/neo-one-lint.js | 10 + .../bin/neo-one-publish.js | 9 + .../neo-one-build-tools/bin/neo-one-tsc.js | 9 + packages/neo-one-build-tools/gulpfile.js | 32 + .../build-configs}/tsconfig.build.json | 9 +- .../includes/build-configs}/tsconfig.cjs.json | 0 .../tsconfig.es2017.browserify.cjs.json | 0 .../build-configs/tsconfig.es2017.cjs.json | 6 + .../build-configs}/tsconfig.es2017.esm.json | 0 .../build-configs}/tsconfig.es2018.cjs.json | 0 .../includes/build-configs}/tsconfig.esm.json | 0 .../tsconfig.esnext.browserify.esm.json | 6 + .../build-configs/tsconfig.esnext.esm.json | 6 + .../includes/tsconfig.base.json | 27 + .../includes/tsconfig.dev.json | 10 + .../includes/tsconfig.static.json | 6 +- packages/neo-one-build-tools/package.json | 91 + packages/neo-one-build-tools/src/build.ts | 133 + .../src/builds/buildBin.ts | 63 + .../src/builds/buildTypescript.ts | 52 + .../neo-one-build-tools/src/builds/index.ts | 3 + .../src/builds/rollupDevTools.ts | 37 + packages/neo-one-build-tools/src/clean.ts | 53 + packages/neo-one-build-tools/src/formats.ts | 58 + packages/neo-one-build-tools/src/index.ts | 1 + packages/neo-one-build-tools/src/lint.ts | 60 + packages/neo-one-build-tools/src/pack.ts | 51 + packages/neo-one-build-tools/src/publish.ts | 46 + packages/neo-one-build-tools/src/utils.ts | 215 + packages/neo-one-build-tools/tsconfig.json | 30 + .../neo-one-build-tools/types}/bn.js.d.ts | 2 + .../neo-one-build-tools/types}/e2e.d.ts | 0 .../types/static.d.ts} | 0 packages/neo-one-cli-common-node/gulpfile.js | 5 + packages/neo-one-cli-common-node/package.json | 15 +- .../neo-one-cli-common-node/tsconfig.json | 3 + packages/neo-one-cli-common/gulpfile.js | 5 + packages/neo-one-cli-common/package.json | 13 +- packages/neo-one-cli-common/tsconfig.json | 3 + packages/neo-one-cli/bin/neo-one.js | 2 + packages/neo-one-cli/gulpfile.js | 5 + packages/neo-one-cli/package.json | 40 +- .../neo-one-cli/src/__data__/buildTests.ts | 1 + .../projects/ico-Js/.neo-one.config.js | 2 +- .../projects/ico-Js/codegen/client.js | 6 +- .../projects/ico-Js/codegen/sourceMaps.js | 22 +- .../__data__/projects/ico-Js/codegen/test.js | 15 +- .../projects/ico-angular/codegen/client.ts | 6 +- .../ico-angular/codegen/sourceMaps.ts | 22 +- .../projects/ico-angularJs/codegen/client.js | 6 +- .../ico-angularJs/codegen/sourceMaps.js | 22 +- .../ico-neotracker/.neo-one.config.js | 34 + .../projects/ico-neotracker/babel.config.js | 0 .../ico-neotracker/codegen/Escrow/abi.ts | 319 + .../ico-neotracker/codegen/Escrow/contract.ts | 20 + .../ico-neotracker/codegen/Escrow/types.ts | 163 + .../ico-neotracker/codegen/ICO/abi.ts | 189 + .../ico-neotracker/codegen/ICO/contract.ts | 20 + .../ico-neotracker/codegen/ICO/types.ts | 96 + .../ico-neotracker/codegen/Token/abi.ts | 386 + .../ico-neotracker/codegen/Token/contract.ts | 20 + .../ico-neotracker/codegen/Token/types.ts | 231 + .../projects/ico-neotracker/codegen/client.ts | 149 + .../ico-neotracker/codegen/contracts.ts | 30 + .../projects/ico-neotracker/codegen/index.ts | 15 + .../projects/ico-neotracker/codegen/react.tsx | 56 + .../ico-neotracker/codegen/sourceMaps.ts | 51 + .../projects/ico-neotracker/codegen/test.ts | 15 + .../neo-one/contracts/Escrow.ts | 108 + .../ico-neotracker/neo-one/contracts/ICO.ts | 87 + .../ico-neotracker/neo-one/contracts/Token.ts | 174 + .../neo-one}/contracts/tsconfig.json | 0 .../ico-neotracker/neo-one/migration.ts | 9 + .../projects/ico-vue/codegen/client.ts | 6 +- .../projects/ico-vue/codegen/sourceMaps.ts | 22 +- .../projects/ico-vueJs/codegen/client.js | 6 +- .../projects/ico-vueJs/codegen/sourceMaps.js | 22 +- .../__data__/projects/ico/.neo-one.config.js | 2 +- .../__data__/projects/ico/codegen/client.ts | 6 +- .../projects/ico/codegen/sourceMaps.ts | 22 +- .../src/__e2e__/cmd/start/neotracker.test.ts | 4 +- .../src/__e2e__/cmd/stop/neotracker.test.ts | 6 +- packages/neo-one-cli/src/bin/neo-one.ts | 2 +- packages/neo-one-cli/tsconfig.json | 4 + packages/neo-one-cli/tsconfig.lint.json | 4 + packages/neo-one-client-common/gulpfile.js | 5 + packages/neo-one-client-common/package.json | 17 +- packages/neo-one-client-common/tsconfig.json | 3 + packages/neo-one-client-core/gulpfile.js | 5 + packages/neo-one-client-core/package.json | 17 +- .../RemoteUserAccountProvider.test.ts | 8 +- .../provider/NEOONEDataProvider.test.ts | 14 +- .../user/DapiUserAccountProvider.test.ts | 8 +- .../neo-one-client-core/src/paramUtils.ts | 0 .../src/sc/createSmartContract.ts | 5 +- .../src/user/UserAccountProviderBase.ts | 27 +- packages/neo-one-client-core/tsconfig.json | 3 + .../neo-one-client-full-common/gulpfile.js | 5 + .../neo-one-client-full-common/package.json | 14 +- .../neo-one-client-full-common/tsconfig.json | 3 + packages/neo-one-client-full-core/gulpfile.js | 5 + .../neo-one-client-full-core/package.json | 14 +- .../neo-one-client-full-core/tsconfig.json | 3 + packages/neo-one-client-full/gulpfile.js | 5 + packages/neo-one-client-full/package.json | 13 +- packages/neo-one-client-full/tsconfig.json | 3 + packages/neo-one-client-switch/gulpfile.js | 5 + packages/neo-one-client-switch/package.json | 15 +- packages/neo-one-client-switch/tsconfig.json | 3 + packages/neo-one-client/gulpfile.js | 5 + packages/neo-one-client/package.json | 13 +- packages/neo-one-client/tsconfig.json | 3 + .../package.json | 25 +- .../src/BalanceSelector.tsx | 6 +- .../src/BlockTime.tsx | 6 +- .../src/DateTimePicker.tsx | 2 +- .../src/ResetButton.tsx | 4 +- .../src/ResizeHandler.ts | 2 +- .../src/SecondsPerBlockInput.tsx | 4 +- .../src/ThemeProvider.tsx | 1 + .../src/Toast.tsx | 4 +- .../src/WalletSelectorBase.tsx | 3 +- .../tsconfig.json | 3 + packages/neo-one-developer-tools/gulpfile.js | 9 + packages/neo-one-developer-tools/package.json | 14 +- .../src/DeveloperToolsDev.ts | 4 +- .../neo-one-developer-tools/tsconfig.json | 3 + packages/neo-one-editor-server/package.json | 15 +- packages/neo-one-editor-server/tsconfig.json | 3 + packages/neo-one-editor/package.json | 36 +- packages/neo-one-editor/src/FullEditor.tsx | 37 +- .../src/editor/toolbar/BuildAction.tsx | 9 +- .../src/editor/toolbar/ConsoleSelector.tsx | 9 +- .../src/editor/toolbar/RunTestsAction.tsx | 9 +- .../editor/toolbar/TestSummaryListItem.tsx | 9 +- .../src/editor/toolbar/TestText.tsx | 2 +- .../src/engine/main/initializeFileSystem.ts | 111 +- .../src/loaders/packagesLoader.ts | 32 +- .../src/monaco/configureGrammar.ts | 2 +- .../src/monaco/features/wireDiagnostics.ts | 6 +- .../neo-one-editor/src/monaco/typescript.ts | 6 +- packages/neo-one-editor/tsconfig.json | 3 + packages/neo-one-http-context/gulpfile.js | 5 + packages/neo-one-http-context/package.json | 14 +- packages/neo-one-http-context/src/common.ts | 3 +- packages/neo-one-http-context/src/context.ts | 7 +- packages/neo-one-http-context/tsconfig.json | 3 + packages/neo-one-http/gulpfile.js | 5 + packages/neo-one-http/package.json | 17 +- packages/neo-one-http/src/bodyParser.ts | 3 +- packages/neo-one-http/src/cors.ts | 2 +- packages/neo-one-http/tsconfig.json | 3 + .../neo-one-local-browser-worker/package.json | 15 +- .../tsconfig.json | 3 + packages/neo-one-local-browser/package.json | 12 +- .../src/filesystem/PouchDBFileSystem.ts | 5 +- packages/neo-one-local-browser/src/utils.ts | 4 +- packages/neo-one-local-browser/tsconfig.json | 3 + packages/neo-one-local-singleton/package.json | 10 + .../neo-one-local-singleton/tsconfig.json | 3 + packages/neo-one-logger-config/gulpfile.js | 5 + packages/neo-one-logger-config/package.json | 16 +- packages/neo-one-logger-config/tsconfig.json | 3 + packages/neo-one-logger/gulpfile.js | 5 + packages/neo-one-logger/package.json | 16 +- packages/neo-one-logger/tsconfig.json | 3 + packages/neo-one-node-bin/bin/neo-one-node.js | 2 + packages/neo-one-node-bin/gulpfile.js | 5 + packages/neo-one-node-bin/package.json | 24 +- .../src/__e2e__/cmd/consensus.test.ts | 2 + .../neo-one-node-bin/src/bin/neo-one-node.ts | 3 +- packages/neo-one-node-bin/tsconfig.json | 3 + packages/neo-one-node-blockchain/gulpfile.js | 5 + packages/neo-one-node-blockchain/package.json | 16 +- .../src/WriteBatchBlockchain.ts | 10 +- .../neo-one-node-blockchain/tsconfig.json | 3 + .../neo-one-node-browser-worker/package.json | 12 +- .../neo-one-node-browser-worker/tsconfig.json | 3 + packages/neo-one-node-browser/package.json | 8 + packages/neo-one-node-browser/tsconfig.json | 3 + packages/neo-one-node-consensus/gulpfile.js | 5 + packages/neo-one-node-consensus/package.json | 15 +- .../neo-one-node-consensus/src/Consensus.ts | 2 +- packages/neo-one-node-consensus/src/common.ts | 6 +- .../tsconfig-output.json | 7 + packages/neo-one-node-consensus/tsconfig.json | 3 + packages/neo-one-node-core/gulpfile.js | 9 + packages/neo-one-node-core/package.json | 16 +- packages/neo-one-node-core/src/Account.ts | 2 +- packages/neo-one-node-core/tsconfig.json | 3 + packages/neo-one-node-http-rpc/gulpfile.js | 5 + packages/neo-one-node-http-rpc/package.json | 13 +- .../src/middleware/checkReady.ts | 19 +- packages/neo-one-node-http-rpc/tsconfig.json | 3 + .../neo-one-node-neo-settings/gulpfile.js | 5 + .../neo-one-node-neo-settings/package.json | 13 +- .../tsconfig-output.json | 7 + .../neo-one-node-neo-settings/tsconfig.json | 3 + packages/neo-one-node-network/gulpfile.js | 5 + packages/neo-one-node-network/package.json | 13 +- packages/neo-one-node-network/src/Network.ts | 2 +- packages/neo-one-node-network/tsconfig.json | 3 + packages/neo-one-node-offline/gulpfile.js | 5 + packages/neo-one-node-offline/package.json | 13 +- .../neo-one-node-offline/tsconfig-output.json | 7 + packages/neo-one-node-offline/tsconfig.json | 3 + packages/neo-one-node-protocol/gulpfile.js | 5 + packages/neo-one-node-protocol/package.json | 14 +- packages/neo-one-node-protocol/tsconfig.json | 3 + packages/neo-one-node-rpc-handler/gulpfile.js | 5 + .../neo-one-node-rpc-handler/package.json | 15 +- .../neo-one-node-rpc-handler/tsconfig.json | 3 + .../neo-one-node-storage-cache/gulpfile.js | 5 + .../neo-one-node-storage-cache/package.json | 13 +- .../neo-one-node-storage-cache/tsconfig.json | 3 + .../neo-one-node-storage-common/gulpfile.js | 5 + .../neo-one-node-storage-common/package.json | 13 +- .../tsconfig-output.json | 7 + .../neo-one-node-storage-common/tsconfig.json | 3 + .../neo-one-node-storage-levelup/gulpfile.js | 5 + .../neo-one-node-storage-levelup/package.json | 16 +- .../src/levelUpStorage.ts | 9 +- .../tsconfig.json | 3 + packages/neo-one-node-vm/gulpfile.js | 5 + packages/neo-one-node-vm/package.json | 17 +- .../src/__tests__/execute.test.ts | 6 +- .../src/__tests__/opcodes.test.ts | 10 +- packages/neo-one-node-vm/tsconfig-output.json | 7 + packages/neo-one-node-vm/tsconfig.json | 3 + packages/neo-one-node/gulpfile.js | 5 + packages/neo-one-node/package.json | 13 +- packages/neo-one-node/tsconfig.json | 3 + packages/neo-one-react-common/gulpfile.js | 13 + packages/neo-one-react-common/package.json | 24 +- .../neo-one-react-common/src/FileDisplay.tsx | 4 +- packages/neo-one-react-common/src/FileTab.tsx | 6 +- .../neo-one-react-common/src/LoadingDots.tsx | 4 +- .../neo-one-react-common/src/TooltipBase.tsx | 5 +- packages/neo-one-react-common/src/index.ts | 1 + packages/neo-one-react-common/tsconfig.json | 4 + packages/neo-one-react-core/gulpfile.js | 5 + packages/neo-one-react-core/package.json | 23 +- packages/neo-one-react-core/src/use.tsx | 4 +- packages/neo-one-react-core/tsconfig.json | 3 + packages/neo-one-react/gulpfile.js | 5 + packages/neo-one-react/package.json | 14 +- packages/neo-one-react/tsconfig.json | 3 + .../gulpfile.js | 5 + .../package.json | 17 +- .../src/__data__/nep5.ts | 10 +- .../tsconfig.json | 3 + .../gulpfile.js | 5 + .../package.json | 18 +- .../tsconfig.json | 3 + .../gulpfile.js | 5 + .../package.json | 16 +- .../src/__data__/helpers/startNode.ts | 2 + .../InvokeSmartContractHelper6.test.ts | 5 +- .../compile/helper/contract/DeployHelper.ts | 2 +- .../src/contract/ContractInfoProcessor.ts | 2 +- .../tsconfig.json | 8 + .../neo-one-smart-contract-lib/gulpfile.js | 9 + .../neo-one-smart-contract-lib/package.json | 11 +- .../neo-one-smart-contract-lib/src/index.ts | 1 + .../neo-one-smart-contract-lib/tsconfig.json | 23 +- .../package.json | 10 + .../tsconfig.json | 7 + .../gulpfile.js | 5 + .../package.json | 13 +- .../tsconfig.json | 3 + .../neo-one-smart-contract-test/gulpfile.js | 5 + .../neo-one-smart-contract-test/package.json | 17 +- .../src/__data__/contracts/RedToken.ts | 0 .../src/__data__/contracts/SimpleToken.ts | 1 - .../src/__data__/contracts/TestICO.ts | 3 +- .../src/__data__/contracts/TestToken.ts | 1 - .../contracts/ownership/TestOwnable.ts | 0 .../contracts/ownership/TestSecondary.ts | 0 .../src/__data__/contracts/tsconfig.json | 30 + .../src/__data__/index.ts | 0 .../src/__data__/tokenUtils.ts | 2 +- .../src/__tests__/RedToken.test.ts | 0 .../src/__tests__/TestICO.test.ts | 2 +- .../src/__tests__/TestToken.test.ts | 0 .../__snapshots__/RedToken.test.ts.snap | 0 .../__snapshots__/TestICO.test.ts.snap | 4 +- .../__snapshots__/TestToken.test.ts.snap | 0 .../ownership/TestOwnableContract.test.ts | 2 +- .../__tests__/ownership/TestSecondary.test.ts | 2 +- .../TestOwnableContract.test.ts.snap | 0 .../__snapshots__/TestSecondary.test.ts.snap | 0 .../neo-one-smart-contract-test/tsconfig.json | 6 + .../gulpfile.js | 5 + .../package.json | 15 +- .../tsconfig.json | 3 + packages/neo-one-smart-contract/gulpfile.js | 9 + packages/neo-one-smart-contract/package.json | 13 +- .../neo-one-smart-contract/src/index.d.ts | 4 +- packages/neo-one-smart-contract/tsconfig.json | 25 +- packages/neo-one-suite/gulpfile.js | 5 + packages/neo-one-suite/package.json | 10 + packages/neo-one-ts-utils/gulpfile.js | 5 + packages/neo-one-ts-utils/package.json | 16 +- packages/neo-one-ts-utils/src/class_.ts | 4 +- packages/neo-one-ts-utils/tsconfig.json | 3 + .../gulpfile.js | 5 + .../package.json | 20 +- .../tsconfig.json | 3 + packages/neo-one-utils-node/gulpfile.js | 5 + packages/neo-one-utils-node/package.json | 17 +- packages/neo-one-utils-node/tsconfig.json | 3 + packages/neo-one-utils/gulpfile.js | 5 + packages/neo-one-utils/package.json | 20 +- packages/neo-one-utils/tsconfig.json | 3 + .../0-tokenomics/2-launch/0-info/package.json | 4 +- .../2-launch/1-balance/package.json | 4 +- .../2-launch/2-participate/package.json | 4 +- .../2-launch/3-reactive/chapter.md | 2 +- .../2-launch/3-reactive/package.json | 4 +- .../2-launch/3-reactive/src/utils.solution.ts | 2 +- .../2-launch/4-transfer/package.json | 4 +- .../2-launch/4-transfer/src/utils.solution.ts | 2 +- .../2-launch/4-transfer/src/utils.ts | 2 +- .../2-launch/5-withdraw/package.json | 4 +- .../2-launch/5-withdraw/src/utils.solution.ts | 2 +- .../2-launch/5-withdraw/src/utils.ts | 2 +- packages/neo-one-website/package.json | 42 +- .../neo-one-website/src/components/Header.tsx | 9 +- .../src/components/course/CourseHeader.tsx | 4 - .../src/components/course/chapter/Editor.tsx | 9 +- .../components/course/chapter/NextButton.tsx | 19 +- .../src/containers/Collapse.tsx | 1 + packages/neo-one-website/src/index.tsx | 1 + .../src/utils/getReferences.ts | 19 +- .../src/utils/processors/textProcessor.ts | 1 + .../neo-one-website/static.config.js | 31 +- packages/neo-one-website/tsconfig.json | 4 + packages/neo-one-worker/package.json | 12 +- packages/neo-one-worker/src/endpoint.ts | 2 +- packages/neo-one-worker/tsconfig.json | 3 + renovate.json | 1 - rush.json | 376 + scripts/DockerfileNode | 168 +- scripts/DockerfileNodeGSUtil | 165 +- scripts/checkDependencies.ts | 139 - scripts/e2e/jestSetup.js | 19 - scripts/hooks/checkForUpdates.ts | 44 - scripts/hooks/post-checkout.ts | 3 - scripts/hooks/post-merge.ts | 3 - scripts/hooks/post-rewrite.ts | 3 - scripts/test/jestSetup.js | 10 - scripts/try-publish | 4 +- scripts/website/webpack/loaders/tsLoader.ts | 28 - tsconfig.jest.json | 3 - tsconfig.json | 48 - tsconfig/tsconfig.es2017.browserify.cjs.json | 14 - tsconfig/tsconfig.esnext.browserify.esm.json | 14 - tsconfig/tsconfig.esnext.esm.json | 14 - tslint.json | 32 +- wallaby.js | 6 +- 495 files changed, 11680 insertions(+), 7239 deletions(-) create mode 100644 .dockerignore create mode 100644 .huskyrc.js create mode 100644 .lintstagedrc.js create mode 100644 common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/cli/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/client/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/http/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/logger/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/node/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/react/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/suite/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json create mode 100644 common/changes/@neo-one/utils/rush_2019-11-06-21-56.json create mode 100644 common/config/rush/browser-approved-packages.json create mode 100644 common/config/rush/command-line.json create mode 100644 common/config/rush/common-versions.json create mode 100644 common/config/rush/nonbrowser-approved-packages.json create mode 100644 common/config/rush/version-policies.json rename yarn.lock => common/config/rush/yarn.lock (79%) create mode 100644 common/scripts/install-run-rush.js create mode 100644 common/scripts/install-run-rushx.js create mode 100644 common/scripts/install-run.js delete mode 100644 gulpfile.js delete mode 100644 jest/base.js delete mode 100644 jest/ci.js delete mode 100644 lerna.json delete mode 100644 package.json create mode 100644 packages/neo-one-build-common/package.json create mode 100644 packages/neo-one-build-tests/babel.config.js rename {scripts => packages/neo-one-build-tests/environments}/e2e/NodeEnvironment.js (100%) rename {scripts => packages/neo-one-build-tests/environments}/e2e/One.js (91%) rename {scripts => packages/neo-one-build-tests/environments}/e2e/checkPort.js (100%) create mode 100644 packages/neo-one-build-tests/environments/e2e/jestSetup.js rename {scripts => packages/neo-one-build-tests/environments}/test/NodeEnvironment.js (100%) rename {scripts => packages/neo-one-build-tests/environments}/test/One.js (100%) create mode 100644 packages/neo-one-build-tests/environments/test/jestSetup.js create mode 100644 packages/neo-one-build-tests/jest/base.js create mode 100644 packages/neo-one-build-tests/jest/ci.js rename {jest => packages/neo-one-build-tests/jest}/e2e-ci.js (100%) rename {jest => packages/neo-one-build-tests/jest}/e2e.js (60%) rename {jest => packages/neo-one-build-tests/jest}/ledger.js (100%) rename {jest => packages/neo-one-build-tests/jest}/other.js (100%) rename {jest => packages/neo-one-build-tests/jest}/unit-ci.js (100%) rename {jest => packages/neo-one-build-tests/jest}/unit.js (91%) create mode 100644 packages/neo-one-build-tests/package.json rename {scripts => packages/neo-one-build-tests}/serializers/blockchain.js (100%) rename {scripts => packages/neo-one-build-tests}/serializers/bn.js (100%) rename {scripts => packages/neo-one-build-tests}/serializers/buffer.js (100%) create mode 100644 packages/neo-one-build-tests/tsconfig.jest.json create mode 100644 packages/neo-one-build-tools-web/gulpfile.js rename {scripts/website => packages/neo-one-build-tools-web/includes/now}/package.json.now (100%) rename {scripts/website => packages/neo-one-build-tools-web/includes}/now/preview.now.json (100%) rename {scripts/website => packages/neo-one-build-tools-web/includes}/now/server.now.json (100%) rename {scripts/website => packages/neo-one-build-tools-web/includes}/now/static.now.json (100%) rename {scripts/website => packages/neo-one-build-tools-web/includes}/now/testRunner.now.json (100%) create mode 100644 packages/neo-one-build-tools-web/package.json rename {scripts/website => packages/neo-one-build-tools-web/src}/compile.ts (91%) rename {scripts/website => packages/neo-one-build-tools-web/src}/createKillProcess.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/runCypress.ts (78%) rename {scripts/website => packages/neo-one-build-tools-web/src}/types.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/addDefaultRules.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/alias.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/browsers.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/common.ts (71%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/console.js (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/index.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/babel.ts (86%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/babelLoader.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/cacheLoader.ts (69%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/cssLoader.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/fileLoader.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/index.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/jsLoader.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/rawLoader.ts (100%) create mode 100644 packages/neo-one-build-tools-web/src/webpack/loaders/tsLoader.ts rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/loaders/wasmFileLoader.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/node.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/optimization.ts (91%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/overlay.ts (91%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/plugin/node.api.js (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/plugin/node.tsx (97%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/plugins.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/preview.ts (97%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/rules.ts (100%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/server.ts (95%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/testRunner.ts (97%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/tools.ts (83%) rename {scripts/website => packages/neo-one-build-tools-web/src}/webpack/workers.ts (97%) create mode 100644 packages/neo-one-build-tools-web/tsconfig.json create mode 100644 packages/neo-one-build-tools/bin/neo-one-clean.js create mode 100644 packages/neo-one-build-tools/bin/neo-one-lint-staged.js create mode 100644 packages/neo-one-build-tools/bin/neo-one-lint.js create mode 100644 packages/neo-one-build-tools/bin/neo-one-publish.js create mode 100644 packages/neo-one-build-tools/bin/neo-one-tsc.js create mode 100644 packages/neo-one-build-tools/gulpfile.js rename {tsconfig => packages/neo-one-build-tools/includes/build-configs}/tsconfig.build.json (55%) rename {tsconfig => packages/neo-one-build-tools/includes/build-configs}/tsconfig.cjs.json (100%) rename tsconfig/tsconfig.es2017.cjs.json => packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.browserify.cjs.json (100%) create mode 100644 packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json rename {tsconfig => packages/neo-one-build-tools/includes/build-configs}/tsconfig.es2017.esm.json (100%) rename {tsconfig => packages/neo-one-build-tools/includes/build-configs}/tsconfig.es2018.cjs.json (100%) rename {tsconfig => packages/neo-one-build-tools/includes/build-configs}/tsconfig.esm.json (100%) create mode 100644 packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.browserify.esm.json create mode 100644 packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.esm.json create mode 100644 packages/neo-one-build-tools/includes/tsconfig.base.json create mode 100644 packages/neo-one-build-tools/includes/tsconfig.dev.json rename tsconfig.static.json => packages/neo-one-build-tools/includes/tsconfig.static.json (63%) create mode 100644 packages/neo-one-build-tools/package.json create mode 100644 packages/neo-one-build-tools/src/build.ts create mode 100644 packages/neo-one-build-tools/src/builds/buildBin.ts create mode 100644 packages/neo-one-build-tools/src/builds/buildTypescript.ts create mode 100644 packages/neo-one-build-tools/src/builds/index.ts create mode 100644 packages/neo-one-build-tools/src/builds/rollupDevTools.ts create mode 100644 packages/neo-one-build-tools/src/clean.ts create mode 100644 packages/neo-one-build-tools/src/formats.ts create mode 100644 packages/neo-one-build-tools/src/index.ts create mode 100644 packages/neo-one-build-tools/src/lint.ts create mode 100644 packages/neo-one-build-tools/src/pack.ts create mode 100644 packages/neo-one-build-tools/src/publish.ts create mode 100644 packages/neo-one-build-tools/src/utils.ts create mode 100644 packages/neo-one-build-tools/tsconfig.json rename {types => packages/neo-one-build-tools/types}/bn.js.d.ts (99%) rename {types => packages/neo-one-build-tools/types}/e2e.d.ts (100%) rename packages/{neo-one-react-core/src/global.d.ts => neo-one-build-tools/types/static.d.ts} (100%) create mode 100644 packages/neo-one-cli-common-node/gulpfile.js create mode 100644 packages/neo-one-cli-common-node/tsconfig.json create mode 100644 packages/neo-one-cli-common/gulpfile.js create mode 100644 packages/neo-one-cli-common/tsconfig.json create mode 100644 packages/neo-one-cli/bin/neo-one.js create mode 100644 packages/neo-one-cli/gulpfile.js create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/.neo-one.config.js rename babel.config.js => packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js (100%) create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/client.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/contracts.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/index.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/react.tsx create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/sourceMaps.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/test.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Escrow.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/ICO.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Token.ts rename packages/{neo-one-smart-contract-lib/src/__data__ => neo-one-cli/src/__data__/projects/ico-neotracker/neo-one}/contracts/tsconfig.json (100%) create mode 100644 packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/migration.ts create mode 100644 packages/neo-one-cli/tsconfig.json create mode 100644 packages/neo-one-cli/tsconfig.lint.json create mode 100644 packages/neo-one-client-common/gulpfile.js create mode 100644 packages/neo-one-client-common/tsconfig.json create mode 100644 packages/neo-one-client-core/gulpfile.js delete mode 100644 packages/neo-one-client-core/src/paramUtils.ts create mode 100644 packages/neo-one-client-core/tsconfig.json create mode 100644 packages/neo-one-client-full-common/gulpfile.js create mode 100644 packages/neo-one-client-full-common/tsconfig.json create mode 100644 packages/neo-one-client-full-core/gulpfile.js create mode 100644 packages/neo-one-client-full-core/tsconfig.json create mode 100644 packages/neo-one-client-full/gulpfile.js create mode 100644 packages/neo-one-client-full/tsconfig.json create mode 100644 packages/neo-one-client-switch/gulpfile.js create mode 100644 packages/neo-one-client-switch/tsconfig.json create mode 100644 packages/neo-one-client/gulpfile.js create mode 100644 packages/neo-one-client/tsconfig.json create mode 100644 packages/neo-one-developer-tools-frame/tsconfig.json create mode 100644 packages/neo-one-developer-tools/gulpfile.js create mode 100644 packages/neo-one-developer-tools/tsconfig.json create mode 100644 packages/neo-one-editor-server/tsconfig.json create mode 100644 packages/neo-one-editor/tsconfig.json create mode 100644 packages/neo-one-http-context/gulpfile.js create mode 100644 packages/neo-one-http-context/tsconfig.json create mode 100644 packages/neo-one-http/gulpfile.js create mode 100644 packages/neo-one-http/tsconfig.json create mode 100644 packages/neo-one-local-browser-worker/tsconfig.json create mode 100644 packages/neo-one-local-browser/tsconfig.json create mode 100644 packages/neo-one-local-singleton/tsconfig.json create mode 100644 packages/neo-one-logger-config/gulpfile.js create mode 100644 packages/neo-one-logger-config/tsconfig.json create mode 100644 packages/neo-one-logger/gulpfile.js create mode 100644 packages/neo-one-logger/tsconfig.json create mode 100644 packages/neo-one-node-bin/bin/neo-one-node.js create mode 100644 packages/neo-one-node-bin/gulpfile.js create mode 100644 packages/neo-one-node-bin/tsconfig.json create mode 100644 packages/neo-one-node-blockchain/gulpfile.js create mode 100644 packages/neo-one-node-blockchain/tsconfig.json create mode 100644 packages/neo-one-node-browser-worker/tsconfig.json create mode 100644 packages/neo-one-node-browser/tsconfig.json create mode 100644 packages/neo-one-node-consensus/gulpfile.js create mode 100644 packages/neo-one-node-consensus/tsconfig-output.json create mode 100644 packages/neo-one-node-consensus/tsconfig.json create mode 100644 packages/neo-one-node-core/gulpfile.js create mode 100644 packages/neo-one-node-core/tsconfig.json create mode 100644 packages/neo-one-node-http-rpc/gulpfile.js create mode 100644 packages/neo-one-node-http-rpc/tsconfig.json create mode 100644 packages/neo-one-node-neo-settings/gulpfile.js create mode 100644 packages/neo-one-node-neo-settings/tsconfig-output.json create mode 100644 packages/neo-one-node-neo-settings/tsconfig.json create mode 100644 packages/neo-one-node-network/gulpfile.js create mode 100644 packages/neo-one-node-network/tsconfig.json create mode 100644 packages/neo-one-node-offline/gulpfile.js create mode 100644 packages/neo-one-node-offline/tsconfig-output.json create mode 100644 packages/neo-one-node-offline/tsconfig.json create mode 100644 packages/neo-one-node-protocol/gulpfile.js create mode 100644 packages/neo-one-node-protocol/tsconfig.json create mode 100644 packages/neo-one-node-rpc-handler/gulpfile.js create mode 100644 packages/neo-one-node-rpc-handler/tsconfig.json create mode 100644 packages/neo-one-node-storage-cache/gulpfile.js create mode 100644 packages/neo-one-node-storage-cache/tsconfig.json create mode 100644 packages/neo-one-node-storage-common/gulpfile.js create mode 100644 packages/neo-one-node-storage-common/tsconfig-output.json create mode 100644 packages/neo-one-node-storage-common/tsconfig.json create mode 100644 packages/neo-one-node-storage-levelup/gulpfile.js create mode 100644 packages/neo-one-node-storage-levelup/tsconfig.json create mode 100644 packages/neo-one-node-vm/gulpfile.js create mode 100644 packages/neo-one-node-vm/tsconfig-output.json create mode 100644 packages/neo-one-node-vm/tsconfig.json create mode 100644 packages/neo-one-node/gulpfile.js create mode 100644 packages/neo-one-node/tsconfig.json create mode 100644 packages/neo-one-react-common/gulpfile.js create mode 100644 packages/neo-one-react-common/tsconfig.json create mode 100644 packages/neo-one-react-core/gulpfile.js create mode 100644 packages/neo-one-react-core/tsconfig.json create mode 100644 packages/neo-one-react/gulpfile.js create mode 100644 packages/neo-one-react/tsconfig.json create mode 100644 packages/neo-one-smart-contract-codegen/gulpfile.js create mode 100644 packages/neo-one-smart-contract-codegen/tsconfig.json create mode 100644 packages/neo-one-smart-contract-compiler-node/gulpfile.js create mode 100644 packages/neo-one-smart-contract-compiler-node/tsconfig.json create mode 100644 packages/neo-one-smart-contract-compiler/gulpfile.js create mode 100644 packages/neo-one-smart-contract-compiler/tsconfig.json create mode 100644 packages/neo-one-smart-contract-lib/gulpfile.js create mode 100644 packages/neo-one-smart-contract-test-browser/tsconfig.json create mode 100644 packages/neo-one-smart-contract-test-common/gulpfile.js create mode 100644 packages/neo-one-smart-contract-test-common/tsconfig.json create mode 100644 packages/neo-one-smart-contract-test/gulpfile.js rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/RedToken.ts (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/SimpleToken.ts (90%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/TestICO.ts (91%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/TestToken.ts (93%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/ownership/TestOwnable.ts (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/contracts/ownership/TestSecondary.ts (100%) create mode 100644 packages/neo-one-smart-contract-test/src/__data__/contracts/tsconfig.json rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/index.ts (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__data__/tokenUtils.ts (99%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/RedToken.test.ts (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/TestICO.test.ts (98%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/TestToken.test.ts (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/__snapshots__/RedToken.test.ts.snap (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/__snapshots__/TestICO.test.ts.snap (58%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/__snapshots__/TestToken.test.ts.snap (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/ownership/TestOwnableContract.test.ts (98%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/ownership/TestSecondary.test.ts (97%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/ownership/__snapshots__/TestOwnableContract.test.ts.snap (100%) rename packages/{neo-one-smart-contract-lib => neo-one-smart-contract-test}/src/__tests__/ownership/__snapshots__/TestSecondary.test.ts.snap (100%) create mode 100644 packages/neo-one-smart-contract-test/tsconfig.json create mode 100644 packages/neo-one-smart-contract-typescript-plugin/gulpfile.js create mode 100644 packages/neo-one-smart-contract-typescript-plugin/tsconfig.json create mode 100644 packages/neo-one-smart-contract/gulpfile.js create mode 100644 packages/neo-one-suite/gulpfile.js create mode 100644 packages/neo-one-ts-utils/gulpfile.js create mode 100644 packages/neo-one-ts-utils/tsconfig.json create mode 100644 packages/neo-one-typescript-concatenator/gulpfile.js create mode 100644 packages/neo-one-typescript-concatenator/tsconfig.json create mode 100644 packages/neo-one-utils-node/gulpfile.js create mode 100644 packages/neo-one-utils-node/tsconfig.json create mode 100644 packages/neo-one-utils/gulpfile.js create mode 100644 packages/neo-one-utils/tsconfig.json rename static.config.js => packages/neo-one-website/static.config.js (81%) create mode 100644 packages/neo-one-website/tsconfig.json create mode 100644 packages/neo-one-worker/tsconfig.json create mode 100644 rush.json delete mode 100644 scripts/checkDependencies.ts delete mode 100644 scripts/e2e/jestSetup.js delete mode 100644 scripts/hooks/checkForUpdates.ts delete mode 100644 scripts/hooks/post-checkout.ts delete mode 100644 scripts/hooks/post-merge.ts delete mode 100644 scripts/hooks/post-rewrite.ts delete mode 100644 scripts/test/jestSetup.js delete mode 100644 scripts/website/webpack/loaders/tsLoader.ts delete mode 100644 tsconfig.jest.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig/tsconfig.es2017.browserify.cjs.json delete mode 100644 tsconfig/tsconfig.esnext.browserify.esm.json delete mode 100644 tsconfig/tsconfig.esnext.esm.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 0742d13b65..2227ae798a 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" }} + - v8-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v5-yarn-10-{{ .Branch }}- + - v8-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: v8-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &restore-yarn-cache-12 keys: - - v5-yarn-12-{{ .Branch }}-{{ checksum "yarn.lock" }} + - v8-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v5-yarn-12-{{ .Branch }}- + - v8-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: v8-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &filter-ignore-bors-tmp branches: @@ -29,127 +29,107 @@ 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 - persist_to_workspace: root: ~/neo-one paths: - - dist - - node_modules + - common/temp/node_modules + - packages/*/lib + - 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 - persist_to_workspace: root: ~/neo-one paths: - - dist - - node_modules + - common/temp/node_modules + - packages/*/lib + - 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 +147,41 @@ jobs: test10: <<: *node10 <<: *test10 - e2e10: - <<: *node10 - <<: *e2e10 - build-e2e10: + build-10: <<: *node10 - <<: *build-e2e10 + <<: *build-10 test12: <<: *node12 <<: *test12 - e2e12: - <<: *node12 - <<: *e2e12 - build-e2e12: + build-12: <<: *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..7d3057d02b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +**/node_modules** +**/lib* +**/package-deps.json +**/*.log diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 245c27ea83..0689408b0e 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: Rush Link Root + run: rush link-root - name: Run Cypress Express Test - run: yarn test:cypress-express + run: rush test-cypress --express + - name: Rush Unlink Root + run: rush unlink-root - name: Store Cypress Screenshots if: failure() continue-on-error: true diff --git a/.gitignore b/.gitignore index b63632664f..89dd881d41 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,6 @@ /build/ /tmp /packages/*/lib -/packages/*/dist -/packages/*/dist-ts .rpt2_cache /reports .nyc_output @@ -17,6 +15,7 @@ # Playground /packages/neo-one-playground +# Website /packages/neo-one-website/tmp /packages/neo-one-website/build /packages/neo-one-website/dist @@ -77,3 +76,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..78bf36e386 --- /dev/null +++ b/.huskyrc.js @@ -0,0 +1,12 @@ +const path = require('path'); + +const basePath = path.resolve(__dirname, '.git'); + +module.exports = { + hooks: { + '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', + 'post-checkout': 'rush install', + }, +}; 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..5e848e4fda 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,10 @@ "deepscan.enable": true, "files.associations": { "[Dd]ockerfile*": "dockerfile", - "docker-compose*": "yaml" + "docker-compose*": "yaml", + "*.d.ts.map": "json" + }, + "search.exclude": { + "packages/*/lib/**": true } } 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/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..a022effccb --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/cli-common-node" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..9c6d68dff5 --- /dev/null +++ b/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/cli-common" + } + ], + "packageName": "@neo-one/cli-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..288c787a9c --- /dev/null +++ b/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..9bd93972bb --- /dev/null +++ b/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..80f5eac741 --- /dev/null +++ b/common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..05b2034a6c --- /dev/null +++ b/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-full-common" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..d8d3c7b4ed --- /dev/null +++ b/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-full-core" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..9b60df4150 --- /dev/null +++ b/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-full" + } + ], + "packageName": "@neo-one/client-full", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..f47f817481 --- /dev/null +++ b/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..48d4e04aa0 --- /dev/null +++ b/common/changes/@neo-one/client/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/client" + } + ], + "packageName": "@neo-one/client", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json b/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..02d50597dd --- /dev/null +++ b/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/developer-tools" + } + ], + "packageName": "@neo-one/developer-tools", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json b/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..8cbe73eef8 --- /dev/null +++ b/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/http-context" + } + ], + "packageName": "@neo-one/http-context", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http/rush_2019-11-06-21-56.json b/common/changes/@neo-one/http/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..01b07d637f --- /dev/null +++ b/common/changes/@neo-one/http/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/http" + } + ], + "packageName": "@neo-one/http", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json b/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..2164cb21da --- /dev/null +++ b/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/logger-config" + } + ], + "packageName": "@neo-one/logger-config", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json b/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..a65ac3f00a --- /dev/null +++ b/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/logger" + } + ], + "packageName": "@neo-one/logger", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..649aadc715 --- /dev/null +++ b/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-bin" + } + ], + "packageName": "@neo-one/node-bin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..cc112ffb73 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..8f71463a15 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-consensus" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..503f8883e2 --- /dev/null +++ b/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..804c8ef36a --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-http-rpc" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..2b76db21c9 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-neo-settings" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..896886d7e8 --- /dev/null +++ b/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-network" + } + ], + "packageName": "@neo-one/node-network", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..c99d528c3c --- /dev/null +++ b/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-offline" + } + ], + "packageName": "@neo-one/node-offline", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..099f7dc86a --- /dev/null +++ b/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..18ca224341 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..05d3fc528c --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-storage-cache" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..38685a4f06 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-storage-common" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..03c6f9529c --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-storage-levelup" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..9dac86e55e --- /dev/null +++ b/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node-vm" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..7755fd63b1 --- /dev/null +++ b/common/changes/@neo-one/node/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..d183a07736 --- /dev/null +++ b/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/react-common" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..d44adfd601 --- /dev/null +++ b/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/react-core" + } + ], + "packageName": "@neo-one/react-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..630d97bc0c --- /dev/null +++ b/common/changes/@neo-one/react/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/react" + } + ], + "packageName": "@neo-one/react", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..8d98aa426f --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-codegen" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..2f6de8bcfc --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-compiler-node" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..be59c9ffbe --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-compiler" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..5d9fb9ce8c --- /dev/null +++ b/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-lib" + } + ], + "packageName": "@neo-one/smart-contract-lib", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..25bb2ab435 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-test-common" + } + ], + "packageName": "@neo-one/smart-contract-test-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..05e5a055fc --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-test" + } + ], + "packageName": "@neo-one/smart-contract-test", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..22e6ad4fe4 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract-typescript-plugin" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..a98538275c --- /dev/null +++ b/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/smart-contract" + } + ], + "packageName": "@neo-one/smart-contract", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json b/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..ae6416bec8 --- /dev/null +++ b/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/suite" + } + ], + "packageName": "@neo-one/suite", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json b/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..2ba07f3141 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/ts-utils" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json b/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..45e3358810 --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/typescript-concatenator" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..f1f30b3cb0 --- /dev/null +++ b/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/utils-node" + } + ], + "packageName": "@neo-one/utils-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json b/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json new file mode 100644 index 0000000000..556037f2cd --- /dev/null +++ b/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Migrate to Rush", + "type": "minor", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json new file mode 100644 index 0000000000..c586f304db --- /dev/null +++ b/common/config/rush/browser-approved-packages.json @@ -0,0 +1,1226 @@ +// 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": "@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/developer-tools", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/developer-tools-frame", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/ec-key", + "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-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": "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": "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": "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": "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": "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..8330551c08 --- /dev/null +++ b/common/config/rush/command-line.json @@ -0,0 +1,443 @@ +{ + "$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": "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/lib/compile --bundle workers --watch" + }, + { + "commandKind": "global", + "name": "compile-overlay-dev", + "summary": "Compile overlay in dev mode", + "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/lib/compile --bundle overlay --watch" + }, + { + "commandKind": "global", + "name": "compile-test-runner-dev", + "summary": "Compile test-runner in dev mode", + "description": "Compile the NEO-ONE test-runner in dev mode", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/lib/compile --bundle testRunner --watch" + }, + { + "commandKind": "global", + "name": "compile-preview-dev", + "summary": "Compile preview in dev mode", + "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/lib/compile --bundle preview --watch" + }, + { + "commandKind": "global", + "name": "serve-server", + "summary": "Compile and serve editor server (only a 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/lib/compile --watch --bundle server" + }, + { + "commandKind": "global", + "name": "serve-static-dev", + "summary": "Build and serve static with React Static in dev mode", + "description": "Build and serve NEO-ONE website with React Static in dev mode", + "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 in dev mode", + "description": "Compile the workers and overlay bundles in dev mode", + "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 in dev mode", + "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", + "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/lib/compile --bundle workers" + }, + { + "commandKind": "global", + "name": "compile-overlay-prod", + "summary": "Compile overlay in dev mode", + "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/lib/compile --bundle overlay" + }, + { + "commandKind": "global", + "name": "serve-preview-prod", + "summary": "Compile and serve preview in prod mode", + "description": "Compile and serve the NEO-ONE editor preview in prod mode", + "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/lib/compile --bundle preview && serve dist/preview -p 8080" + }, + { + "commandKind": "global", + "name": "serve-test-runner-prod", + "summary": "Compile and serve test-runner in prod mode", + "description": "Compile and serve the NEO-ONE test-runner in prod mode", + "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/lib/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 in prod mode", + "description": "Compile the workers and overlay bundles in prod mode", + "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 mode (run compile-website-prod & link-root before, run unlink-root when done)", + "description": "Run the entire NEO-ONE website in prod mode", + "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/lib/compile --bundle testRunner && node ./packages/neo-one-build-tools-web/lib/compile --bundle server && node ./packages/neo-one-build-tools-web/lib/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" + }, + { + "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/lib/runCypress" + }, + { + "commandKind": "global", + "name": "upload-coverage", + "summary": "upload coverage (CI)", + "description": "uploaded codecov coverage reports from unit tests", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "codecov -f coverage/coverage-final.json" + }, + { + "commandKind": "global", + "name": "clean", + "summary": "Clean up NEO-ONE packages", + "description": "Remove build logs from all packages (and optionally lib/* 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": "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": "Runs prettier/tslint across staged files", + "description": "Runs `lint:staged` across packages", + "safeForSimultaneousRushProcesses": true, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + }, + { + "commandKind": "bulk", + "name": "lint", + "summary": "Runs tslint for every package", + "description": "Runs tslint for every file in package", + "safeForSimultaneousRushProcesses": true, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + }, + { + "commandKind": "bulk", + "name": "pack", + "summary": "pack built files into 'dist'", + "description": "transform sources and other files for npm exporting", + "safeForSimultaneousRushProcesses": false, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + }, + { + "commandKind": "global", + "name": "release", + "summary": "release packed packages with given format", + "description": "try to publish packages in `dist`", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "node packages/neo-one-build-tools/bin/neo-one-publish.js" + } + ], + "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 lib/* 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", "pack", "release"], + "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..f26790c5aa --- /dev/null +++ b/common/config/rush/common-versions.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json", + "preferredVersions": { + "typescript": "3.6.3" + }, + "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..149eb11937 --- /dev/null +++ b/common/config/rush/version-policies.json @@ -0,0 +1,90 @@ +/** + * This is configuration file is used for advanced publishing configurations with Rush. + * For full documentation, please see https://rushjs.io + */ + + /** + * A list of version policy definitions. A "version policy" is a custom package versioning + * strategy that affets "rush change", "rush version", and "rush publish". The strategy applies + * to a set of projects that are specified using the "versionPolicyName" field in rush.json. + */ +[ + // { + // /** + // * (Required) Indicates the kind of version policy being defined ("lockStepVersion" or "individualVersion"). + // * + // * The "lockStepVersion" mode specifies that the projects will use "lock-step versioning". This + // * strategy is appropriate for a set of packages that act as selectable components of a + // * unified product. The entire set of packages are always published together, and always share + // * the same NPM version number. When the packages depend on other packages in the set, the + // * SemVer range is usually restricted to a single version. + // */ + // "definitionName": "lockStepVersion", + // + // /** + // * (Required) The name that will be used for the "versionPolicyName" field in rush.json. + // * This name is also used command-line parameters such as "--version-policy" + // * and "--to-version-policy". + // */ + // "policyName": "MyBigFramework", + // + // /** + // * (Required) The current version. All packages belonging to the set should have this version + // * in the current branch. When bumping versions, Rush uses this to determine the next version. + // * (The "version" field in package.json is NOT considered.) + // */ + // "version": "1.0.0", + // + // /** + // * (Required) The type of bump that will be performed when publishing the next release. + // * When creating a release branch in Git, this field should be updated according to the + // * type of release. + // * + // * Valid values are: "prerelease", "release", "minor", "patch", "major" + // */ + // "nextBump": "prerelease", + // + // /** + // * (Optional) If specified, all packages in the set share a common CHANGELOG.md file. + // * This file is stored with the specified "main" project, which must be a member of the set. + // * + // * If this field is omitted, then a separate CHANGELOG.md file will be maintained for each + // * package in the set. + // */ + // "mainProject": "my-app" + // }, + // + // { + // /** + // * (Required) Indicates the kind of version policy being defined ("lockStepVersion" or "individualVersion"). + // * + // * The "individualVersion" mode specifies that the projects will use "individual versioning". + // * This is the typical NPM model where each package has an independent version number + // * and CHANGELOG.md file. Although a single CI definition is responsible for publishing the + // * packages, they otherwise don't have any special relationship. The version bumping will + // * depend on how developers answer the "rush change" questions for each package that + // * is changed. + // */ + // "definitionName": "individualVersion", + // + // "policyName": "MyRandomLibraries", + // + // /** + // * (Optional) This can be used to enforce that all packages in the set must share a common + // * major version number, e.g. because they are from the same major release branch. + // * It can also be used to discourage people from accidentally making "MAJOR" SemVer changes + // * inappropriately. The minor/patch version parts will be bumped independently according + // * to the types of changes made to each project, according to the "rush change" command. + // */ + // "lockedMajor": 3, + // + // /** + // * (Optional) When publishing is managed by Rush, by default the "rush change" command will + // * request changes for any projects that are modified by a pull request. These change entries + // * will produce a CHANGELOG.md file. If you author your CHANGELOG.md manually or announce updates + // * in some other way, set "exemptFromRushChange" to true to tell "rush change" to ignore the projects + // * belonging to this version policy. + // */ + // "exemptFromRushChange": false + // } +] diff --git a/yarn.lock b/common/config/rush/yarn.lock similarity index 79% rename from yarn.lock rename to common/config/rush/yarn.lock index d4a045d35c..da1d4401b5 100644 --- a/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2,25 +2,24 @@ # 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.7.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.0.tgz#8d10c9acb2acb362d7614a9493e1791c69100d89" + integrity sha512-jECEqAq6Ngf3pOhLSg7od9WKyrIacyh1oNNYtRXNn+ummSHCTXBamGywOAtiae34Vk7zKuQNnLvo2BKTMCoV4A== dependencies: commander "^2.8.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: @@ -33,39 +32,19 @@ 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/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== +"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.5.5", "@babel/core@^7.6.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" + integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== 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/generator" "^7.7.2" + "@babel/helpers" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.7.2" + convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" lodash "^4.17.13" @@ -84,143 +63,140 @@ 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.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" + integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== dependencies: - "@babel/types" "^7.6.3" + "@babel/types" "^7.7.2" 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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" + integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.0" "@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== + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz#32dd9551d6ed3a5fc2edc50d6912852aa18274d9" + integrity sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.7.0" + "@babel/types" "^7.7.0" -"@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@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz#c6b8254d305bacd62beb648e4dea7d3ed79f352d" + integrity sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.7.0" esutils "^2.0.0" "@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== - dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz#df8942452c2c1a217335ca7e393b9afc67f668dc" + integrity sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw== + dependencies: + "@babel/helper-hoist-variables" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-create-class-features-plugin@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz#bcdc223abbfdd386f94196ae2544987f8df775e8" + integrity sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA== + dependencies: + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-member-expression-to-functions" "^7.7.0" + "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.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-create-regexp-features-plugin@^7.7.0": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz#6f20443778c8fce2af2ff4206284afc0ced65db6" + integrity sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ== 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/helper-regex" "^7.4.4" + regexpu-core "^4.6.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== +"@babel/helper-define-map@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529" + integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/helper-function-name" "^7.7.0" + "@babel/types" "^7.7.0" 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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz#db2a6705555ae1f9f33b4b8212a546bc7f9dc3ef" + integrity sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" + integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== 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.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" -"@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.0.0", "@babel/helper-get-function-arity@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" + integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81" + integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a" + integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.7.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d" + integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.0" -"@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.1.0", "@babel/helper-module-transforms@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786" + integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ== 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.7.0" + "@babel/helper-simple-access" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365" + integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.0" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -234,60 +210,60 @@ 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/helper-remap-async-to-generator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7" + integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.0" + "@babel/helper-wrap-function" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-replace-supers@^7.5.5", "@babel/helper-replace-supers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512" + integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.0" + "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-simple-access@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d" + integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-split-export-declaration@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" + integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-wrap-function@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74" + integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w== + dependencies: + "@babel/helper-function-name" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helpers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" + integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" "@babel/highlight@^7.0.0": version "7.5.0" @@ -303,37 +279,32 @@ 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.7.0", "@babel/parser@^7.7.2": + version "7.7.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" + integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971" + integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-remap-async-to-generator" "^7.7.0" "@babel/plugin-syntax-async-generators" "^7.2.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.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz#ac54e728ecf81d90e8f4d2a9c05a890457107917" + integrity sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-create-class-features-plugin" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f" + integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-dynamic-import" "^7.2.0" @@ -386,14 +357,13 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.2.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-unicode-property-regex@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d" + integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" @@ -458,6 +428,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-top-level-await@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d" + integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.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" @@ -472,14 +449,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.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-transform-async-to-generator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492" + integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-remap-async-to-generator" "^7.7.0" "@babel/plugin-transform-block-scoped-functions@^7.2.0": version "7.2.0" @@ -488,7 +465,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.3": +"@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== @@ -496,18 +473,18 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@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-classes@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a" + integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA== 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-annotate-as-pure" "^7.7.0" + "@babel/helper-define-map" "^7.7.0" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-optimise-call-expression" "^7.7.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-replace-supers" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.2.0": @@ -524,14 +501,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b" + integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" "@babel/plugin-transform-duplicate-keys@^7.5.0": version "7.5.0" @@ -555,12 +531,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a" + integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA== dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-literals@^7.2.0": @@ -586,39 +562,39 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" + integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== dependencies: - "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-module-transforms" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-simple-access" "^7.7.0" babel-plugin-dynamic-import-node "^2.3.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417" + integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966" + integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf" + integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg== dependencies: - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.0" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -674,19 +650,19 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.2.0" -"@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@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz#834b0723ba78cd4d24d7d629300c2270f516d0b7" + integrity sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ== dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-builder-react-jsx" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.2.0" -"@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-regenerator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc" + integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg== dependencies: regenerator-transform "^0.14.0" @@ -714,7 +690,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0", "@babel/plugin-transform-spread@^7.6.2": +"@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== @@ -745,129 +721,81 @@ "@babel/helper-plugin-utils" "^7.0.0" "@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.7.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz#eb9f14c516b5d36f4d6f3a9d7badae6d0fc313d4" + integrity sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.6.0" + "@babel/helper-create-class-features-plugin" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@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.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3" + integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" -"@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.7.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" + integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== 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" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" + core-js "^2.6.5" + regenerator-runtime "^0.13.2" -"@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-env@^7.0.0", "@babel/preset-env@^7.5.5", "@babel/preset-env@^7.6.3": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" + integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.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-async-generator-functions" "^7.7.0" + "@babel/plugin-proposal-dynamic-import" "^7.7.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-proposal-unicode-property-regex" "^7.7.0" "@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-syntax-top-level-await" "^7.7.0" "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-async-to-generator" "^7.7.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-classes" "^7.7.0" "@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-dotall-regex" "^7.7.0" "@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-function-name" "^7.7.0" "@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-modules-commonjs" "^7.7.0" + "@babel/plugin-transform-modules-systemjs" "^7.7.0" + "@babel/plugin-transform-modules-umd" "^7.7.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" "@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-regenerator" "^7.7.0" "@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" + "@babel/plugin-transform-unicode-regex" "^7.7.0" + "@babel/types" "^7.7.1" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" @@ -875,13 +803,13 @@ semver "^5.5.0" "@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.7.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.0.tgz#8ab0c4787d98cf1f5f22dabf115552bf9e4e406c" + integrity sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA== 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" "^7.7.0" "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" @@ -891,87 +819,56 @@ integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== "@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.7.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.0.tgz#4e23ecf840296ef79c605baaa5c89e1a2426314b" + integrity sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg== 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" + source-map-support "^0.5.16" "@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== + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.2.tgz#5a8c4e2f8688ce58adc9eb1d8320b6e7341f96ce" + integrity sha512-GfVnHchOBvIMsweQ13l4jd9lT4brkevnavnVOej5g2y7PpTRY+R4pcQlCjWMZoUla5rMLFzaS/Ll2s59cB1TqQ== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@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== - dependencies: - regenerator-runtime "^0.13.2" - -"@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": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" + integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== dependencies: regenerator-runtime "^0.13.2" "@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" + version "7.7.3" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.7.3.tgz#9a4f7fc64876b11398e7371665969ccfdb0c9806" + integrity sha512-tVwxALbq7HGudHD0oZ6SQPkWM2L/Snw1vcbrtirDTqZsgswZ9xyuOOsSplqGtyazCCt9fidbymM47ZfYjASscg== -"@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== +"@babel/template@^7.4.0", "@babel/template@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" + integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== 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/parser" "^7.7.0" + "@babel/types" "^7.7.0" -"@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== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" + integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== 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" + "@babel/generator" "^7.7.2" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/types" "^7.7.2" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" @@ -985,19 +882,10 @@ 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.7.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" + integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -1011,35 +899,6 @@ 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 +910,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.1" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.1.tgz#3c0b5b8de6eaac605dac3b1f1c3f5916c1c6eaea" + integrity sha512-SfzDqOvWBSlfGRm8ak/XHUXAnndwHU2qJIRr1LIC7j2UqWcZoJ+286CuNloJbkwfyEAO6tQggLd4E/WHUAcKZQ== 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,11 +929,6 @@ 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" @@ -1085,40 +939,33 @@ "@emotion/utils" "0.11.2" "@emotion/weak-memoize" "0.2.4" -"@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.22" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.22.tgz#2ac7bcf9b99a1979ab5b0a876fbf37ab0688b177" + integrity sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA== dependencies: "@babel/runtime" "^7.5.5" "@emotion/cache" "^10.0.17" - "@emotion/css" "^10.0.14" - "@emotion/serialize" "^0.11.10" + "@emotion/css" "^10.0.22" + "@emotion/serialize" "^0.11.12" "@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== +"@emotion/css@^10.0.22", "@emotion/css@^10.0.9": + version "10.0.22" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.22.tgz#37b1abb6826759fe8ac0af0ac0034d27de6d1793" + integrity sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA== dependencies: - "@emotion/serialize" "^0.11.8" + "@emotion/serialize" "^0.11.12" "@emotion/utils" "0.11.2" - babel-plugin-emotion "^10.0.14" + babel-plugin-emotion "^10.0.22" "@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/is-prop-valid@^0.8.1": +"@emotion/is-prop-valid@0.8.5", "@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== @@ -1130,10 +977,10 @@ 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== +"@emotion/serialize@^0.11.12", "@emotion/serialize@^0.11.14", "@emotion/serialize@^0.11.8": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.14.tgz#56a6d8d04d837cc5b0126788b2134c51353c6488" + integrity sha512-6hTsySIuQTbDbv00AnUO6O6Xafdwo5GswRlMZ5hHqiFx+4pZ7uGWXUQFW46Kc2taGhP89uXMXn/lWQkdyTosPA== dependencies: "@emotion/hash" "0.7.3" "@emotion/memoize" "0.7.3" @@ -1146,23 +993,23 @@ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== -"@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.23", "@emotion/styled-base@^10.0.24": + version "10.0.24" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.24.tgz#9497efd8902dfeddee89d24b0eeb26b0665bfe8b" + integrity sha512-AnBImerf0h4dGAJVo0p0VE8KoAns71F28ErGFK474zbNAHX6yqSWQUasb+1jvg/VPwZjCp19+tAr6oOB0pwmLQ== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.3" - "@emotion/serialize" "^0.11.11" + "@emotion/is-prop-valid" "0.8.5" + "@emotion/serialize" "^0.11.14" "@emotion/utils" "0.11.2" -"@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.23" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.23.tgz#2f8279bd59b99d82deade76d1046249ddfab7c1b" + integrity sha512-gNr04eqBQ2iYUx8wFLZDfm3N8/QUOODu/ReDXa693uyQGy2OqA+IhPJk+kA7id8aOfwAsMuvZ0pJImEXXKtaVQ== dependencies: - "@emotion/styled-base" "^10.0.17" - babel-plugin-emotion "^10.0.17" + "@emotion/styled-base" "^10.0.23" + babel-plugin-emotion "^10.0.23" "@emotion/stylis@0.8.4": version "0.8.4" @@ -1213,80 +1060,6 @@ 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== - 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" - "@fimbul/bifrost@^0.21.0": version "0.21.0" resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.21.0.tgz#d0fafa25938fda475657a6a1e407a21bbe02c74e" @@ -1326,19 +1099,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.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.0.tgz#2f9ce301c8898e1c3248b0a8564696b24d1a9a5a" + integrity sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw== "@hapi/joi@^15.0.0": version "15.1.1" @@ -1351,11 +1124,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 +1278,62 @@ "@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== +"@ledgerhq/devices@^4.74.2": + version "4.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.74.2.tgz#f7042c31b491ba3d9fad506ec6519674fd9c7474" + integrity sha512-EUA2S28DWWKvUs9XOIpdNZMU5HGyXIZU2nVr6Rr0yYvYTEuItuBSvtfot17rSoyYLwClOoNPHMqXAvrCmr/6hg== dependencies: - "@ledgerhq/errors" "^4.72.2" + "@ledgerhq/errors" "^4.74.2" "@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.74.2": + version "4.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.74.2.tgz#586cfaed135354e94afda4e7ab2334abcdce187a" + integrity sha512-Y42pWQlxP0cD5av/UKXM0PXCL4knylP4lZ0BFMPDDqU8VTOWKhj92sWJJgb4beqU19i7uuEqqAeYbMMt1ubwpg== -"@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.74.2": + version "4.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.74.2.tgz#a1b49562bdb781b07ec85072e1eb80b648078fa3" + integrity sha512-ed2dApJWGEZFdLX4Z3wRAWKXiPloNpqE22KkehiBgDCMtiJBTCtI7cH97OgsjqAac9fEelUXplQIPLbYjiWlJQ== dependencies: - "@ledgerhq/devices" "^4.72.2" - "@ledgerhq/errors" "^4.72.2" - "@ledgerhq/hw-transport" "^4.72.2" + "@ledgerhq/devices" "^4.74.2" + "@ledgerhq/errors" "^4.74.2" + "@ledgerhq/hw-transport" "^4.74.2" "@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.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.74.2.tgz#4880f5dada00b6af507275234086d198540d290a" + integrity sha512-wdNdr7oojIEj7EZjoJ5L+R7rdm1wTEMB7Sy+/cR2CwgEIn2L+qKhgUrBcpMeiU+SN3tKrTAzUZ2+ZcTSpY4GZA== + dependencies: + "@ledgerhq/devices" "^4.74.2" + "@ledgerhq/errors" "^4.74.2" + "@ledgerhq/hw-transport" "^4.74.2" + "@ledgerhq/hw-transport-node-hid-noevents" "^4.74.2" "@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.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.74.2.tgz#20946865204113eb4a586b2ac8d721730ee35bad" + integrity sha512-islCIL1HTnmSEj6V9U/f9TT9HHe9sviDuN3Ra0zK65cGaWqQa3Ni6wQil2wl7vNrEN7inwqAq5QOf3LzEFTOtg== dependencies: - "@ledgerhq/errors" "^4.72.2" - "@ledgerhq/hw-transport" "^4.72.2" + "@ledgerhq/errors" "^4.74.2" + "@ledgerhq/hw-transport" "^4.74.2" "@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.74.2": + version "4.74.2" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.74.2.tgz#dc4874b77616b63419cee5eed746dc23183ab6ce" + integrity sha512-83SiHd7wuif/epq58n9kPFhqr/1zv9a13nDYFLinaUGvRrx5jGFvCq9HiS/WIPOeIHsnuStpqKQbpUDvlRlHKg== dependencies: - "@ledgerhq/devices" "^4.72.2" - "@ledgerhq/errors" "^4.72.2" + "@ledgerhq/devices" "^4.74.2" + "@ledgerhq/errors" "^4.74.2" events "^3.0.0" "@ledgerhq/logs@^4.72.0": @@ -1568,675 +1341,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== +"@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== dependencies: "@babel/runtime" "^7.2.0" "@material-ui/system" "^3.0.0-alpha.0" @@ -2293,6 +1401,119 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@neo-one/client-common@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-common/-/client-common-2.3.0.tgz#311a7bcbec94428fb329bde108f0ff66f0798635" + integrity sha512-OmJaSJICbHUgcxycic60EarmWueUdgkmVwmPb7FgeF2uxtrWqd80+ts5G9dX8D+vYgK3EuWhK6LICS7iH7sLDw== + dependencies: + "@neo-one/ec-key" "^0.1.0" + "@neo-one/utils" "^2.3.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.2" + safe-stable-stringify "^1.1.0" + scrypt-js "^2.0.4" + source-map "^0.7.3" + tslib "^1.10.0" + wif "^2.0.6" + +"@neo-one/client-core@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-core/-/client-core-2.3.0.tgz#5661abe068ab7b3d4f386f2c07b2d699e988d672" + integrity sha512-ZT/etKp6v535GD4wr0lSbH1RQ8nj6jdn05ybxKPtl0mlNgBbatavcwb+isRRiHRYzjgBmUEf4lnkmyZqV4nmxA== + dependencies: + "@neo-one/client-common" "^2.3.0" + "@neo-one/client-switch" "^2.3.0" + "@neo-one/utils" "^2.3.0" + "@reactivex/ix-es2015-cjs" "^2.5.3" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + cross-fetch "^3.0.4" + dataloader "^1.4.0" + debug "^4.1.1" + lodash "^4.17.15" + rxjs "^6.5.2" + safe-stable-stringify "^1.1.0" + tapable "^1.1.3" + tslib "^1.10.0" + +"@neo-one/client-full-common@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-common/-/client-full-common-2.3.0.tgz#2c492b8262c4ca8423134a2e7016e3ce0fa371ea" + integrity sha512-u+ctLSR+PiSrIZQhA9WYAYdS+c3AMzv4dXJwkrAuikSMxwzYYSyindwEuVEam3R17r4/nlxkxfCzEfDzwU6xlw== + dependencies: + "@neo-one/client-common" "^2.3.0" + "@neo-one/utils" "^2.3.0" + tslib "^1.10.0" + +"@neo-one/client-full-core@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-core/-/client-full-core-2.3.0.tgz#0939231bfe7222380a431d90510e49f5ddfbbc37" + integrity sha512-BqkMHr/Pad/Z8HefcCbCHdbuOv0iUbPfCIl8PEye6vj5S8WLcfFwHuXP5BHtnoNjxxGAR+6MI8+e/RyVuSv9Sg== + 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" + bignumber.js "^9.0.0" + lodash "^4.17.15" + tslib "^1.10.0" + +"@neo-one/client-full@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full/-/client-full-2.3.0.tgz#01306c519b02106752041af3d598b2016c1a3ea0" + integrity sha512-wARYZFYLoVA546r3i8RpzCieAmlcLmqYSUBmam21/FuA0nTvQg72c1Ne07ilT1zohNk/vpoZMmpinaQHc6FPxA== + dependencies: + "@neo-one/client" "^2.3.0" + "@neo-one/client-full-core" "^2.3.0" + +"@neo-one/client-switch@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-switch/-/client-switch-2.3.0.tgz#947b1f44e43d0dfd54b3c9afa5812318a8e8b561" + integrity sha512-a0tP6aLXcAYLAMNDSeXGuSddbzQ/6OON2S4Psp8HaRDwJHc/iZdejBCOTPvVECmRdVPVJRntu/L10vfl83ZHLg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@ledgerhq/hw-transport-u2f" "^4.68.2" + "@neo-one/client-common" "^2.3.0" + "@neo-one/node-vm" "^2.3.0" + "@neo-one/utils" "^2.3.0" + "@opencensus/core" "^0.0.16" + "@opencensus/exporter-jaeger" "^0.0.17" + "@opencensus/exporter-prometheus" "^0.0.16" + "@opencensus/nodejs-base" "^0.0.16" + "@opencensus/propagation-tracecontext" "^0.0.16" + "@opencensus/web-core" "^0.0.6" + "@opencensus/web-propagation-tracecontext" "^0.0.7" + "@opencensus/web-types" "^0.0.6" + lodash "^4.17.15" + regenerator-runtime "^0.13.3" + source-map "^0.7.3" + tslib "^1.10.0" + +"@neo-one/client@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/client/-/client-2.3.0.tgz#a5cb0419553068b92a13f65e2ff499f3dd94f20f" + integrity sha512-7WPqNtAtABnFgBfvelI99ELVMWV4CByv2Hy2+VSPWYNCbbps+nqYTxsJ0vHULYT6dqIXSIV+biBzwaZ9PIq6BQ== + dependencies: + "@neo-one/client-common" "^2.3.0" + "@neo-one/client-core" "^2.3.0" + "@neo-one/developer-tools" "^2.3.0" + +"@neo-one/developer-tools@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/developer-tools/-/developer-tools-2.3.0.tgz#70e82718a3ac860d6b822181ba4611d9a38065dc" + integrity sha512-rrgIa6v9sA1ts2dPQgUxRpVr19uL1k3aolJ1sPNAm/D8cSqFCLW4Cb59WqSr/pTEpWCkkq1enup6zMj1OwnqxQ== + dependencies: + "@neo-one/client-core" "^2.3.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" @@ -2300,18 +1521,70 @@ dependencies: asn1.js "^1.0.4" -"@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/node-core@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-core/-/node-core-2.3.0.tgz#2bfb0351d530eb0262c2415a2b2f8694d71b8129" + integrity sha512-IjJJ3zPbtDFsw6VMlEH4Y/g3sV9UaHYbMOAh15N9WkXs8s/UIG+6RLrPGDM6WScrjNxtpdJnKNiwl/SjmSf4wA== + dependencies: + "@neo-one/client-common" "^2.3.0" + "@neo-one/client-full-common" "^2.3.0" + "@neo-one/utils" "^2.3.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" + +"@neo-one/node-neo-settings@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-neo-settings/-/node-neo-settings-2.3.0.tgz#9aa49370b040e66ed0f0980569bf931752dd15dc" + integrity sha512-LKAlmgFcRI8cTAnHelaagaBjU/9D/yyb6Of9pW1izrxLNr7u8nIy2nosOUIy2OhDUsODi00oV2vN71MTWkLoqw== + dependencies: + "@neo-one/client-common" "^2.3.0" + "@neo-one/node-core" "^2.3.0" + "@neo-one/utils" "^2.3.0" + bn.js "^5.0.0" + lodash "^4.17.15" + tslib "^1.10.0" + +"@neo-one/node-vm@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-vm/-/node-vm-2.3.0.tgz#8b601afb8014edd799d0062b7b8eb094a8a89866" + integrity sha512-OuDAlCiHKJ3Tw6Vb8D9brroUwseKUnTgVH7ZtWB8+9DR01x6alYbt8i9UUX2iLMz7FQKlMzOfpAB6nMKsl+J8w== + 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/utils@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@neo-one/utils/-/utils-2.3.0.tgz#8800645d28ba8245ac2f555ff740a6cfb72f5811" + integrity sha512-WX7XBgubhk47kODaWX57zuEiI3QS6laBuWCNbq9OaOLZM5ioKGY9uxOpW8gid70W+gYy0G4vIAdJEJ6lJK3smQ== + dependencies: + lodash "^4.17.15" + rxjs "^6.5.2" + tslib "^1.10.0" + +"@neotracker/core@1.3.1", "@neotracker/core@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.3.1.tgz#ae85cb951e9ce4328d9a80541231756fe8877a8f" + integrity sha512-eIO7LB60bUdYY9nGu/xRSMd3gjYcsIeCz8sZA+7APuhmazcZTmgqnAQJvtRV1jLn5rwp2wq2hBMbC+MwL0P3lQ== 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" + "@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" @@ -2360,8 +1633,8 @@ 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" @@ -2423,58 +1696,6 @@ "@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== - dependencies: - is-plain-object "^3.0.0" - universal-user-agent "^4.0.0" - -"@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== - -"@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== - dependencies: - deprecation "^2.0.0" - once "^1.4.0" - -"@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== - 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" - "@opencensus/core@^0.0.16": version "0.0.16" resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.16.tgz#52bd612432b6f1ac2eec3332cdcf0c8046fc27f1" @@ -2563,10 +1784,10 @@ resolved "https://registry.yarnpkg.com/@opencensus/web-types/-/web-types-0.0.7.tgz#4426de1fe5aa8f624db395d2152b902874f0570a" integrity sha512-xB+w7ZDAu3YBzqH44rCmG9/RlrOmFuDPt/bpf17eJr8eZSrLt7nc7LnWdxM9Mmoj/YKMHpxRg28txu3TcpiL+g== -"@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== +"@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: esquery "^1.0.1" @@ -2628,39 +1849,1108 @@ 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: - "@babel/runtime" "^7.4.0" - "@render-props/rect" "^0.1.16" - "@render-props/utils" "^0.2.1" + "@babel/runtime" "^7.4.0" + "@render-props/rect" "^0.1.16" + "@render-props/utils" "^0.2.1" + +"@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: + "@babel/runtime" "^7.4.0" + raf "^3.4.1" + +"@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: + "@essentials/are-equal" "^1.0.0" + "@essentials/interpolate" "^1.0.0" + "@essentials/request-interval" "^1.0.1" + "@essentials/request-timeout" "^1.0.0" + +"@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: + "@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" + +"@rush-temp/build-common@file:./projects/build-common.tgz": + version "0.0.0" + resolved "file:./projects/build-common.tgz" + dependencies: + concurrently "^4.1.2" + cross-env "^6.0.0" + cypress "3.4.1" + cypress-plugin-retries "^1.2.2" + husky "^3.1.0" + json "^9.0.6" + 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" + +"@rush-temp/build-tests@file:./projects/build-tests.tgz": + version "0.0.0" + resolved "file:./projects/build-tests.tgz" + dependencies: + "@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 "^8.0.0" + lodash "^4.17.15" + nyc "^14.1.1" + tmp "^0.1.0" + ts-jest "^24.1.0" + +"@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": + version "0.0.0" + resolved "file:./projects/build-tools-web.tgz" + 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" + "@types/autoprefixer" "^6.7.3" + "@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.11" + "@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" + cross-env "^6.0.0" + cssnano "^4.1.10" + execa "^3.2.0" + extract-css-chunks-webpack-plugin "4.6.0" + file-loader "^4.2.0" + find-cache-dir "^3.0.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + gulp-rename "^1.4.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 "^1.19.3" + optimize-css-assets-webpack-plugin "^5.0.3" + postcss-flexbugs-fixes "^4.1.0" + react "^16.11.0" + rxjs "^6.5.3" + stats-webpack-plugin "^0.7.0" + terser-webpack-plugin "^1.4.1" + thread-loader "^2.1.3" + ts-loader "^6.1.0" + ts-node "^8.4.1" + tslint "^5.20.0" + typescript "3.6.3" + url-loader "^2.1.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" + +"@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" + 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 "^1.4.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.24.2" + 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.6.3" + yargs "^14.2.0" + +"@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": + version "0.0.0" + resolved "file:./projects/cli-common-node.tgz" + dependencies: + "@types/cosmiconfig" "^5.0.3" + "@types/fs-extra" "^8.0.0" + "@types/lodash" "^4.14.138" + "@types/prompts" "^2.0.1" + "@types/schema-utils" "^1.0.0" + cosmiconfig "^5.2.1" + 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" + +"@rush-temp/cli-common@file:./projects/cli-common.tgz": + version "0.0.0" + resolved "file:./projects/cli-common.tgz" + dependencies: + bignumber.js "^9.0.0" + gulp "~4.0.2" + tslib "^1.10.0" + +"@rush-temp/cli@file:./projects/cli.tgz": + version "0.0.0" + resolved "file:./projects/cli.tgz" + dependencies: + "@angular/core" "^8.2.7" + "@babel/core" "^7.6.2" + "@babel/register" "^7.5.5" + "@neotracker/core" "1.3.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.11" + "@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" + listr "^0.14.3" + lodash "^4.17.15" + nodemon "^1.19.3" + prompts "^2.2.1" + react "^16.11.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.6.3" + 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.9" + "@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.0" + 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.4" + 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 "^1.4.0" + debug "^4.1.1" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + 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" + "@opencensus/core" "^0.0.16" + "@opencensus/exporter-jaeger" "^0.0.17" + "@opencensus/exporter-prometheus" "^0.0.16" + "@opencensus/nodejs-base" "^0.0.16" + "@opencensus/propagation-tracecontext" "^0.0.16" + "@opencensus/web-core" "^0.0.6" + "@opencensus/web-propagation-tracecontext" "^0.0.7" + "@opencensus/web-types" "^0.0.6" + "@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.11" + "@types/react-dom" "^16.9.0" + "@types/react-select" "^3.0.0" + bignumber.js "^9.0.0" + core-js "^3.2.1" + cross-env "^6.0.0" + 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-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.11" + "@types/react-dom" "^16.9.0" + "@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 "^4.2.0" + fs-extra "^8.1.0" + glob "^7.1.4" + html-entities "^1.2.1" + immer "^4.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 "^3.0.0" + react "^16.11.0" + react-dom "^16.11.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.6.3" + 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 "^4.2.0" + 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.6.3" + +"@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/bn.js" "^4.11.5" + "@types/jest" "^24.0.18" + "@types/js-priority-queue" "^0.0.5" + "@types/lodash" "^4.14.138" + bn.js "^5.0.0" + gulp "~4.0.2" + js-priority-queue "^0.1.5" + lodash "^4.17.15" + 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 "^4.2.0" + 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/bn.js" "^4.11.5" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/through" "^0.0.29" + 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-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" + 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" + 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: + 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: + 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/jest" "^24.0.18" + "@types/levelup" "^3.1.1" + "@types/memdown" "^3.0.0" + gulp "~4.0.2" + levelup "^4.1.0" + memdown "^5.0.0" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/node-vm@file:./projects/node-vm.tgz": + version "0.0.0" + resolved "file:./projects/node-vm.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" + bitwise "^2.0.3" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + 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/leveldown" "^4.0.0" + "@types/levelup" "^3.1.1" + abstract-leveldown "^6.0.3" + fs-extra "^8.1.0" + gulp "~4.0.2" + leveldown "^5.1.1" + levelup "^4.1.0" + 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.11" + "@types/react-dom" "^16.9.0" + "@types/react-select" "^3.0.0" + gulp "~4.0.2" + popper.js "^1.15.0" + react "^16.11.0" + react-dom "^16.11.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.11" + gulp "~4.0.2" + react "^16.11.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 "^1.18.2" + 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.6.3" + +"@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.6.3" + +"@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-lib.tgz" + dependencies: + "@types/jest" "^24.0.18" + bignumber.js "^9.0.0" + gulp "~4.0.2" + tslib "^1.10.0" + +"@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: + core-js "^3.2.1" + tslib "^1.10.0" + +"@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: + bignumber.js "^9.0.0" + gulp "~4.0.2" + tslib "^1.10.0" + +"@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-test.tgz" + dependencies: + "@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" + +"@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: + gulp "~4.0.2" + typescript "3.6.3" + +"@rush-temp/smart-contract@file:./projects/smart-contract.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract.tgz" + dependencies: + gulp "~4.0.2" + +"@rush-temp/suite@file:./projects/suite.tgz": + version "0.0.0" + resolved "file:./projects/suite.tgz" + dependencies: + gulp "~4.0.2" + +"@rush-temp/ts-utils@file:./projects/ts-utils.tgz": + version "0.0.0" + resolved "file:./projects/ts-utils.tgz" + dependencies: + "@types/lodash" "^4.14.138" + gulp "~4.0.2" + lodash "^4.17.15" + source-map "^0.7.3" + tslib "^1.10.0" + typescript "3.6.3" -"@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.6.3" + 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 "^6.1.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.6.3" -"@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.11" + "@types/react-dom" "^16.9.0" + "@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" + concurrently "^4.1.2" + core-js "^3.2.1" + cross-env "^6.0.0" + 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" + 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.11.0" + react-dom "^16.11.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.2" + react-static-plugin-source-filesystem "7.1.0" + 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.6.3" + 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" @@ -2696,13 +2986,12 @@ resolved "https://registry.yarnpkg.com/@types/app-root-dir/-/app-root-dir-0.1.0.tgz#ad0c090ea036b10f5cb4823d8e151495f23b271f" 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== +"@types/autoprefixer@^6.7.3": + version "6.7.3" + resolved "https://registry.yarnpkg.com/@types/autoprefixer/-/autoprefixer-6.7.3.tgz#1bd7c1e2bb0fcfde46011545ddc5f177d7efdd98" + integrity sha512-1iqqxR9rcUsTrngdea+dpGP3/iuokNnsGYmgXsclJ6iPJ79gqCcYuJAR1AyQRKUVpikxBZBjJKFzStJAlSWMvw== dependencies: - "@types/browserslist" "*" - postcss "7.x.x" + postcss "^5.2.15" "@types/babel__code-frame@^7.0.1": version "7.0.1" @@ -2710,9 +2999,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.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2721,9 +3010,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.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" + integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== dependencies: "@babel/types" "^7.0.0" @@ -2736,19 +3025,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.8" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" + integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== 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" @@ -2778,17 +3060,12 @@ "@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== - "@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,7 +3086,7 @@ 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== @@ -2882,25 +3159,23 @@ 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.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz#e80c25903df5800e926402b7e8267a675c54a281" + integrity sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g== 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.2" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c" + integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" @@ -2913,7 +3188,15 @@ dependencies: "@types/node" "*" -"@types/glob@^7.1.1": +"@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@*", "@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,6 +3210,67 @@ 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" @@ -2960,9 +3304,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.2" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.2.tgz#3b7fb5365a00d47129967b0b2da51c2123692314" + integrity sha512-Qfb7batJJBlI8wcrd48vHpgsOOYzQQa+OZcaIz33jkJPe8A7KktAJFmRAiR42s5BfnErdlFnOyQucq2BKy/98g== dependencies: "@types/node" "*" @@ -2993,11 +3337,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" @@ -3005,19 +3344,12 @@ dependencies: "@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== - dependencies: - "@types/jest-diff" "*" - -"@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== +"@types/jest@*", "@types/jest@^24.0.18": + version "24.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4" + integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg== dependencies: - "@types/jest-diff" "*" + jest-diff "^24.3.0" "@types/js-priority-queue@^0.0.5": version "0.0.5" @@ -3050,9 +3382,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 +3397,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" "*" @@ -3101,9 +3433,9 @@ "@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.0.52" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.52.tgz#7dd11de4189ab339ad66c4ccad153716b14e525f" + integrity sha512-cp/GTOhOYwomlSKqEoG0kaVEVJEzP4ojYmfa7EKaGkmkkRwJ4B/1VBLbQZ49Z+WJNvzXejQB/9GIKqMo9XLgFQ== dependencies: "@types/accepts" "*" "@types/cookies" "*" @@ -3129,14 +3461,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 +3476,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 +3505,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.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== "@types/lru-cache@^5.1.0": version "5.1.0" @@ -3240,36 +3565,28 @@ "@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.3" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.3.tgz#b84127facd93642b1fb6439bc630ba0612e3ec50" + integrity sha512-X3TNlzZ7SuSwZsMkb5fV7GrPbVKvHc2iwHmslb8bIxRKWg2iqkfm3F/Wd79RhDpOXR7wCtKAwc5Y2JE6n/ibyw== dependencies: "@types/node" "*" "@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 "0.7.3" + resolved "https://registry.yarnpkg.com/@types/node-hid/-/node-hid-0.7.3.tgz#993762b795473dc2ad8ee041f870838735087532" + integrity sha512-ip+Un3Ps0Qok3W3fMgYxaYxVYcbjDYM7yXNm8Uf1sggvSeXL/Q+vZG0AdSDWDQO9apQSE7Yieb4SjfymF1OqPA== + 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", "@types/node@^12.12.3", "@types/node@^12.6.9", "@types/node@^12.7.7": + version "12.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.11.tgz#bec2961975888d964196bf0016a2f984d793d3ce" + integrity sha512-O+x6uIpa6oMNTkPuHDa9MhMMehlxLAd5QcOvKRjAFsBVpeFWTOPnXbDvILvFgFFZfQ1xh1EZi1FbXxUix+zpsQ== "@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== - -"@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== + version "11.15.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.2.tgz#998b9cacc5f26e441d8396340818fde8e08aada5" + integrity sha512-BqCU9uIFkUH9Sgo2uLYbmIiFB1T+VBiM8AI/El3LIAI5KzwtckeSG+3WOYZr9aMoX4UIvRFBWBeSaOu6hFue2Q== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3281,15 +3598,20 @@ resolved "https://registry.yarnpkg.com/@types/npm-package-arg/-/npm-package-arg-6.1.0.tgz#88bdfce72f6a3d5fa1053c8d44d655e7850642e4" integrity sha512-vbt5fb0y1svMhu++1lwtKmZL76d0uPChFlw7kEzyUmTwfmpHRcFb8i0R8ElT69q/L+QLgK2hgECivIAvaEDwag== +"@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-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/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.8.13" + resolved "https://registry.yarnpkg.com/@types/pino/-/pino-5.8.13.tgz#01ea5c4faa4314cc4dd58b072bfc4f2a936bcf28" + integrity sha512-JPBkBtxCmwuWGR2rTiMZfocQ7EtNebkcUeIEoHJLB0NdHnKo1f9Jl8beFz9Br84q76NIv/c3nRLoakGui1ISkg== dependencies: "@types/node" "*" "@types/pino-std-serializers" "*" @@ -3372,9 +3694,9 @@ "@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" "*" @@ -3443,9 +3765,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.18.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.4.tgz#40bebad38700a2f785940f01bdc067276fd2f7b8" + integrity sha512-03H3ZfaayhhSwcE8YfYd2OWlUK2IaJYQO/7Q5DjhaU2PQw8OSoH/dl6dxdhTyA32aBg4+k+1EOCqb8czIeVY6Q== "@types/prismjs@^1.16.0": version "1.16.0" @@ -3453,9 +3775,9 @@ 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.3" + resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.3.tgz#9928714a7a5c2017919f8fecef517369d27dd5df" + integrity sha512-5+r923liPATAzRQhLTGfrRuel9vv7Mk1DZ/CJkgRrLctmM9QeOIbuVolA7wAACaw+m0Ysug85CjPbkb5ZgE1Ag== "@types/prop-types@*": version "15.7.3" @@ -3486,9 +3808,9 @@ "@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== + version "16.9.4" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df" + integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw== dependencies: "@types/react" "*" @@ -3503,9 +3825,9 @@ 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.8" + resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.8.tgz#b824a12d438dd493c30ffff49a805f797602a837" + integrity sha512-0763TXYZc8bTiHM+DUnWoy9Rg5mk6PxYWBrEe6Fkjgc0Kv0r1RqjZk9/BrK4wdM0RNjYjixlFPnUhOJb76sMGg== dependencies: "@types/react" "*" "@types/react-dom" "*" @@ -3525,10 +3847,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.11": + version "16.9.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120" + integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -3559,10 +3881,10 @@ 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.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a" + integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA== "@types/serve-static@*": version "1.13.3" @@ -3621,18 +3943,29 @@ 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 +3976,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,7 +4000,7 @@ dependencies: "@types/webpack" "*" -"@types/webpack-dev-server@^3.4.0": +"@types/webpack-dev-server@^3.1.7": 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== @@ -3671,9 +4021,9 @@ 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.0" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.0.tgz#b813a044d8b0dec7dfcd7622fdbe327bde06eb9a" + integrity sha512-tWkdf9nO0zFgAY/EumUKwrDUhraHKDqCPhwfFR/R8l0qnPdgb9le0Gzhvb7uzVpouuDGBgiE//ZdY+5jcZy2TA== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -3694,14 +4044,7 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== -"@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== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^13.0.2": +"@types/yargs@^13.0.0", "@types/yargs@^13.0.3": 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== @@ -3889,47 +4232,22 @@ 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== - dependencies: - level-concat-iterator "~2.0.0" - xtend "~4.0.0" - -abstract-leveldown@^6.0.3, abstract-leveldown@~6.2.1: +abstract-leveldown@^6.0.3, abstract-leveldown@^6.2.1, 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== @@ -3938,7 +4256,7 @@ abstract-leveldown@^6.0.3, abstract-leveldown@~6.2.1: 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== @@ -3955,18 +4273,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" @@ -4006,27 +4319,13 @@ after@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: +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" - -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== - dependencies: - humanize-ms "^1.2.1" - aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -4065,22 +4364,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: 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" @@ -4103,11 +4386,6 @@ ansi-color@^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-colors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" @@ -4138,11 +4416,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.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== dependencies: - type-fest "^0.5.2" + type-fest "^0.8.1" ansi-gray@^0.1.1: version "0.1.1" @@ -4178,6 +4456,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" @@ -4191,10 +4474,11 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: 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== + version "4.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" + integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== dependencies: + "@types/color-name" "^1.1.1" color-convert "^2.0.1" ansi-wrap@0.1.0, ansi-wrap@^0.1.0: @@ -4305,11 +4589,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" @@ -4426,11 +4705,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,11 +4720,6 @@ 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-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -4461,11 +4730,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 +4764,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 +4796,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: 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= @@ -4645,11 +4904,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,27 +4914,22 @@ 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: 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== +autoprefixer@^9.6.1: + version "9.7.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.2.tgz#26cf729fbb709323b40171a874304884dcceffed" + integrity sha512-LCAfcdej1182uVvPOZnytbq61AhnOZ/4JelDaJGDeNwewyU1AMaNthcHsyz1NRjTmd2FkurMckLWfkHg3Z//KA== dependencies: - browserslist "^4.7.0" - caniuse-lite "^1.0.30000999" + browserslist "^4.7.3" + caniuse-lite "^1.0.30001010" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.18" + postcss "^7.0.23" postcss-value-parser "^4.0.2" aws-sign2@~0.7.0: @@ -4710,7 +4959,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== @@ -4842,15 +5091,15 @@ babel-plugin-dynamic-import-node@^2.3.0: 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.22, babel-plugin-emotion@^10.0.23: + version "10.0.23" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.23.tgz#040d40bf61dcab6d31dd6043d10e180240b8515b" + integrity sha512-1JiCyXU0t5S2xCbItejCduLGGcKmF3POT0Ujbexog2MI4IlRcIn/kWjkYwCUZlxpON0O5FC635yPl/3slr7cKQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/hash" "0.7.3" "@emotion/memoize" "0.7.3" - "@emotion/serialize" "^0.11.11" + "@emotion/serialize" "^0.11.14" babel-plugin-macros "^2.0.0" babel-plugin-syntax-jsx "^6.18.0" convert-source-map "^1.5.0" @@ -4887,13 +5136,24 @@ 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.7.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.7.0.tgz#f409a674cbbe548b60cbdf495ec059a2de429ab7" + integrity sha512-eV/9IWjmwT/TDCrNzA9sgO/j+x1dWAdLds7KLTY/emkLimzYbiXugfa0EO9IMkLeBBYvS0OdY+6pkF5VGf0iog== 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" @@ -5092,14 +5352,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" @@ -5274,10 +5526,10 @@ balanced-match@^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.7" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" + integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== dependencies: safe-buffer "^5.0.1" @@ -5326,11 +5578,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" @@ -5374,9 +5621,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" @@ -5396,9 +5643,9 @@ bitbuffer@0.1.x: 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" @@ -5438,7 +5685,7 @@ 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, bluebird@^3.5.1, bluebird@^3.5.5: version "3.7.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== @@ -5571,11 +5818,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 +5884,14 @@ 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== - 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== +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.7.2, browserslist@^4.7.3: + version "4.7.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3" + integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ== dependencies: - caniuse-lite "^1.0.30000999" - electron-to-chromium "^1.3.284" - node-releases "^1.1.36" + caniuse-lite "^1.0.30001010" + electron-to-chromium "^1.3.306" + node-releases "^1.1.40" bs-logger@0.x: version "0.2.6" @@ -5684,17 +5917,12 @@ bs58check@<3.0.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== + 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" @@ -5766,9 +5994,9 @@ 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" @@ -5807,16 +6035,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" @@ -5847,7 +6065,7 @@ cacache@^11.2.0: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: +cacache@^12.0.2: version "12.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== @@ -5868,30 +6086,6 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -5947,11 +6141,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" @@ -6001,32 +6190,15 @@ camel-case@3.0.x, camel-case@^3.0.0: resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= dependencies: - 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" + no-case "^2.2.0" + upper-case "^1.1.1" 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: +camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= @@ -6061,15 +6233,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.30001010: + version "1.0.30001011" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz#0d6c4549c78c4a800bb043a83ca0cbe0aee6c6e1" + integrity sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg== canonical-path@^1.0.0: version "1.0.0" @@ -6143,7 +6310,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== @@ -6226,26 +6393,11 @@ character-entities-legacy@^1.0.0: 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== - 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 +6408,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.2, chokidar@^2.0.3, chokidar@^2.1.2, chokidar@^2.1.5, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -6276,9 +6428,9 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.8: 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== + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -6290,7 +6442,7 @@ chokidar@^3.0.2: optionalDependencies: fsevents "~2.1.1" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3: +chownr@^1.1.1, chownr@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== @@ -6438,13 +6590,6 @@ clone-buffer@1.0.0, clone-buffer@^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: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -6462,7 +6607,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,7 +6655,7 @@ 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: +codecov@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.1.tgz#f39fc49413445555f81f8e3ca5730992843b4517" integrity sha512-IUJB6WG47nWK7o50etF8jBadxdMw7DmoQg05yIljstXFBGB6clOZsIj6iD4P82T2YaIU3qq+FFu8K9pxgkCJDQ== @@ -6521,11 +6666,6 @@ codecov@^3.5.0: 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== - collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" @@ -6593,14 +6733,6 @@ colors@1.0.x: 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: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -6640,27 +6772,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 +6782,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" @@ -6759,23 +6862,13 @@ concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - 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" @@ -6810,16 +6903,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.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.11.0.tgz#9bb35d850d8cecde894ce2eb4d792fa6b90d9013" + integrity sha512-2bcAqHastlPSCvZ+ur8bgHInGAWvUnysWz3h3xRX+/XZoCY7avolJJnVXOPGoVoyCcg1b231XixonoArmgxaoA== 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" @@ -6869,98 +6960,10 @@ continuation-local-storage@^3.2.1: 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" @@ -7018,11 +7021,11 @@ copy-to@^2.0.1: 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== + version "3.4.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.1.tgz#e12c5a3ef9fcb50fd9d9a32805bfe674f9139246" + integrity sha512-YdeJI26gLc0CQJ9asLE5obEgBz2I0+CIgnoTbS2T0d5IPQw/OCgCIFR527RmpduxjrB3gSEHoGOCTq9sigOyfw== dependencies: - browserslist "^4.7.1" + browserslist "^4.7.2" semver "^6.3.0" core-js@^1.0.0: @@ -7035,10 +7038,10 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== -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.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.1.tgz#76dd6828412900ab27c8ce0b22e6114d7ce21b18" + integrity sha512-KX/dnuY/J8FtEwbnrzmAjUYgLqtk+cxM86hfG60LGiW3MmltIc2yAmDgBgEkfm0blZhUrdr1Zd84J2Y14mLxzg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -7053,7 +7056,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 +7066,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" @@ -7172,7 +7186,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== @@ -7192,11 +7206,6 @@ cross-spawn@^7.0.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" @@ -7259,24 +7268,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 +7284,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,21 +7302,13 @@ 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" @@ -7339,11 +7322,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" @@ -7437,12 +7425,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.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== dependencies: - css-tree "1.0.0-alpha.29" + css-tree "1.0.0-alpha.37" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" @@ -7461,13 +7449,6 @@ csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== -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" - cycle@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" @@ -7479,11 +7460,11 @@ 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.4.0" + resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.4.0.tgz#30477294a22e368c874d50dc282e657906080955" + integrity sha512-Pudna9+dn0wp3flUVWt1ttn6hKTnD1MIBUSznYkw+uRv3JPNJhxHIv9cfxrZmig49/R1fIyGBVNORchtnFedEw== -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 +7500,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 +7508,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,27 +7534,22 @@ dataloader@^1.4.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== -date-fns@^1.27.2: +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.8.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.8.0.tgz#628d865367e30e45747ed1e8b0c1572090b04f55" + integrity sha512-nbZMIMsoD7QiIKipZ5+XRTCtHZad1ch8OEkLaJxjGL6ThAK2IWAdjmAUAS7Fdz5fCaVWtqc+c8pAsN/MX8eaew== 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== @@ -7649,27 +7589,14 @@ 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.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= - dependencies: - decamelize "^1.1.0" - map-obj "^1.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= @@ -7753,15 +7680,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,13 +7744,6 @@ 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" - deferred-leveldown@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.0.1.tgz#1642eb18b535dfb2b6ac4d39fb10a9cbcfd13b09" @@ -7832,14 +7752,6 @@ deferred-leveldown@~5.0.0: abstract-leveldown "~6.0.0" inherits "^2.0.3" -deferred-leveldown@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" - integrity sha512-PvDY+BT2ONu2XVRgxHb77hYelLtMYxKSGuWuJJdVRXh9ntqx9GYTFJno/SKAz5xcd+yjQwyQeIZrUPjPvA52mg== - dependencies: - abstract-leveldown "~6.0.0" - inherits "^2.0.3" - deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -7944,15 +7856,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 +7874,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,14 +7898,6 @@ 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" @@ -8057,17 +7946,12 @@ 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@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -8093,13 +7977,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" @@ -8154,17 +8031,17 @@ 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.3" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" + integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== dependencies: "@babel/runtime" "^7.6.3" 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" @@ -8231,14 +8108,7 @@ 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: +dot-prop@^4.1.0, dot-prop@^4.1.1: 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== @@ -8311,6 +8181,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" @@ -8338,14 +8218,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.306: + version "1.3.307" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.307.tgz#e9b98901371d20164af7c0ca5bc820bd4305ccd3" + integrity sha512-01rTsAqHwf3D2X6NtlUvzB2hxDj67kiTVIO5GWdFb2unA0QvFvrjyrtc993ByRLF+surlr+9AvJdD0UYs5HzwA== elegant-spinner@^1.0.1: version "1.0.1" @@ -8403,12 +8283,12 @@ emotion-theming@^10.0.14: "@emotion/weak-memoize" "0.2.4" 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.23" + resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.23.tgz#b1722ca65f4d9955f0917cfcb7635bc34b52805c" + integrity sha512-H/x+5rJUnSvI0rdYsAFyDfuQwE0poZgTMj5TQsKirLzyHVWqs6CiUponsdE86sisXw0vS60j91HAbidJJeDt1g== dependencies: - babel-plugin-emotion "^10.0.17" + babel-plugin-emotion "^10.0.23" create-emotion "^10.0.14" encodeurl@^1.0.2, encodeurl@~1.0.2: @@ -8416,12 +8296,12 @@ encodeurl@^1.0.2, encodeurl@~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" @@ -8506,21 +8386,11 @@ entities@^2.0.0, entities@~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= - 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,7 +8410,7 @@ 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: +error@7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= @@ -8548,6 +8418,13 @@ error@7.0.2, error@^7.0.0: string-template "~0.2.1" xtend "~4.0.0" +error@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== + dependencies: + string-template "~0.2.1" + 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" @@ -8565,22 +8442,22 @@ es-abstract@^1.12.0, es-abstract@^1.5.1: string.prototype.trimright "^2.1.0" 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== + 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.52" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.52.tgz#bb21777e919a04263736ded120a9d665f10ea63f" + integrity sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag== dependencies: es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" + es6-symbol "~3.1.2" + next-tick "~1.0.0" es6-denodeify@^0.1.1: version "0.1.5" @@ -8613,13 +8490,13 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -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.2: + 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" @@ -8636,7 +8513,7 @@ escape-html@^1.0.3, escape-html@~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= @@ -8661,83 +8538,11 @@ 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" - 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" @@ -8790,11 +8595,6 @@ 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== - eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -8821,25 +8621,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 +8692,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.3.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.3.0.tgz#7e348eef129a1937f21ecbbd53390942653522c1" + integrity sha512-j5Vit5WZR/cbHlqU97+qcnw9WHRCIL4V1SVe75VcHcD1JRBdt8fv0zw89b7CQHQdUHTt2VjuhcF5ibAgVOxqpg== 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" @@ -9039,6 +8832,13 @@ ext-name@^5.0.0: ext-list "^2.0.0" sort-keys-length "^1.0.0" +ext@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.2.0.tgz#8dd8d2dd21bcced3045be09621fa0cbf73908ba4" + integrity sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA== + 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,7 +8896,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-css-chunks-webpack-plugin@^4.6.0: +extract-css-chunks-webpack-plugin@4.6.0, 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== @@ -9152,7 +8952,7 @@ fast-future@~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== @@ -9180,7 +8980,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^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= -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= @@ -9275,7 +9075,7 @@ 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: +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== @@ -9296,19 +9096,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.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== 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" @@ -9425,6 +9218,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" @@ -9435,34 +9236,19 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.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== + version "3.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.1.0.tgz#9935894999debef4cf9f677fdf646d002c4cdecb" + integrity sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q== dependencies: commondir "^1.0.1" make-dir "^3.0.0" 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,13 +9257,20 @@ 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@^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: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -9522,32 +9315,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" @@ -9607,6 +9379,11 @@ 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@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -9743,16 +9520,16 @@ fsevents@^1.2.7: 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== + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== 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,11 +9548,6 @@ 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== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -9791,22 +9563,6 @@ get-own-enumerable-property-symbols@^3.0.0: 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== - get-proxy@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" @@ -9814,11 +9570,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" @@ -9837,7 +9588,7 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -9883,55 +9634,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,7 +9662,7 @@ 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: +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== @@ -10000,34 +9702,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,7 +9714,7 @@ 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= @@ -10052,13 +9730,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" @@ -10070,15 +9741,6 @@ global-prefix@^1.0.1: 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" - global@^4.3.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -10087,7 +9749,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== @@ -10122,25 +9784,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 +9791,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" @@ -10203,9 +9839,9 @@ got@^8.3.1: url-to-options "^1.0.1" 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.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -10261,11 +9897,6 @@ 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" @@ -10276,16 +9907,6 @@ gud@^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 +9949,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 +9978,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" @@ -10426,7 +10062,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== @@ -10468,10 +10104,10 @@ handle-thing@^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== +handlebars@^4.1.2: + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -10511,6 +10147,11 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -10534,9 +10175,9 @@ has-symbol-support-x@^1.4.1: 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= + 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 +10186,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= @@ -10612,9 +10253,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.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.2.tgz#afeadc6aab41e6acfe038645bbefd4005c56a475" + integrity sha512-YXFjoRS7ES7PEoLx6uihtSfKTO1s3z/tzGiV5cVpsUiihduogFXubNRCzTIW3yOOGO1nws9CxPq4MbwD39Uo+w== dependencies: ccount "^1.0.3" hastscript "^5.0.0" @@ -10627,10 +10268,10 @@ hast-util-is-element@^1.0.0: resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.3.tgz#423b4b26fe8bf1f25950fe052e9ce8f83fd5f6a4" integrity sha512-C62CVn7jbjp89yOhhy7vrkSaB7Vk906Gtcw/Ihd+Iufnq+2pwOZjdPmpzpKLWJXPJBMDX3wXg4FqmdOayPcewA== -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.3" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz#57edd449103900c7f63fd9e6f694ffd7e4634719" + integrity sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q== hast-util-to-html@^6.0.0: version "6.0.2" @@ -10654,16 +10295,16 @@ hast-util-whitespace@^1.0.0: integrity sha512-AlkYiLTTwPOyxZ8axq2/bCwRUPjIPBfrHkXuCR92B38b3lSdU22R5F/Z4DL6a2kxWpekWq1w6Nj48tWat6GeRA== 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.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.1.tgz#71726ee1e97220575d1f29a8e937387d99d48275" + integrity sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg== 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== @@ -10769,9 +10410,9 @@ hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.1, hoist-non-react- 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.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" + integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== dependencies: react-is "^16.7.0" @@ -10854,11 +10495,6 @@ 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" @@ -10893,7 +10529,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,7 +10549,7 @@ 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== @@ -10960,14 +10596,6 @@ 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== - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -11002,9 +10630,9 @@ https-browserify@^1.0.0: 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== + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: agent-base "^4.3.0" debug "^3.1.0" @@ -11014,17 +10642,10 @@ human-signals@^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 +10676,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== @@ -11089,12 +10710,7 @@ ignore-walk@^3.0.1: 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== @@ -11139,10 +10755,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 +10775,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" @@ -11219,7 +10830,7 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -infer-owner@^1.0.3, infer-owner@^1.0.4: +infer-owner@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -11252,25 +10863,11 @@ 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.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" @@ -11281,26 +10878,7 @@ inquirer-autocomplete-prompt@^1.0.1: 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,7 +10905,7 @@ 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== @@ -11433,11 +11011,6 @@ is-alphabetical@^1.0.0: 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= - is-alphanumerical@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" @@ -11475,17 +11048,12 @@ 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: +is-buffer@^2.0.0, is-buffer@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== @@ -11690,13 +11258,6 @@ 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= - dependencies: - is-glob "^2.0.0" - is-lower-case@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" @@ -11803,13 +11364,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" @@ -11842,11 +11396,6 @@ is-regexp@^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" @@ -11869,13 +11418,6 @@ 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: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -11900,13 +11442,6 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -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== - dependencies: - text-extensions "^2.0.0" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -11936,33 +11471,16 @@ 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== - -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" @@ -12000,11 +11518,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" @@ -12120,7 +11633,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 +11707,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== @@ -12291,15 +11804,14 @@ 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@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-8.0.0.tgz#d4f7ff67e292a5426dc60bc38694c9f77cb94178" + integrity sha512-cuD2XM2youMjrOxOu/7H2pLfsO8LfAG4D3WsBxd9fFyI9U0uPpmr/CORH64kbIyZ47X5x1Rbzb9ovUkAEvhEEA== dependencies: - jest-validate "^24.9.0" + jest-validate "^24.0.0" mkdirp "^0.5.1" - strip-ansi "^5.2.0" - uuid "^3.3.3" + strip-ansi "^4.0.0" xml "^1.0.1" jest-leak-detector@^24.9.0: @@ -12499,7 +12011,7 @@ jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.9.0: +jest-validate@^24.0.0, jest-validate@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== @@ -12545,6 +12057,16 @@ jmespath@^0.15.0: resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= +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-base64@^2.1.9: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -12570,7 +12092,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1, js-yaml@^3.11.0, js-yaml@^3.13.1: +js-yaml@^3.11.0, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -12635,16 +12157,7 @@ json-buffer@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 +12184,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= @@ -12688,7 +12201,7 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" -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 +12218,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 +12230,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" @@ -12834,11 +12337,6 @@ 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= - keygrip@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" @@ -12914,15 +12412,10 @@ knex@^0.15.2: 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== - 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.1.15" + resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.1.15.tgz#c4c54497e4d3712c93c929a86c1df95ca4cc2ca6" + integrity sha512-PrQeSueLlWqnfr4wFIX8ljZbDJTDeR6xqyhekzIxXZc5Qc99DSkZ4HpAjo8idGyGNLK1kuywFQQYJY0OS0RwZg== dependencies: extend-shallow "^3.0.2" formidable "^1.2.1" @@ -12964,11 +12457,6 @@ koa-compress@^3.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" @@ -13019,54 +12507,24 @@ koa-send@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.0.tgz#5e8441e07ef55737734d7ced25b842e50646e7eb" integrity sha512-90ZotV7t0p3uN9sRwW2D484rAaKIsD8tAVtypw/aBU+ryfV+fR2xrcAwhI8Wl6WRkojLUs/cB9SBSCuIb+IanQ== - dependencies: - debug "^3.1.0" - http-errors "^1.6.3" - mz "^2.7.0" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.11.0.tgz#fe5a51c46f566d27632dd5dc8fd5d7dd44f935a4" - integrity sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA== - 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" + dependencies: + debug "^3.1.0" http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.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" + mz "^2.7.0" + resolve-path "^1.4.0" -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== +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" + integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== + dependencies: + debug "^3.1.0" + koa-send "^5.0.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== dependencies: accepts "^1.3.5" cache-content-type "^1.0.0" @@ -13086,7 +12544,6 @@ koa@^2.7.0: 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" @@ -13155,29 +12612,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" @@ -13226,12 +12660,12 @@ level-js@^5.0.0: ltgt "^2.1.2" 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.0" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.0.tgz#9c01c6c8e2380d3196d61e56bd79c2eff4a9d5c3" + integrity sha512-3pbJmDgGvp/lUQNULPoYQZtUbhMI8KoViYDw7Sa0kWl1mPeHWWJF7T/9upWI/NTMuEikkEE/cd6wBvmrW1+ZnQ== 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 +12701,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.4.1" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.4.1.tgz#83a8fdd9bb52b1ed69be2ef59822b6cdfcdb51ec" + integrity sha512-3lMPc7eU3yj5g+qF1qlALInzIYnkySIosR1AsUKFjL9D8fYbTLuENBAeDRZXIG4qeWOAyqRItOoLu2v2avWiMA== dependencies: abstract-leveldown "~6.2.1" napi-macros "~2.0.0" @@ -13295,17 +12720,7 @@ levelup@4.0.2: level-iterator-stream "~4.0.0" xtend "~4.0.0" -levelup@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.1.0.tgz#49ab5d3a341731cd102f91c6bc17a1acb1969a17" - integrity sha512-+Qhe2/jb5affN7BeFgWUUWVdYoGXO2nFS3QLEZKZynnQyP9xqA+7wgOz3fD8SST2UKpHQuZgjyJjTcB2nMl2dQ== - dependencies: - deferred-leveldown "~5.1.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - xtend "~4.0.0" - -levelup@^4.1.0: +levelup@^4.1.0, levelup@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.3.2.tgz#31c5b1b29f146d1d35d692e01a6da4d28fa55ebd" integrity sha512-cRTjU4ktWo59wf13PHEiOayHC3n0dOh4i5+FHr4tv4MX9+l7mqETicNq3Aj07HKlLdk0z5muVoDL2RD+ovgiyA== @@ -13326,7 +12741,7 @@ 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: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -13381,10 +12796,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.4.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.3.tgz#f55ad5f94f6e105294bfd6499b23142961f7b982" + integrity sha512-PejnI+rwOAmKAIO+5UuAZU9gxdej/ovSEOAY34yMfC3OS4Ac82vCBPzAWLReR9zCPOMqeVwQRaZ3bUBpAsaL2Q== dependencies: chalk "^2.4.2" commander "^2.20.0" @@ -13522,17 +12937,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" @@ -13649,11 +13053,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" @@ -13666,11 +13065,6 @@ lodash.flattendeep@^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 +13075,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,11 +13084,6 @@ 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.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" @@ -13715,11 +13099,6 @@ lodash.restparam@^3.0.0: 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 +13119,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,12 +13147,7 @@ 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== @@ -13783,7 +13157,7 @@ log-driver@^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== @@ -13822,25 +13196,15 @@ log-update@^2.3.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== + version "1.6.6" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" + integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== 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= - 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" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -13848,14 +13212,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" @@ -13905,11 +13261,6 @@ 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== - make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -13937,23 +13288,6 @@ make-error@1.x, make-error@^1.1.1: 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" - make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -13985,16 +13319,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,11 +13326,6 @@ 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" @@ -14039,11 +13358,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 +13385,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,32 +13394,11 @@ 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== - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -14189,52 +13477,6 @@ 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" @@ -14264,11 +13506,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,12 +13565,7 @@ 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: +mime-db@1.42.0, "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== @@ -14351,11 +13583,11 @@ mime-types@2.1.18: 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== + version "2.1.25" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== dependencies: - mime-db "1.40.0" + mime-db "1.42.0" mime@1.6.0: version "1.6.0" @@ -14411,32 +13643,19 @@ 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, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -14446,28 +13665,7 @@ minimist@~0.0.1, minimist@~0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" - integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== - 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== @@ -14476,9 +13674,9 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 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== + 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,7 +13719,7 @@ 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: +mkdirp-promise@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= @@ -14535,71 +13733,18 @@ mkdirp@*, mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: 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= - dependencies: - debug "^3.1.0" - lodash "^4.16.4" - -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" - 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.8.0" + resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.8.0.tgz#f5b538c7aa771c4faf2f8a892867fda6e86ce354" + integrity sha512-kmHhfmrEsTks35l8WwN1KFM+tBSWz0oC8Y3Z/LxryO7JQarv0miVCxzGqrq4v/BWQNt4Hh4ydXU4f8iXjHZFEg== dependencies: doctrine "^3.0.0" file "^0.2.2" - lodash "^4.17.11" - markdown-it "^8.4.2" + lodash "^4.17.15" + markdown-it "^10.0.0" mkdirp "^0.5.1" 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== + yargs "^14.2.0" module-details-from-path@^1.0.3: version "1.0.3" @@ -14655,7 +13800,7 @@ ms@^0.7.2: 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: 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 +13818,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 +13859,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== @@ -14749,9 +13879,9 @@ nan@^2.12.1, nan@^2.13.2: integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 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.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.7.tgz#d775e3e7c6470bbaaae3da9a647a80e228e0abf7" + integrity sha512-fmS3qwDldm4bE01HCIRqNk+f255CNjnAoeV3Zzzv0KemObHKqYgirVaZA9DtKcjogicWjYcHkJs4D5A8CjnuVQ== nanomatch@^1.2.9: version "1.2.13" @@ -14814,7 +13944,7 @@ 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, 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= @@ -14843,29 +13973,12 @@ node-abi@^2.7.0: 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-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: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -14893,23 +14006,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" @@ -15001,14 +14097,14 @@ node-pre-gyp@^0.12.0: 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== +node-releases@^1.1.40: + version "1.1.40" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.40.tgz#a94facfa8e2d612302601ca1361741d529c4515a" + integrity sha512-r4LPcC5b/bS8BdtWH1fbeK88ib/wg9aqmg6/s3ngNLn2Ewkn/8J6Iw3P9RTlfIAdSdvYvQl2thCY5Y+qTAQ2iQ== dependencies: semver "^6.3.0" -nodemon@^1.19.1: +nodemon@^1.19.3: version "1.19.4" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== @@ -15029,13 +14125,6 @@ noop-logger@^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" @@ -15051,7 +14140,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 +14172,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,7 +14191,7 @@ 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== @@ -15132,21 +14216,7 @@ 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-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.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== @@ -15156,7 +14226,7 @@ npm-lifecycle@^3.1.2: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6, npm-packlist@^1.4.4: +npm-packlist@^1.1.6: 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== @@ -15164,15 +14234,6 @@ npm-packlist@^1.1.6, npm-packlist@^1.4.4: 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-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -15194,7 +14255,7 @@ npm-run-path@^4.0.0: 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== @@ -15233,9 +14294,9 @@ nunjucks@^3.1.6: chokidar "^2.0.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" @@ -15298,9 +14359,9 @@ object-copy@^0.1.0: 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== + 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" @@ -15324,7 +14385,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== @@ -15412,11 +14473,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 +14512,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" @@ -15512,17 +14569,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 +14640,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,15 +14653,6 @@ 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" @@ -15692,19 +14732,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 +14749,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 +14778,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" @@ -15834,18 +14848,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 +14857,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 +14902,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" @@ -16046,14 +15025,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 +15080,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" @@ -16138,7 +15105,7 @@ pg-int8@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: +pg-pool@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.7.tgz#f14ecab83507941062c313df23f6adcd9fd0ce54" integrity sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw== @@ -16155,14 +15122,14 @@ 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.14.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-7.14.0.tgz#f46727845ad19c2670a7e8151063a670338b6057" + integrity sha512-TLsdOWKFu44vHdejml4Uoo8h0EwCjdIj9Z9kpz7pA5i8iQxOTwVb1+Fy+X86kW5AXKxQpYpYDs4j/qPDbro/lg== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" pg-connection-string "0.1.3" - pg-pool "^2.0.4" + pg-pool "^2.0.7" pg-types "^2.1.0" pgpass "1.x" semver "4.3.2" @@ -16175,9 +15142,9 @@ pgpass@1.x: 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== + version "2.1.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" + integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" @@ -16207,9 +15174,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.4.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.4.0.tgz#b8b170d066f57cc7948ca9cedba60497a4f6c284" + integrity sha512-0oEHicFdUCh2tFHQnTX7b9jph+S/UibLMuhBF0yFkt+7JGZGQejNkui27B9qPUofwmqKAf3FfLYvponPyNsQJw== dependencies: "@hapi/bourne" "^1.3.2" args "^5.0.1" @@ -16217,28 +15184,18 @@ 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" + 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.13.2: +pino@^5.12.6, pino@^5.13.2: version "5.13.6" resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.6.tgz#c7669cb02add833b3afa75e2dd8c6e4cb411295e" integrity sha512-cYhvK4lopLnW/OtU3uRqBNsPiBt0Cdv97LGJg4yPGbGajlOjWWaODwD66q3Ynqnj6bSNw8HSofYcEOKZqh4Gcg== @@ -16271,6 +15228,13 @@ 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" + 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" @@ -16387,27 +15351,6 @@ postcss-flexbugs-fixes@^4.1.0: 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== - dependencies: - postcss "^7.0.14" - postcss-load-config@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" @@ -16426,19 +15369,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,16 +15447,6 @@ 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" @@ -16543,14 +15463,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 +15503,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" @@ -16657,44 +15573,7 @@ postcss-reduce-transforms@^4.0.2: 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== - dependencies: - postcss "^7.0.0" - -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: +postcss-selector-parser@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= @@ -16712,7 +15591,7 @@ postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: +postcss-selector-parser@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -16731,11 +15610,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,28 +15624,29 @@ 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: +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== +"postcss@5 - 7", postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" + integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" -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.2.15: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" postgres-array@~2.0.0: version "2.0.0" @@ -16861,10 +15736,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" @@ -16903,9 +15778,9 @@ preserve@^0.2.0: 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== + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== pretty-bytes@^5.1.0: version "5.3.0" @@ -16975,7 +15850,7 @@ process@^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== @@ -16992,14 +15867,6 @@ promise-inflight@^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" @@ -17015,20 +15882,13 @@ promise@^8.0.1: 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.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" + integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== 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" - 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: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -17038,10 +15898,10 @@ 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.3.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.3.0.tgz#bc87ac82dc4e72a31bb62040544b1bf9653da039" + integrity sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w== dependencies: xtend "^4.0.1" @@ -17050,18 +15910,6 @@ proto-list@~1.2.1: 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" @@ -17080,16 +15928,11 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: +psl@^1.1.24, psl@^1.1.28: 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== - pstree.remy@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" @@ -17168,9 +16011,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.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" + integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== qs@~6.5.2: version "6.5.2" @@ -17214,11 +16057,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" @@ -17303,40 +16141,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.11.0, react-dom@^16.7.0, react-dom@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" + integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.16.2" + scheduler "^0.18.0" 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.1.0" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.1.0.tgz#e1c5b774001e32f0bff397254e1e9d5448ac92a4" + integrity sha512-Or/qe70cfymshqoC8Lsp0ukTzijJObehb7Vfl7tb5JRxoV+b6PDkOGoqYaWBzZ59k9dH/bwraLGsnlW78/3vrA== dependencies: classnames "^2.2.5" prop-types "^15.6.0" @@ -17375,9 +16193,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.18" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.18.tgz#a9029e34af2690d76208f9a35189d73c2dfea6a7" + integrity sha512-qYD0Qi9lIbg9jLyfmodfqvAQqCBsoPKxAhca8Nxvy2/2pO5Q9r2kM28jN0bbbSnhwK8dJ7FjsfVtXKOxMW+bqw== dependencies: fast-levenshtein "^2.0.6" global "^4.3.0" @@ -17389,9 +16207,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.8.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.8.0.tgz#229de5904809696c9f46932bd9b6126b2522866e" + integrity sha512-rA/8GRKjPulft8BSBSMsHkE1AGPqJ7LjNsyk0BE7XjG70Iz62zOled2SJk7LDo8x9z86a3xOstDlKlMZ4pAy7A== dependencies: camelcase "^5.0.0" @@ -17402,20 +16220,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.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.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== react-jss@^8.6.1: version "8.6.1" @@ -17459,9 +16267,9 @@ 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.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.3.tgz#717a3d7bbe3a1b2d535c94885ce04cdc5a33fc79" + integrity sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w== dependencies: "@babel/runtime" "^7.5.5" hoist-non-react-statics "^3.3.0" @@ -17534,30 +16342,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.2: + 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.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/react-static-plugin-source-filesystem/-/react-static-plugin-source-filesystem-7.1.0.tgz#41ed385f6b01a4c53bebd918281a7bcb03423e85" + integrity sha512-HI7yVBNDTQz5aYsFWJfTUsCgOVjUU9+s+vLPEd8BxeqGAJ0TPKymkmKJJLJYFo8TGm20Wn0yqXiEvuXEOYDoEg== dependencies: - chokidar "^3.0.2" - glob "^7.1.4" + chokidar "^2.1.5" + glob "^7.1.3" 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" @@ -17670,61 +16478,14 @@ react-universal-component@^4.0.0: prop-types "^15.5.10" 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== +react@^16.0.0, react@^16.11.0, react@^16.7.0, react@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" + integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== 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== - 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" @@ -17742,14 +16503,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,13 +16557,6 @@ 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" @@ -17834,7 +16580,7 @@ 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: +"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, 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== @@ -17868,16 +16614,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" @@ -17920,22 +16656,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" @@ -18031,11 +16751,6 @@ regexp.prototype.flags@^1.2.0: 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== - regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -18084,21 +16799,21 @@ regjsparser@^0.6.0: 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 +16866,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 +16909,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= @@ -18291,23 +16956,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, request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -18372,6 +17037,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 +17089,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" @@ -18491,11 +17154,6 @@ 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@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -18521,25 +17179,13 @@ 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: 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" @@ -18562,10 +17208,10 @@ rollup-plugin-string@^3.0.0: dependencies: 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== +rollup-plugin-typescript2@^0.24.2: + version "0.24.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.24.3.tgz#276fa33a9d584d500da62d3e5400307f4a46bdf2" + integrity sha512-D7yovQlhnRoz7pG/RF0ni+koxgzEShwfAGuOq6OVqKzcATHOvmUt2ePeYVdc9N0adcW1PcTzklUEM0oNWE/POw== dependencies: find-cache-dir "^3.0.0" fs-extra "8.1.0" @@ -18573,17 +17219,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.27.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.27.3.tgz#0e427d9bee9e30e6017e89b942d88276ce26f9e2" + integrity sha512-79AEh4m5NPCz97GTuIoXpSFIMPyk2AiqVQp040baSRPXk/I4YMGt5/CR9GX5oEYEkxwBZoWLheaS1/w/FidfJw== dependencies: "@types/estree" "*" "@types/node" "*" @@ -18619,11 +17272,11 @@ 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.26.3" + resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.26.3.tgz#7d521fbff754022771ddf4b02199cea3d5864e57" + integrity sha512-SZM3AjmvHhEJ1tUtGB82i/KruhqxiDohBx7wdepQst5PnG76qp84NU7WSGzXFY0pK54rdS7iNU/oqJMcCu/Ssg== dependencies: - "@phenomnomnominal/tsquery" "^3.0.0" + "@phenomnomnominal/tsquery" "^4.0.0" decamelize "^3.0.0" resolve "^1.4.0" semver "^6.0.0" @@ -18638,26 +17291,19 @@ 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: +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.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== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -18699,26 +17345,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.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -18732,7 +17362,7 @@ 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: +schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== @@ -18740,14 +17370,6 @@ schema-utils@^2.0.0, schema-utils@^2.1.0, schema-utils@^2.4.1, schema-utils@^2.5 ajv "^6.10.2" 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" @@ -18809,7 +17431,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.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.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -18819,16 +17441,11 @@ 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@^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= - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -18856,21 +17473,11 @@ 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: +serialize-javascript@^1.4.0, 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.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== - serve-handler@6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.2.tgz#f05b0421a313fff2d257838cba00cbcc512cd2b6" @@ -18908,7 +17515,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -serve@^11.1.0: +serve@^11.1.0, serve@^11.2.0: version "11.2.0" resolved "https://registry.yarnpkg.com/serve/-/serve-11.2.0.tgz#0405ce95c4e4a6abd9cd3d3a04ebaa7d94638627" integrity sha512-THZcLzDGk3vJqjhAbLkLag43tiE3V0B7wVe98Xtl+1KyAsr+4iShg+9hke4pLZmrCJu0pUg0TrbhJmdqn/MKoA== @@ -18990,15 +17597,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" @@ -19051,9 +17649,9 @@ simple-swizzle@^0.2.2: 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== + version "1.0.4" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" + integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== sitemap@^5.0.1: version "5.1.0" @@ -19086,29 +17684,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.3.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.6.tgz#ba5fd6159b570fe4811d02ea9b1f4906677638c3" + integrity sha512-wA9XS475ZmGNlEnYYLPReSfuz/c3VQsEMoU43mi6OnKMCdbnFXd4/Yg7J0lBv8jkPolacMpOrWEaoYxuE1+hoQ== snake-case@^2.1.0: version "2.1.0" @@ -19222,22 +17801,6 @@ 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" @@ -19289,7 +17852,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.16: +source-map-support@^0.5.13, source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: 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== @@ -19297,20 +17860,12 @@ source-map-support@^0.5.16: 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== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "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= @@ -19411,11 +17966,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 +17973,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" @@ -19483,21 +18026,13 @@ 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== dependencies: 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== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.0.0" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -19513,11 +18048,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" @@ -19649,13 +18179,13 @@ string-width@^3.0.0, string-width@^3.1.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== + 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" @@ -19692,16 +18222,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 +18268,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 +18317,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.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-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,15 +18334,6 @@ 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" - style-loader@0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -19841,19 +18342,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 +18375,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 +18385,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,18 +18392,18 @@ 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" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + supports-color@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" @@ -20026,22 +18426,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,16 +18475,6 @@ 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== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -20129,7 +18514,7 @@ tar-stream@^2.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== @@ -20175,23 +18560,6 @@ teeny-request@^3.11.3: node-fetch "^2.2.0" 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= - 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" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -20199,6 +18567,16 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +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: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -20214,24 +18592,10 @@ terser-webpack-plugin@^1.4.1: 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== - 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" - source-map "^0.6.1" - terser "^4.3.9" - 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: + version "4.4.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.0.tgz#22c46b4817cf4c9565434bfe6ad47336af259ac3" + integrity sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -20247,20 +18611,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" @@ -20322,7 +18681,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 +18704,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= @@ -20590,21 +18949,6 @@ tree-kill@^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= - trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" @@ -20617,16 +18961,6 @@ 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" @@ -20644,7 +18978,7 @@ ts-invariant@^0.4.0: dependencies: tslib "^1.9.3" -ts-jest@^24.0.2: +ts-jest@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== @@ -20660,10 +18994,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.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" + integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -20671,10 +19005,10 @@ 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.5.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.2.tgz#434f6c893bafe501a30b32ac94ee36809ba2adce" + integrity sha512-W1DK/a6BGoV/D4x/SXXm6TSQx6q3blECUzd5TN+j56YEMX3yPVMpHsICLedUw3DvGF3aTQ8hfdR9AKMaHjIi+A== dependencies: arg "^4.1.0" diff "^4.0.1" @@ -20730,10 +19064,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" @@ -20811,21 +19145,16 @@ 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.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,9 +19164,14 @@ 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: version "3.1.5" @@ -20856,35 +19190,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.2.2: +typescript@3.6.3: 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== +typescript@^3.2.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" + integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== u2f-api@0.2.7: version "0.2.7" @@ -20910,23 +19229,13 @@ uglify-js@3.4.x: 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== + version "3.6.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.9.tgz#85d353edb6ddfb62a9d798f36e91792249320611" + integrity sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw== 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" @@ -20972,14 +19281,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" @@ -21066,50 +19367,22 @@ unique-string@^1.0.0: 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== - dependencies: - unist-util-is "^3.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.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12" + integrity sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA== dependencies: - os-name "^3.1.0" + "@types/unist" "^2.0.2" universalify@^0.1.0: version "0.1.2" @@ -21188,9 +19461,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" @@ -21254,13 +19527,13 @@ urlgrey@^0.4.4: 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.1" + resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.1.tgz#1cc6e82548f62135e2ddc13e0b351bb423d34e2a" + integrity sha512-iZRGRsdbCvhBpeufY+cpy7LS9OMrh1hobvHaxa6/HNr1mgqrfeNpfbzoRCBofkG9MpLsujKieBFzqdPWcMugYQ== 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,13 +19545,6 @@ 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: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -21316,16 +19582,11 @@ 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.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: 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== - v8flags@^3.0.1, v8flags@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" @@ -21333,7 +19594,7 @@ v8flags@^3.0.1, v8flags@^3.1.1: dependencies: homedir-polyfill "^1.0.1" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +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== @@ -21382,10 +19643,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.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.2.tgz#75ba05090ec758fa8420f2c11ce049bcddd8cf3e" + integrity sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" vfile-message@^1.0.0: version "1.1.1" @@ -21440,13 +19704,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 +19726,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" @@ -21554,13 +19779,6 @@ 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" @@ -21670,7 +19888,7 @@ webpack-node-externals@^1.7.2: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== -webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -21678,7 +19896,7 @@ 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: +webpack@^4.39.2, webpack@^4.40.2: version "4.41.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== @@ -21785,7 +20003,7 @@ 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@^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 +20011,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== @@ -21825,13 +20043,6 @@ window-size@^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 +20055,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 +20065,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" @@ -22027,13 +20233,13 @@ wrap-ansi@^5.1.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== + 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 +20255,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.0.0, 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,38 +20264,6 @@ 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== - dependencies: - sort-keys "^2.0.0" - write-json-file "^2.2.0" - write-stream@~0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" @@ -22097,13 +20271,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" @@ -22132,11 +20299,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" @@ -22157,7 +20319,7 @@ xml-name-validator@^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= @@ -22221,21 +20383,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.7.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" + integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== + dependencies: + "@babel/runtime" "^7.6.3" + +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,6 +20405,14 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +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@^15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" @@ -22266,15 +20435,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,7 +20453,7 @@ 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: +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== @@ -22309,10 +20469,10 @@ yargs@13.3.0, yargs@^13.2.1, yargs@^13.2.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" -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.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" + integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== dependencies: cliui "^5.0.0" decamelize "^1.2.0" @@ -22416,9 +20576,9 @@ zen-observable-ts@^0.8.20: 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" diff --git a/common/scripts/install-run-rush.js b/common/scripts/install-run-rush.js new file mode 100644 index 0000000000..ed21abf854 --- /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..0a94545f5c --- /dev/null +++ b/common/scripts/install-run.js @@ -0,0 +1,418 @@ +"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, _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. + * + * 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._syncNpmrc() + */ +function _syncNpmrc(sourceNpmrcFolder, targetNpmrcFolder) { + const sourceNpmrcPath = path.join(sourceNpmrcFolder, '.npmrc'); + const targetNpmrcPath = path.join(targetNpmrcFolder, '.npmrc'); + try { + if (fs.existsSync(sourceNpmrcPath)) { + let npmrcFileLines = fs.readFileSync(sourceNpmrcPath).toString().split('\n'); + npmrcFileLines = npmrcFileLines.map((line) => (line || '').trim()); + const resultLines = []; + // Trim out lines that reference environment variables that aren't defined + for (const line of npmrcFileLines) { + // This finds environment variable tokens that look like "${VAR_NAME}" + const regex = /\$\{([^\}]+)\}/g; + const environmentVariables = line.match(regex); + let lineShouldBeTrimmed = false; + if (environmentVariables) { + for (const token of environmentVariables) { + // Remove the leading "${" and the trailing "}" from the token + const environmentVariableName = token.substring(2, token.length - 1); + if (!process.env[environmentVariableName]) { + 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)); + } + 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 + 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('which 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', `install-run-${Date.now().toString()}`); + fs.renameSync(nodeModulesFolder, rushRecyclerFolder); + } + } + 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 result = childProcess.spawnSync(binPath, packageBinArgs, { + stdio: 'inherit', + cwd: process.cwd(), + env: process.env + }); + return result.status; +} +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/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/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/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/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-common/package.json b/packages/neo-one-build-common/package.json new file mode 100644 index 0000000000..6c8a8e38c2 --- /dev/null +++ b/packages/neo-one-build-common/package.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/build-common", + "version": "1.0.0", + "description": "Helper package to install script packages via Rush", + "scripts": { + "build": "", + "lint": "" + }, + "devDependencies": { + "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" + }, + "sideEffects": false +} 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 91% rename from scripts/e2e/One.js rename to packages/neo-one-build-tests/environments/e2e/One.js index e9b340a0c6..2a0963970e 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); 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..e5c4d7fba9 --- /dev/null +++ b/packages/neo-one-build-tests/environments/e2e/jestSetup.js @@ -0,0 +1,30 @@ +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: 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..80a62ff571 --- /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: jest.fn(), + error: console.error, + warn: console.warn, + info: jest.fn(), + debug: 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..6c47e927a5 --- /dev/null +++ b/packages/neo-one-build-tests/jest/base.js @@ -0,0 +1,49 @@ +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', '/packages/.*/lib/'], + transform: { + '^.+\\.tsx?$': `${jest_root}/node_modules/ts-jest`, + '^.+\\.jsx?$': [ + `${jest_root}/node_modules/babel-jest`, + { + configFile: require.resolve('../babel.config.js'), + babelrc: true, + babelrcRoots: './packages/*', + }, + ], + }, + 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/jest/e2e.js b/packages/neo-one-build-tests/jest/e2e.js similarity index 60% rename from jest/e2e.js rename to packages/neo-one-build-tests/jest/e2e.js index 51c0f70ba5..d031c1de7d 100644 --- a/jest/e2e.js +++ b/packages/neo-one-build-tests/jest/e2e.js @@ -3,18 +3,16 @@ const base = require('./base'); module.exports = { ...base({ path: 'e2e' }), displayName: 'e2e', - testRunner: 'jest-circus/runner', + testRunner: + '/packages/neo-one-build-tests/node_modules/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', + '/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 100% rename from jest/unit-ci.js rename to packages/neo-one-build-tests/jest/unit-ci.js diff --git a/jest/unit.js b/packages/neo-one-build-tests/jest/unit.js similarity index 91% rename from jest/unit.js rename to packages/neo-one-build-tests/jest/unit.js index 8739f891b4..4916a4c8e0 100644 --- a/jest/unit.js +++ b/packages/neo-one-build-tests/jest/unit.js @@ -4,7 +4,6 @@ module.exports = { ...base({ path: 'test' }), displayName: 'unit', testRegex: '^.*/__tests__/.*\\.test\\.tsx?$', - modulePathIgnorePatterns: ['/dist/.*'], coverageReporters: ['json'], collectCoverageFrom: [ 'packages/*/src/**/*.ts', @@ -14,7 +13,8 @@ module.exports = { '!packages/*/src/__data__/*.ts', ], coveragePathIgnorePatterns: [ - '/node_modules/', + '/common', + '/packages/.*/node_modules', '/packages/.*/src/__data__/contracts/.*', '/packages/.*/src/__data__/snippets/.*', '/packages/neo-one-smart-contract-compiler/src/scripts/generateTypes.ts', diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json new file mode 100644 index 0000000000..234da585f9 --- /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" + }, + "devDependencies": { + "@babel/preset-env": "^7.6.3", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/logger": "^2.3.0", + "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": "^8.0.0", + "lodash": "^4.17.15", + "nyc": "^14.1.1", + "tmp": "^0.1.0", + "ts-jest": "^24.1.0" + }, + "sideEffects": false +} 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..1c61d2dedb --- /dev/null +++ b/packages/neo-one-build-tests/tsconfig.jest.json @@ -0,0 +1,36 @@ +{ + "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/*/node_modules", + "./packages/*/lib", + "./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..10a96aeaeb --- /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('lib'); + +const buildTools = () => + gulp + .src(['src/**/*.js', 'src/**/*.ts', 'src/**/*.tsx']) + .pipe(ts.createProject('./tsconfig.json')()) + .pipe(flattenSource) + .pipe(gulp.dest('lib')); + +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..cdc8113c8f --- /dev/null +++ b/packages/neo-one-build-tools-web/package.json @@ -0,0 +1,114 @@ +{ + "name": "@neo-one/build-tools-web", + "version": "1.0.0", + "description": "NEO•ONE web build tools.", + "main": "./lib/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" + ], + "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", + "cross-env": "^6.0.0", + "cssnano": "^4.1.10", + "execa": "^3.2.0", + "extract-css-chunks-webpack-plugin": "4.6.0", + "file-loader": "^4.2.0", + "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": "^1.19.3", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "postcss-flexbugs-fixes": "^4.1.0", + "react": "^16.11.0", + "rxjs": "^6.5.3", + "stats-webpack-plugin": "^0.7.0", + "terser-webpack-plugin": "^1.4.1", + "thread-loader": "^2.1.3", + "ts-loader": "^6.1.0", + "ts-node": "^8.4.1", + "typescript": "3.6.3", + "url-loader": "^2.1.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": "^6.7.3", + "@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.11", + "@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": "^1.4.0", + "gulp-typescript": "^5.0.1", + "tslint": "^5.20.0" + }, + "sideEffects": false +} 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 78% rename from scripts/website/runCypress.ts rename to packages/neo-one-build-tools-web/src/runCypress.ts index 287d45e78c..15d9266f77 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,16 +83,16 @@ 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(); }); 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(); 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 97% rename from scripts/website/webpack/plugin/node.tsx rename to packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx index 7d420866cc..3c7377e7a0 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) => ( @@ -152,9 +152,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..1e2aaa343a 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, 'lib'); 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-publish.js b/packages/neo-one-build-tools/bin/neo-one-publish.js new file mode 100644 index 0000000000..70e4ae6aa1 --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-publish.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node +const path = require('path'); +require('ts-node').register({ + transpileOnly: true, + project: path.resolve(__dirname, '..', 'tsconfig.json'), +}); +const publisher = require('../src/publish.ts'); + +publisher.publish(); 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..24b7a98bbf --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-tsc.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node +const path = require('path'); +const execa = require('execa'); + +execa(path.resolve(__dirname, '..', 'node_modules', '.bin', 'tsc'), [ + '--project', + '.', + '--noEmit', +]); diff --git a/packages/neo-one-build-tools/gulpfile.js b/packages/neo-one-build-tools/gulpfile.js new file mode 100644 index 0000000000..a6e49980e4 --- /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('lib'); + +const buildTools = () => + gulp + .src(['src/**/*.js', 'src/**/*.ts']) + .pipe(ts.createProject('./tsconfig.json')()) + .pipe(flattenSource) + .pipe(gulp.dest('lib')); + +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..d43a90962f --- /dev/null +++ b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.esm.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.esm.json", + "compilerOptions": { + "target": "esnext" + } +} 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..7bd957ddca --- /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", "./lib", "./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..f8cfedf2a3 --- /dev/null +++ b/packages/neo-one-build-tools/package.json @@ -0,0 +1,91 @@ +{ + "name": "@neo-one/build-tools", + "version": "1.0.0", + "description": "NEO•ONE build tools.", + "main": "./lib/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" + ], + "dependencies": { + "execa": "^3.2.0", + "fs-extra": "^8.1.0", + "gulp": "~4.0.2", + "gulp-banner": "^0.1.3", + "gulp-if": "^3.0.0", + "gulp-filter": "^6.0.0", + "gulp-flatten": "^0.4.0", + "gulp-json-transform": "^0.4.7", + "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", + "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.24.2", + "rxjs-tslint-rules": "^4.24.3", + "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", + "ts-node": "^8.4.1", + "typescript": "3.6.3", + "yargs": "^14.2.0" + }, + "devDependencies": { + "@types/fs-extra": "^8.0.0", + "@types/gulp": "^4.0.6", + "@types/gulp-if": "^0.0.33", + "@types/gulp-filter": "^3.0.33", + "@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/minimatch": "^3.0.3", + "@types/yargs": "^13.0.3" + }, + "sideEffects": false +} 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..ef2d91172f --- /dev/null +++ b/packages/neo-one-build-tools/src/build.ts @@ -0,0 +1,133 @@ +// 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'; +import { pack, copyData, packBin } from './pack'; + +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( + () => (glob, options) => { + gulp.src(glob, { nodir: true }).pipe(gulp.dest(options !== undefined ? options.dest : 'lib')); + }, + ['src/**/*'].concat(ignoreGlobs), +); +copyStaticTask.enabled = false; + +export const compileTypescriptTask = new BuildTask( + buildTypescript, + ['src/**/*.ts', 'src/**/*.tsx'].concat(ignoreGlobs), +); + +export const cleanTask = async () => Promise.all([fs.remove('lib')]); + +export const rollupToolsTask = new BuildTask(rollupDevTools, []); +rollupToolsTask.enabled = false; + +export const compileBinTask = new BuildTask(buildBin); + +export const copyDataTask = new BuildTask(copyData); + +export const packTask = new BuildTask(pack, ['lib/**', '!lib/**/*.map']); + +export const packBinTask = new BuildTask(packBin); + +export const initialize = () => { + const format = getFormat(argv.format); + + gulp.task('clean', async () => { + await fs.remove('lib').then(() => fs.ensureDir('lib')); + }); + + 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('copyData', async () => { + await copyDataTask.execute(format); + }); + + gulp.task('pack', async () => { + await packTask.execute(format); + }); + + gulp.task('packBin', async () => { + await packBinTask.execute(format); + }); + + gulp.task('default', gulp.series('clean', 'copyStatic', 'compileTS', 'compileBin', 'rollupTools')); + + gulp.task('pack', gulp.series('copyData', 'pack', 'packBin')); +}; 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..aaf90af176 --- /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('lib')); +}; + +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..d537e4f0f3 --- /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('lib')); +}; 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..0df8ebd4d9 --- /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', 'lib', '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('lib', 'index.js'), + }); +}; 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..568559844a --- /dev/null +++ b/packages/neo-one-build-tools/src/clean.ts @@ -0,0 +1,53 @@ +// 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 lib/* 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 /lib: ${path.resolve(dir, 'lib')}`); + fs.removeSync(path.resolve(dir, 'lib')); + } + 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)); + } + }); + }); + 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..61e0443f40 --- /dev/null +++ b/packages/neo-one-build-tools/src/formats.ts @@ -0,0 +1,58 @@ +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: 'main', + 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: 'next', + 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'), +}; + +const BROWSERIFY_FORMAT: Format = { + target: 'es2017', + module: 'cjs', + browser: true, + dist: 'browser', + name: 'browserify', + packageDir: process.cwd(), + tsconfig: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.browserify.cjs.json'), + tsconfigESM: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.esm.json'), +}; + +export const getFormat = (requestedFormat: string) => { + switch (requestedFormat) { + case 'main': + return MAIN_FORMAT; + case 'next': + return NEXT_FORMAT; + case 'browserify': + return BROWSERIFY_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/pack.ts b/packages/neo-one-build-tools/src/pack.ts new file mode 100644 index 0000000000..983f412de9 --- /dev/null +++ b/packages/neo-one-build-tools/src/pack.ts @@ -0,0 +1,51 @@ +import fs from 'fs-extra'; +// tslint:disable-next-line: match-default-export-name +import gulp from 'gulp'; +import path from 'path'; +import { Format } from './formats'; +import { getName, getPackageJSON, gulpReplaceBinPack, gulpReplaceInternalSources, transformPackage } from './utils'; + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); + +const getPackageDist = (format: Format, pkgName: string) => + path.resolve(APP_ROOT_DIR, 'dist', format.dist, getName(format, pkgName.slice(1).replace('/', '-'))); + +const getTransformSources = (format: Format, internalDeps: readonly string[]) => (glob: string[]) => + gulpReplaceInternalSources(format, internalDeps, gulp.src(glob)); + +const transformPackageJSON = async (format: Format, pkgName: string) => { + const packageJSON = await getPackageJSON(); + await fs.writeFile( + path.resolve(getPackageDist(format, pkgName), 'package.json'), + JSON.stringify(transformPackage(format, packageJSON), undefined, 2), + 'utf-8', + ); +}; + +const copyMetaData = async (format: Format, pkgName: string) => { + const packageDist = getPackageDist(format, pkgName); + + return Promise.all([ + fs.copyFile(path.resolve(APP_ROOT_DIR, 'LICENSE'), path.resolve(packageDist, 'LICENSE')), + fs.copyFile(path.resolve(APP_ROOT_DIR, 'README.md'), path.resolve(packageDist, 'README.md')), + ]); +}; + +export const copyData = (format: Format, pkgName: string) => async () => { + const packageDist = getPackageDist(format, pkgName); + await fs.ensureDir(packageDist); + await Promise.all([transformPackageJSON(format, pkgName), copyMetaData(format, pkgName)]); +}; + +export const pack = (format: Format, pkgName: string, dependencies: readonly string[]) => { + const transformSources = getTransformSources(format, dependencies); + + return (glob: string[]) => transformSources(glob).pipe(gulp.dest(getPackageDist(format, pkgName))); +}; + +export const packBin = (format: Format, pkgName: string) => () => { + gulp + .src('bin/**') + .pipe(gulpReplaceBinPack()) + .pipe(gulp.dest(path.resolve(getPackageDist(format, pkgName), 'bin'))); +}; diff --git a/packages/neo-one-build-tools/src/publish.ts b/packages/neo-one-build-tools/src/publish.ts new file mode 100644 index 0000000000..8853674b9e --- /dev/null +++ b/packages/neo-one-build-tools/src/publish.ts @@ -0,0 +1,46 @@ +import execa from 'execa'; +import fs from 'fs-extra'; +import path from 'path'; +import yargs from 'yargs'; +import { Format, getFormat } from './formats'; +import { getName } from './utils'; + +const defaultReleaseFormat = process.env.NEO_ONE_BUILD_FORMAT !== undefined ? process.env.NEO_ONE_BUILD_FORMAT : 'main'; + +const { argv } = yargs + .string('format') + .choices('format', ['main', 'next', 'browserify']) + .default('format', defaultReleaseFormat); + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const rushJSON = fs.readJsonSync(path.resolve(APP_ROOT_DIR, 'rush.json')); +const PUBLISH_SCRIPT = path.resolve(APP_ROOT_DIR, 'scripts', 'try-publish'); + +// tslint:disable: no-any +const packages: readonly string[] = rushJSON.projects + .filter((project: any) => project.shouldPublish) + .map((project: any) => project.projectFolder.slice('packages/'.length)); +// tslint:enable no-any + +const publishPackage = async (format: Format, pkgName: string) => { + const packageDist = path.resolve(APP_ROOT_DIR, 'dist', format.dist, getName(format, pkgName)); + const packageExists = await fs.pathExists(packageDist); + + if (!packageExists) { + throw new Error(`no publishable package found at ${packageDist}`); + } + + await execa(PUBLISH_SCRIPT, { + cwd: packageDist, + stdio: ['ignore', 'inherit', 'inherit'], + }); +}; + +export const publish = async () => { + const format = getFormat(argv.format); + await packages.reduce>(async (promise, pkg) => { + await promise; + + return publishPackage(format, pkg); + }, Promise.resolve()); +}; 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..133aeccfe0 --- /dev/null +++ b/packages/neo-one-build-tools/src/utils.ts @@ -0,0 +1,215 @@ +// 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'; + +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 (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 100% rename from types/e2e.d.ts rename to packages/neo-one-build-tools/types/e2e.d.ts 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-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..5b0b58e304 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/cli-common-node", "version": "2.4.0", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/cli-common": "^2.4.0", "@neo-one/client-core": "^2.3.0", @@ -12,15 +19,17 @@ "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": { + "@neo-one/build-tools": "^1.0.0", "@types/cosmiconfig": "^5.0.3", "@types/fs-extra": "^8.0.0", "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", - "@types/schema-utils": "^1.0.0" + "@types/schema-utils": "^1.0.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..fc97f4a5aa 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/cli-common", "version": "2.4.0", "description": "NEO•ONE code common to the cli and browser.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", @@ -11,5 +18,9 @@ "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/bin/neo-one.js b/packages/neo-one-cli/bin/neo-one.js new file mode 100644 index 0000000000..d31938c725 --- /dev/null +++ b/packages/neo-one-cli/bin/neo-one.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/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..6bf3014db6 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -2,25 +2,39 @@ "name": "@neo-one/cli", "version": "2.4.0", "description": "NEO•ONE CLI for developing NEO dapps.", - "main": "./src/index", + "main": "./lib/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" + }, "dependencies": { - "@babel/core": "^7.5.5", + "@babel/core": "^7.6.2", "@babel/register": "^7.5.5", + "@neo-one/client": "^2.3.0", "@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": "^2.3.0", "@neo-one/client-full-core": "^2.3.0", + "@neo-one/client-switch": "^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-core": "^2.3.0", "@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", + "@neotracker/core": "1.3.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "cross-fetch": "^3.0.4", @@ -29,21 +43,31 @@ "import-local": "^3.0.2", "listr": "^0.14.3", "lodash": "^4.17.15", + "nodemon": "^1.19.3", "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" + "tslib": "^1.10.0", + "ts-node": "^8.4.1", + "typescript": "3.6.3", + "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.3.0", + "@neo-one/smart-contract-test": "^2.3.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/yargs": "^13.0.2", + "@types/react": "^16.9.11", + "@types/yargs": "^13.0.3", + "gulp": "~4.0.2", + "react": "^16.11.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..83ad42e1d8 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'; 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..d08eae36e9 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 @@ -29,6 +29,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..14884ecbf1 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,4 +1,4 @@ -/* @hash 6a825bb1fc578614e72a5301095a3be1 */ +/* @hash f46d3990a4894d6a61d9ff22499ee172 */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10070/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10030/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,5 @@ 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}:10030/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..11b3cbdfba 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ // 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/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 ? 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) => 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, }, @@ -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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AA0CF;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuF;AAAA;AAAA;AAAA;AAAA;AACrF;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;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADqF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzC0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AARmH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAA;AAAA;AAAA;AAAA;AAAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiE4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjE5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;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;AAAyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoF;AAAA;AAAA;AAAA;AAAA;AAC5D;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;AAGwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjEnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, 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/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts index 3f9f2289fe..704b511e05 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,4 +1,4 @@ -/* @hash 658682a5c04a79eecb8d789927f232d5 */ +/* @hash 52c353d47e30c3e4c1036416ac26de71 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ 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}:10040/rpc` })), }); 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..7f58eec9fa 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 5272e938f80e0a8194b830501b68fc40 */ // 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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, @@ -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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAC/C;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;AAIiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AA1GpB;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;AA0GoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1GpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0GQ;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;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;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/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 ? 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) => 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, }, 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..55da2be1e4 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,4 +1,4 @@ -/* @hash 893ab51f0aaf08008112d33346cc4e1d */ +/* @hash db83d007b86b64c594c868c08d8b514a */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10050/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,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}:10050/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..11b3cbdfba 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ // 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;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AAAA;AAAA;AADxB;AAAA;AAAA;AAAA;AAAA;AACuC;AAAA;AAAA;AAAA;AAAA;AADvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAA/B;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAA8D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA2B;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAA0C;AAAA;AAAA;AAAA;AAAA;AAA1C;AAAA;AAAA;AAAA;AAAA;AAAuD;AAAA;AAAA;AAAA;AAAA;AAAvD;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;AAA8B;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAA9C;AAAA;AAAA;AAAA;AAAA;AAAiE;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;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAAzC;AAAA;AAAA;AAAA;AAAA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAtD;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;AAA4B;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAAA;AAAA;AAA/D;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;AAAb;AAAA;AAAA;AAAA;AAAA;AAA0B;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;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;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;AAMA;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;AAIE;AAAA;AAAA;AAAA;AAAA;AAJF;AAAA;AAAA;AAAA;AAAA;AAKE;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAME;AAAA;AAAA;AAAA;AAAA;AANF;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAAA;AAAA;AAPF;AAAA;AAAA;AAAA;AAAA;AAQE;AAAA;AAAA;AAAA;AAAA;AARF;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AAAA;AAAA;AATF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFh1CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;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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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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA5B;AAAA;AAA4B;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAD0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzC4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;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;AAGqB;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;AAAF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;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;AAEa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;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;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BG;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;AA6Ba;AAAP;AAAA;AAAO;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACxBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;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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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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, 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..6f4e5c7d75 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/.neo-one.config.js @@ -0,0 +1,34 @@ +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 = { + 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: false, + }, +}; diff --git a/babel.config.js b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js similarity index 100% rename from babel.config.js rename to packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AA0CF;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuF;AAAA;AAAA;AAAA;AAAA;AACrF;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;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADqF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzC0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AARmH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAA;AAAA;AAAA;AAAA;AAAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiE4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjE5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;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;AAAyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoF;AAAA;AAAA;AAAA;AAAA;AAC5D;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;AAGwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjEnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAC4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AA7BrC;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;AA6BqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7BrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BqC;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAyBJ;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuF;AAAA;AAAA;AAAA;AAAA;AACrF;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;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADqF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxB0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;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;AAEO;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAGK;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAbkF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAA;AAAgD;AAAA;AAAA;AAAA;AAAA;AAAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiF4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjF5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqF;AAAA;AAAA;AAAA;AAAA;AAC7D;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;AAGwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjFnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiFQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAC4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AA7CrC;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;AA6CqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7CrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CqC;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AASJ;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuF;AAAA;AAAA;AAAA;AAAA;AACrF;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;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADqF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAR2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAGK;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAbmF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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-smart-contract-lib/src/__data__/contracts/tsconfig.json b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/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/ico-neotracker/neo-one/contracts/tsconfig.json 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/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts index 6dc2fc7e92..b02e97b140 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,4 +1,4 @@ -/* @hash 5acda1db24d31773c1006f32e2885ad5 */ +/* @hash 75addf13d49c998b009e371e02264bfe */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ 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}:10060/rpc` })), }); 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..7f58eec9fa 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 5272e938f80e0a8194b830501b68fc40 */ // 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AAAA;AAAA;AADxB;AAAA;AAAA;AAAA;AAAA;AACuC;AAAA;AAAA;AAAA;AAAA;AADvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAA/B;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAA8D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA2B;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAA0C;AAAA;AAAA;AAAA;AAAA;AAA1C;AAAA;AAAA;AAAA;AAAA;AAAuD;AAAA;AAAA;AAAA;AAAA;AAAvD;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;AAA8B;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAA9C;AAAA;AAAA;AAAA;AAAA;AAAiE;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;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAAzC;AAAA;AAAA;AAAA;AAAA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAtD;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;AAA4B;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAAA;AAAA;AAA/D;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;AAAb;AAAA;AAAA;AAAA;AAAA;AAA0B;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;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;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;AAMA;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;AAIE;AAAA;AAAA;AAAA;AAAA;AAJF;AAAA;AAAA;AAAA;AAAA;AAKE;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAME;AAAA;AAAA;AAAA;AAAA;AANF;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAAA;AAAA;AAPF;AAAA;AAAA;AAAA;AAAA;AAQE;AAAA;AAAA;AAAA;AAAA;AARF;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AAAA;AAAA;AATF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFh2CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, 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..fee9888198 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,4 +1,4 @@ -/* @hash 764f2ee223108156a8dd1bb36406f5b0 */ +/* @hash 6a825bb1fc578614e72a5301095a3be1 */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10070/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,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}:10070/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..11b3cbdfba 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ // 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA5B;AAAA;AAA4B;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAD0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzC4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;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;AAGqB;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;AAAF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;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;AAEa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;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;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BG;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;AA6Ba;AAAP;AAAA;AAAO;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACxBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA5B;AAAA;AAA4B;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAD0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzC4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;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;AAGqB;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;AAAF;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;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;AAEa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAApB;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;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BG;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;AA6Ba;AAAP;AAAA;AAAO;AAAE;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;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;AAGY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACxBhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, 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..161c1acbde 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 @@ -29,6 +29,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..081acbf193 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,4 +1,4 @@ -/* @hash 75addf13d49c998b009e371e02264bfe */ +/* @hash 62c81cb3802f775995035832c616b05b */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ 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}:10020/rpc` })), }); 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..7f58eec9fa 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 5272e938f80e0a8194b830501b68fc40 */ // 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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, @@ -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/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 ? 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) => 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, }, 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..9f3a01cd2e 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([ 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..2a627650b5 100644 --- a/packages/neo-one-cli/src/bin/neo-one.ts +++ b/packages/neo-one-cli/src/bin/neo-one.ts @@ -1,6 +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 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/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..5ed98b9d1d 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/client-common", "version": "2.3.0", "description": "NEO•ONE client common code.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/ec-key": "^0.1.0", "@neo-one/utils": "^2.3.0", @@ -13,7 +20,7 @@ "elliptic": "^6.5.0", "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", "source-map": "^0.7.3", @@ -21,13 +28,17 @@ "wif": "^2.0.6" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", "@types/bs58": "^4.0.0", "@types/buffer-xor": "^2.0.0", "@types/elliptic": "^6.4.9", + "@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" + "@types/wif": "^2.0.1", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..1e2eecff53 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -2,28 +2,39 @@ "name": "@neo-one/client-core", "version": "2.3.0", "description": "NEO•ONE client core types implementation.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-switch": "^2.3.0", "@neo-one/utils": "^2.3.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": "^1.4.0", "debug": "^4.1.1", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", "tapable": "^1.1.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@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" + "@types/tapable": "^1.0.4", + "gulp": "~4.0.2" }, "sideEffects": false } 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..343a830802 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 @@ -35,7 +35,13 @@ describe('RemoteUserAccountProvider', () => { ['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, + [ + '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, [ 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..e4469e58b8 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 @@ -487,7 +487,12 @@ describe('NEOONEDataProvider', () => { }); test(`getAsset - extracts en name`, async () => { - const assetJSON = factory.createAssetJSON({ name: [{ lang: 'foo', name: 'bar' }, { lang: 'en', name: 'baz' }] }); + 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); @@ -495,7 +500,12 @@ describe('NEOONEDataProvider', () => { }); test(`getAsset - otherwise, first name`, async () => { - const assetJSON = factory.createAssetJSON({ name: [{ lang: 'foo', name: 'bar' }, { lang: 'baz', name: 'baz' }] }); + 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); 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..110cb9b5c2 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 @@ -225,7 +225,13 @@ describe('DapiUserAccountProvider', () => { ['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, + [ + '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, [ 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/sc/createSmartContract.ts b/packages/neo-one-client-core/src/sc/createSmartContract.ts index ab5f1edd54..a68ddb341c 100644 --- a/packages/neo-one-client-core/src/sc/createSmartContract.ts +++ b/packages/neo-one-client-core/src/sc/createSmartContract.ts @@ -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( diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 0fa6f0dd27..ec48e016c4 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -517,13 +517,16 @@ export abstract class UserAccountProviderBase { .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')), - }), - ); + 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(); @@ -764,7 +767,10 @@ export abstract class UserAccountProviderBase { updatedOutputs: acc.updatedOutputs.concat([ output.clone({ value: output.value.add( - utils.bigNumberToBN(tempIns.reduce((left, right) => left.plus(right.value), new BigNumber('0')), 8), + utils.bigNumberToBN( + tempIns.reduce((left, right) => left.plus(right.value), new BigNumber('0')), + 8, + ), ), }), ]), @@ -892,7 +898,10 @@ export abstract class UserAccountProviderBase { return transaction.clone({ scripts: _.sortBy<[string, WitnessModel]>( - [[scriptHash, witness], [otherHash, otherScript]], + [ + [scriptHash, witness], + [otherHash, otherScript], + ], [(value: [string, WitnessModel]) => value[0]], ).map((value) => value[1]), }); 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/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..e1906de287 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -2,11 +2,23 @@ "name": "@neo-one/client-full-common", "version": "2.3.0", "description": "NEO•ONE full client common code.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/utils": "^2.3.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..4a158bba80 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/client-full-core", "version": "2.3.0", "description": "NEO•ONE client-full core types implementation.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", @@ -14,12 +21,15 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@neo-one/node-core": "^2.3.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" + "rxjs": "^6.5.3", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-client-full-core/tsconfig.json b/packages/neo-one-client-full-core/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-full-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/gulpfile.js b/packages/neo-one-client-full/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-full/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/package.json b/packages/neo-one-client-full/package.json index b288c54048..c0c33913c2 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -2,10 +2,21 @@ "name": "@neo-one/client-full", "version": "2.3.0", "description": "NEO•ONE client extended API.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client": "^2.3.0", "@neo-one/client-full-core": "^2.3.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } diff --git a/packages/neo-one-client-full/tsconfig.json b/packages/neo-one-client-full/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-full/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-client-switch/gulpfile.js b/packages/neo-one-client-switch/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-switch/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 757d6b2170..5d02a87d57 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -2,8 +2,15 @@ "name": "@neo-one/client-switch", "version": "2.3.0", "description": "NEO•ONE client library for browser/node differences.", - "main": "./src/index", - "browser": "./src/index.browser", + "main": "./lib/index", + "browser": "./lib/index.browser", + "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": { "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", @@ -24,11 +31,13 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@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" + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "optionalDependencies": { "@ledgerhq/hw-transport-node-hid": "^4.68.2" 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/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..8661dc78a2 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -2,11 +2,22 @@ "name": "@neo-one/client", "version": "2.3.0", "description": "NEO•ONE client API.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", "@neo-one/developer-tools": "^2.3.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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..4c42e7780d 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -2,18 +2,26 @@ "name": "@neo-one/developer-tools-frame", "version": "2.3.0", "description": "NEO•ONE developer tools.", - "main": "./src/index", + "license": "MIT", + "scripts": { + "build": "node ./node_modules/@neo-one/build-tools-web/lib/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" + }, "dependencies": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@emotion/styled-base": "^10.0.24", "@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", + "@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", @@ -24,15 +32,18 @@ "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": "^16.9.11", "@types/react-dom": "^16.9.0", - "@types/react-select": "^3.0.0" + "@types/react-select": "^3.0.0", + "cross-env": "^6.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..31925cbfdb 100644 --- a/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx +++ b/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx @@ -64,7 +64,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/BlockTime.tsx b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx index 2844a1393d..a94e254e4c 100644 --- a/packages/neo-one-developer-tools-frame/src/BlockTime.tsx +++ b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx @@ -125,11 +125,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/DateTimePicker.tsx b/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx index 6eb094c5af..f83deb10c7 100644 --- a/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx +++ b/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx @@ -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/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{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..9e7eb5f4ea 100644 --- a/packages/neo-one-developer-tools-frame/src/Toast.tsx +++ b/packages/neo-one-developer-tools-frame/src/Toast.tsx @@ -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/WalletSelectorBase.tsx b/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx index 04804ee24d..cbb23b9cec 100644 --- a/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx +++ b/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx @@ -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/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..8061c1a353 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -2,11 +2,23 @@ "name": "@neo-one/developer-tools", "version": "2.3.0", "description": "NEO•ONE developer tools.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-core": "^2.3.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/developer-tools-frame": "^2.3.0", + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } diff --git a/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts b/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts index 6859ccb1ec..614e7437e4 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/lib/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..9794204d1a 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -3,11 +3,18 @@ "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" + }, "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", + "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", "graphlib": "^2.1.7", @@ -17,20 +24,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/koa": "^2.0.49", "@types/koa-compose": "^3.2.4", "@types/koa-compress": "^2.0.9", "@types/koa-router": "^7.0.42", + "@types/jest": "^24.0.18", "@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/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..26d1d25fdf 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -3,6 +3,13 @@ "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" + }, "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", @@ -14,8 +21,8 @@ "@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", @@ -26,19 +33,21 @@ "@neo-one/react": "^2.3.0", "@neo-one/react-common": "^2.3.0", "@neo-one/smart-contract-test-browser": "^2.3.1", + "@neo-one/smart-contract-compiler": "^2.3.0", + "@neo-one/smart-contract-test-browser": "^2.3.0", "@neo-one/utils": "^2.3.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", "fs-extra": "^8.1.0", "glob": "^7.1.4", "html-entities": "^1.2.1", "immer": "^4.0.0", - "jest-circus": "^24.8.0", + "jest-circus": "^24.9.0", "jest-matchers": "^20.0.3", "jest-mock": "^24.0.0", "lodash": "^4.17.15", @@ -57,22 +66,29 @@ "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.6.3", + "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/nanoid": "^2.0.0", + "@types/react": "^16.9.11", "@types/react-dom": "^16.9.0", "@types/react-redux": "^7.1.1", "@types/resolve": "^0.0.8", 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/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/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/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/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..897303472a 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestText.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestText.tsx @@ -2,7 +2,7 @@ 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')}; 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/loaders/packagesLoader.ts b/packages/neo-one-editor/src/loaders/packagesLoader.ts index 67b3cb302c..f0989d42da 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 hasLib = await fs.pathExists(path.resolve(packagePath, 'lib')); + + 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') || + (hasLib && 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/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/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..8efec6a510 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -2,13 +2,25 @@ "name": "@neo-one/http-context", "version": "2.3.0", "description": "NEO•ONE http context utilities.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-switch": "^2.3.0", "@neo-one/logger": "^2.3.0", "@neo-one/utils": "^2.3.0", + "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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..809f8571c9 100644 --- a/packages/neo-one-http-context/src/context.ts +++ b/packages/neo-one-http-context/src/context.ts @@ -48,8 +48,8 @@ const getContextLabels = (ctx: Context) => { }, }; }; - -export const context = (logger: Logger) => async (ctx: Context, next: () => Promise) => { +type ContextFunctionType = (logger: Logger) => (ctx: Context, next: () => Promise) => Promise; +export const context: ContextFunctionType = (logger) => async (ctx, next) => { const spanExtract = tracer.propagation.extract({ getHeader: (name: string) => ctx.headers[name] }); const spanContext = spanExtract !== null ? spanExtract : undefined; const { spanLabels, logLabels } = getContextLabels(ctx); @@ -98,7 +98,8 @@ export const context = (logger: Logger) => async (ctx: Context, next: () => Prom }); }; -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/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..545f9bc5d7 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -2,8 +2,19 @@ "name": "@neo-one/http", "version": "2.3.0", "description": "NEO•ONE http utilities.", - "main": "./src/index", + "main": "./lib/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": { + "@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 +22,8 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/koa-convert": "^1.2.2", - "@types/koa-cors": "^0.0.0" + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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..a05c3bc63e 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" + }, "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": "^4.2.0", "nanoid": "^2.0.3", "pouchdb": "^7.1.1", "regenerator-runtime": "^0.13.3", - "rxjs": "^6.5.2" + "rxjs": "^6.5.3" }, "devDependencies": { - "@types/nanoid": "^2.0.0" + "@neo-one/build-tools": "^1.0.0", + "@types/nanoid": "^2.0.0", + "@types/pouchdb": "^6.4.0" }, "sideEffects": false } 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..3ba1801967 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -3,6 +3,12 @@ "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" + }, "dependencies": { "@neo-one/cli-common": "^2.4.0", "@neo-one/client-common": "^2.3.0", @@ -12,17 +18,19 @@ "@neo-one/smart-contract-compiler": "^2.3.0", "@neo-one/utils": "^2.3.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-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.6.3" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/lodash": "^4.14.138", "@types/nanoid": "^2.0.0", "@types/pouchdb": "^6.4.0" 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/src/utils.ts b/packages/neo-one-local-browser/src/utils.ts index c9085a0a81..35d0a7456a 100644 --- a/packages/neo-one-local-browser/src/utils.ts +++ b/packages/neo-one-local-browser/src/utils.ts @@ -1,5 +1,5 @@ export const getSmartContractBasePath = (value: string) => `/node_modules/@neo-one/smart-contract/${value}`; export const getSmartContractLibBasePath = (value: string) => `/node_modules/@neo-one/smart-contract-lib/${value}`; -export const getSmartContractPath = (value: string) => getSmartContractBasePath(`src/${value}`); -export const getSmartContractLibPath = (value: string) => getSmartContractLibBasePath(`src/${value}`); +export const getSmartContractPath = (value: string) => getSmartContractBasePath(`lib/${value}`); +export const getSmartContractLibPath = (value: string) => getSmartContractLibBasePath(`lib/${value}`); export const CONTRACTS_PATH = '/one/contracts'; 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..25f61cde19 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" + }, "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" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + }, "sideEffects": false } 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/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..3006fbfaf3 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -2,6 +2,20 @@ "name": "@neo-one/logger-config", "version": "2.3.0", "description": "NEO•ONE logging utility config", - "main": "./src/index", + "main": "./lib/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" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..d02c7435fe 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -2,14 +2,24 @@ "name": "@neo-one/logger", "version": "2.3.0", "description": "NEO•ONE logging utility", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/logger-config": "^2.3.0", "pino": "^5.12.6", - "pino-pretty": "^3.2.1" + "pino-pretty": "^3.2.1", + "tslib": "^1.10.0" }, "devDependencies": { - "@types/pino": "^5.8.9" + "@neo-one/build-tools": "^1.0.0", + "@types/pino": "^5.8.9", + "gulp": "~4.0.2" }, "sideEffects": false } 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/bin/neo-one-node.js b/packages/neo-one-node-bin/bin/neo-one-node.js new file mode 100644 index 0000000000..a864933205 --- /dev/null +++ b/packages/neo-one-node-bin/bin/neo-one-node.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/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..d7a08c2ca5 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -2,7 +2,16 @@ "name": "@neo-one/node-bin", "version": "2.3.1", "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" + }, "dependencies": { "@neo-one/logger": "^2.3.0", "@neo-one/node": "^2.3.1", @@ -10,16 +19,25 @@ "@neo-one/utils": "^2.3.0", "@neo-one/utils-node": "^2.3.0", "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/build-tools": "^1.0.0", "@neo-one/client": "^2.3.0", "@neo-one/client-common": "^2.3.0", + "@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", - "fs-extra": "^8.1.0" + "fs-extra": "^8.1.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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..4362e82e46 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,3 +1,5 @@ +/// + import { NEOONEDataProvider } from '@neo-one/client'; import fetch from 'cross-fetch'; import fs from 'fs-extra'; 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/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/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..d10439e32d 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-blockchain", "version": "2.3.0", "description": "NEO•ONE NEO blockchain implementation.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-switch": "^2.3.0", @@ -12,13 +19,16 @@ "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", + "@types/jest": "^24.0.18", "@types/js-priority-queue": "^0.0.5", - "@types/lodash": "^4.14.138" + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts index 324527d32b..03634394f4 100644 --- a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts @@ -461,7 +461,7 @@ export class WriteBatchBlockchain { private async persistUTXOTransactions( block: Block, - transactions: ReadonlyArray, + transactions: ReadonlyArray, lastGlobalTransactionIndex: BN, ): Promise { const inputs = []; @@ -837,7 +837,9 @@ export class WriteBatchBlockchain { _.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])), + .concat( + outputs.map<[UInt160, UInt256, BN]>(({ output }) => [output.address, output.asset, output.value]), + ), ([address]) => common.uInt160ToHex(address), ), ); @@ -988,7 +990,9 @@ export class WriteBatchBlockchain { 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 }))); + .concat( + claims.map((input) => ({ type: 'claim', input, hash: input.hash })), + ); const hashInputClaims = Object.entries(_.groupBy(inputClaims, ({ hash }) => common.uInt256ToHex(hash))); 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..e586717638 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" + }, "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": "^4.2.0", "regenerator-runtime": "^0.13.3" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + }, "sideEffects": false } 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..b273cc193c 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -3,6 +3,12 @@ "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" + }, "dependencies": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", @@ -14,12 +20,14 @@ "@neo-one/node-storage-levelup": "^2.3.0", "@neo-one/node-vm": "^2.3.0", "@neo-one/utils": "^2.3.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" 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/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..3130f799fe 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -2,21 +2,32 @@ "name": "@neo-one/node-consensus", "version": "2.3.0", "description": "NEO•ONE NEO consensus protocol.", - "main": "./src/index", + "main": "./lib/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": { "@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", "@reactivex/ix-es2015-cjs": "^2.5.3", + "@reactivex/ix-esnext-esm": "^2.5.3", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-consensus/src/Consensus.ts b/packages/neo-one-node-consensus/src/Consensus.ts index e082a2f3ab..d5d759a7ad 100644 --- a/packages/neo-one-node-consensus/src/Consensus.ts +++ b/packages/neo-one-node-consensus/src/Consensus.ts @@ -236,7 +236,7 @@ export class Consensus { this.mutableTimer = setTimeout( () => this.mutableQueue.write({ type: 'timer' }), mutableTimerSeconds * MS_IN_SECOND, - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-useless-cast ) as any; } diff --git a/packages/neo-one-node-consensus/src/common.ts b/packages/neo-one-node-consensus/src/common.ts index b782126d16..3429824f69 100644 --- a/packages/neo-one-node-consensus/src/common.ts +++ b/packages/neo-one-node-consensus/src/common.ts @@ -335,9 +335,9 @@ export const addTransaction = async ({ readonly transaction: Transaction; readonly verify: boolean; readonly consensusContext: ConsensusContext; -}): Promise< - Result -> => { +}): Promise> => { let context = contextIn; const { blockchain } = node; const tx = await blockchain.transaction.tryGet({ hash: transaction.hash }); 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/gulpfile.js b/packages/neo-one-node-core/gulpfile.js new file mode 100644 index 0000000000..95bf166030 --- /dev/null +++ b/packages/neo-one-node-core/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.compileTypescriptTask.options = { + stripInternal: true, +}; + +build.initialize(); diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index a720105ec2..7eef5f8d1b 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-core", "version": "2.3.0", "description": "NEO•ONE core node types.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-full-common": "^2.3.0", @@ -10,14 +17,17 @@ "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "through": "^2.3.8", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/through": "^0.0.29" + "@types/through": "^0.0.29", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-core/src/Account.ts b/packages/neo-one-node-core/src/Account.ts index d36a411807..3b0908ef51 100644 --- a/packages/neo-one-node-core/src/Account.ts +++ b/packages/neo-one-node-core/src/Account.ts @@ -154,7 +154,7 @@ export class Account extends BaseState 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 + // tslint:disable-next-line no-non-null-assertion no-unnecessary-type-assertion no-useless-cast value: JSONHelper.writeFixed8(value!), })), 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/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..29fceab52f 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-http-rpc", "version": "2.3.1", "description": "NEO•ONE RPC server.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/cli-common-node": "^2.4.0", "@neo-one/http": "^2.3.0", @@ -22,12 +29,14 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@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" + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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-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..d1307dc853 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-neo-settings", "version": "2.3.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/node-core": "^2.3.0", @@ -12,8 +19,10 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..e5fc7e7e68 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-network", "version": "2.3.0", "description": "NEO•ONE NEO network protocol.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-switch": "^2.3.0", "@neo-one/logger": "^2.3.0", @@ -12,7 +19,9 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/lodash": "^4.14.138" + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index 7c0e70a756..8e8977fc55 100644 --- a/packages/neo-one-node-network/src/Network.ts +++ b/packages/neo-one-node-network/src/Network.ts @@ -349,7 +349,7 @@ export class Network { 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) { 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/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..c6e07d4f28 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-offline", "version": "2.3.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/node-core": "^2.3.0", "@neo-one/utils": "^2.3.0", @@ -10,7 +17,9 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/lodash": "^4.14.138" + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..d55706d3c4 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-protocol", "version": "2.3.0", "description": "NEO•ONE NEO node and consensus protocol.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-switch": "^2.3.0", @@ -20,12 +27,15 @@ "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" + "@types/lru-cache": "^5.1.0", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-protocol/tsconfig.json b/packages/neo-one-node-protocol/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-protocol/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} 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..2074eb6701 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -2,15 +2,26 @@ "name": "@neo-one/node-rpc-handler", "version": "2.3.0", "description": "NEO•ONE RPC handler.", - "main": "./src/index", + "main": "./lib/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": { "@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", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..e55dc51e6f 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node-storage-cache", "version": "2.3.0", "description": "NEO•ONE node storage cache.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/node-core": "^2.3.0", @@ -12,7 +19,9 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/lru-cache": "^5.1.0" + "@neo-one/build-tools": "^1.0.0", + "@types/lru-cache": "^5.1.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..1c22f20e7d 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -2,12 +2,23 @@ "name": "@neo-one/node-storage-common", "version": "2.3.0", "description": "NEO•ONE node storage common.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/node-core": "^2.3.0", "@neo-one/utils": "^2.3.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..48d1f1d366 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -2,17 +2,29 @@ "name": "@neo-one/node-storage-levelup", "version": "2.3.0", "description": "NEO•ONE levelup node storage.", - "main": "./src/index", + "main": "./lib/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": { "@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", + "@types/levelup": "^3.1.1", "levelup": "^4.1.0", - "rxjs": "^6.5.2", + "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", + "gulp": "~4.0.2", "memdown": "^5.0.0" }, "sideEffects": false diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index e6ef7ecc5b..8a521f4311 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -28,13 +28,12 @@ import { convertChange } from './convertChange'; import { KeyNotFoundError } from './errors'; import * as read from './read'; -export const levelUpStorage = ({ - db, - context, -}: { +interface LevelUpStorageOptions { readonly db: LevelUp; readonly context: DeserializeWireContext; -}): Storage => { +} + +export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage => { const getHash = async ({ hashOrIndex }: HeaderKey): Promise => { let hash = hashOrIndex; if (typeof hash === 'number') { 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-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/package.json b/packages/neo-one-node-vm/package.json index 1c522a037e..8414d59baf 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -2,22 +2,33 @@ "name": "@neo-one/node-vm", "version": "2.3.0", "description": "NEO•ONE NEO VM.", - "main": "./src/index", + "main": "./lib/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": { "@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", + "@reactivex/ix-esnext-esm": "^2.5.3", "bitwise": "^2.0.3", "bn.js": "^5.0.0", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-node-vm/src/__tests__/execute.test.ts b/packages/neo-one-node-vm/src/__tests__/execute.test.ts index d82527fe84..36ac706d5c 100644 --- a/packages/neo-one-node-vm/src/__tests__/execute.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/execute.test.ts @@ -1317,9 +1317,9 @@ describe('execute', () => { }), }); - return ((result.stack[0] as ArrayContractParameter).value as ReadonlyArray).map( - ({ value }) => common.asUInt160(value), - ); + return ((result.stack[0] as ArrayContractParameter).value as ReadonlyArray< + ByteArrayContractParameter + >).map(({ value }) => common.asUInt160(value)); }; const transfer = async (from: UInt160, to: UInt160, amount: BN) => { diff --git a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts index 1cfc70a7bb..e43cf51efc 100644 --- a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts @@ -1315,7 +1315,10 @@ const OPCODES = ([ { op: 'CHECKMULTISIG', - args: [[keys[0].publicKey, keys[1].publicKey], [signature0, signature1]], + args: [ + [keys[0].publicKey, keys[1].publicKey], + [signature0, signature1], + ], result: [new BooleanStackItem(true)], mockTransaction: ({ transaction }) => { transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); @@ -1336,7 +1339,10 @@ const OPCODES = ([ { op: 'CHECKMULTISIG', - args: [[keys[0].publicKey, keys[2].publicKey, keys[1].publicKey], [signature0, signature1]], + args: [ + [keys[0].publicKey, keys[2].publicKey, keys[1].publicKey], + [signature0, signature1], + ], result: [new BooleanStackItem(true)], mockTransaction: ({ transaction }) => { diff --git a/packages/neo-one-node-vm/tsconfig-output.json b/packages/neo-one-node-vm/tsconfig-output.json new file mode 100644 index 0000000000..a12b8c8059 --- /dev/null +++ b/packages/neo-one-node-vm/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-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/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..5cb024fa11 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/node", "version": "2.3.1", "description": "NEO•ONE NEO full node.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-switch": "^2.3.0", "@neo-one/logger": "^2.3.0", @@ -22,10 +29,12 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/abstract-leveldown": "^5.0.1", "@types/fs-extra": "^8.0.0", "@types/leveldown": "^4.0.0", - "@types/levelup": "^3.1.1" + "@types/levelup": "^3.1.1", + "gulp": "~4.0.2" }, "sideEffects": false } 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/gulpfile.js b/packages/neo-one-react-common/gulpfile.js new file mode 100644 index 0000000000..0cad9e9036 --- /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: path.join('lib', '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..6567ae725e 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -2,10 +2,17 @@ "name": "@neo-one/react-common", "version": "2.3.0", "description": "NEO•ONE shared react.", - "main": "./src/index", + "main": "./lib/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": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", "@neo-one/react-core": "^2.3.0", "popper.js": "^1.15.0", "react": "^16.11.0", @@ -13,11 +20,16 @@ "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" + "@neo-one/build-tools": "^1.0.0", + "@types/node": "^12.7.7", + "@types/react": "^16.9.11", + "@types/react-dom": "^16.9.0", + "@types/react-select": "^3.0.0", + "gulp": "~4.0.2" }, "sideEffects": [ "*.css" 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/LoadingDots.tsx b/packages/neo-one-react-common/src/LoadingDots.tsx index 6974d3decd..85a85485f1 100644 --- a/packages/neo-one-react-common/src/LoadingDots.tsx +++ b/packages/neo-one-react-common/src/LoadingDots.tsx @@ -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/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..762ea59430 --- /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", "static/global.d.ts"] +} 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..aa198f3f4f 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -2,13 +2,26 @@ "name": "@neo-one/react-core", "version": "2.3.0", "description": "NEO•ONE shared react.", - "main": "./src/index", + "main": "./lib/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": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@types/react": "^16.9.11", "react": "^16.11.0", - "rxjs": "^6.5.2", - "styled-tools": "^1.7.1" + "rxjs": "^6.5.3", + "styled-tools": "^1.7.1", + "tslib": "^1.10.0" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..93bac8dc64 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -2,13 +2,25 @@ "name": "@neo-one/react", "version": "2.3.0", "description": "NEO•ONE React utilities.", - "main": "./src/index", + "main": "./lib/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" }, "peerDependencies": { + "@types/react": "^16.0.0", "react": "^16.0.0", "rxjs": "^6.0.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..902aab0200 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/smart-contract-codegen", "version": "2.3.1", "description": "NEO•ONE TypeScript smart contract codegen.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/cli-common": "^2.4.0", "@neo-one/client-common": "^2.3.0", @@ -11,11 +18,15 @@ "lodash": "^4.17.15", "prettier": "^1.18.2", "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" + "@types/prettier": "^1.18.2", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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/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..1424d9dfdc 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -2,16 +2,28 @@ "name": "@neo-one/smart-contract-compiler-node", "version": "2.3.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", - "main": "./src/index", + "main": "./lib/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": { + "@neo-one/smart-contract": "^2.3.0", + "@neo-one/smart-contract-lib": "^2.3.1", "@neo-one/utils": "^2.3.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.6.3" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/app-root-dir": "^0.1.0", - "@types/glob": "^7.1.1" + "@types/glob": "^7.1.1", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..a6db7fa094 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/smart-contract-compiler", "version": "2.3.0", "description": "NEO•ONE TypeScript smart contract compiler.", - "main": "./src/index", + "main": "./lib/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": { "@babel/code-frame": "^7.0.0", "@neo-one/client-common": "^2.3.0", @@ -17,22 +24,27 @@ "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.6.3" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@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", + "@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", + "gulp": "~4.0.2", "levelup": "^4.1.0", "memdown": "^5.0.0" }, 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..dc1e38a478 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,3 +1,5 @@ +/// + import { ABI, common, 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/compile/helper/contract/DeployHelper.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts index d341ec69c0..f9cf5fa3c8 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts @@ -45,7 +45,7 @@ export class DeployHelper extends Helper { sb.emitPushString(property, tsUtils.node.getName(property)); // [] sb.emitHelper(property, innerOptions, sb.helpers.putCommonStorage); - } else if (ts.isParameterPropertyDeclaration(property, property.parent)) { + } else if (ts.isParameterPropertyDeclaration(property)) { const name = tsUtils.node.getName(property); // [val] sb.scope.get(sb, property, sb.pushValueOptions(innerOptions), name); diff --git a/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts b/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts index 7b514d796d..d46732060a 100644 --- a/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts +++ b/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts @@ -335,7 +335,7 @@ export class ContractInfoProcessor { ts.isPropertyDeclaration(decl) || ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl) || - ts.isParameterPropertyDeclaration(decl, decl.parent) + ts.isParameterPropertyDeclaration(decl) ) ) { return undefined; 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/gulpfile.js b/packages/neo-one-smart-contract-lib/gulpfile.js new file mode 100644 index 0000000000..89b00f3052 --- /dev/null +++ b/packages/neo-one-smart-contract-lib/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.copyStaticTask.enabled = true; + +build.compileTypescriptTask.enabled = false; + +build.initialize(); diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 517297e269..a4f091361b 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -2,16 +2,23 @@ "name": "@neo-one/smart-contract-lib", "version": "2.3.1", "description": "NEO•ONE TypeScript common smart contracts.", - "main": "./src/index.ts", + "main": "./lib/index.ts", "smartContract": true, + "scripts": { + "build": "gulp", + "lint": "", + "pack": "gulp pack" + }, "dependencies": { "@neo-one/smart-contract": "^2.3.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", - "@neo-one/smart-contract-test": "^2.3.1", + "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", + "gulp": "~4.0.2", "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..054685def5 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -3,6 +3,12 @@ "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" + }, "dependencies": { "@neo-one/client-core": "^2.3.0", "@neo-one/local-browser": "^2.3.1", @@ -11,7 +17,11 @@ "@neo-one/smart-contract-test-common": "^2.3.1", "@neo-one/utils": "^2.3.0", "@neo-one/worker": "^2.3.0", + "core-js": "^3.2.1", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + }, "sideEffects": false } 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/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..4712010732 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/smart-contract-test-common", "version": "2.3.1", "description": "NEO•ONE TypeScript smart contract test harness common code.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/cli-common": "^2.4.0", "@neo-one/client-common": "^2.3.0", @@ -14,5 +21,9 @@ "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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/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..cbf2a55813 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -2,7 +2,14 @@ "name": "@neo-one/smart-contract-test", "version": "2.3.1", "description": "NEO•ONE TypeScript smart contract test harness.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/client-common": "^2.3.0", "@neo-one/client-core": "^2.3.0", @@ -16,8 +23,14 @@ "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@neo-one/smart-contract": "^2.3.0", + "@neo-one/smart-contract-lib": "^2.3.1", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/memdown": "^3.0.0" + "@types/memdown": "^3.0.0", + "bignumber.js": "^9.0.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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 99% 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..e669f3fda6 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; 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-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/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/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..745a6a034b 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -2,11 +2,22 @@ "name": "@neo-one/smart-contract-typescript-plugin", "version": "2.3.0", "description": "NEO•ONE TypeScript typescript plugin.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/smart-contract-compiler": "^2.3.0", "@neo-one/smart-contract-compiler-node": "^2.3.0", - "typescript": "^3.6.3" + "typescript": "3.6.3" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" }, "sideEffects": false } 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/gulpfile.js b/packages/neo-one-smart-contract/gulpfile.js new file mode 100644 index 0000000000..89b00f3052 --- /dev/null +++ b/packages/neo-one-smart-contract/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.copyStaticTask.enabled = true; + +build.compileTypescriptTask.enabled = false; + +build.initialize(); diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index f650018632..5ea5ac8655 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -2,7 +2,16 @@ "name": "@neo-one/smart-contract", "version": "2.3.0", "description": "NEO•ONE smart contract apis.", - "main": "./src/index.d.ts", + "main": "./lib/index.d.ts", + "scripts": { + "build": "gulp", + "lint": "", + "pack": "gulp pack" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "smartContract": true, "sideEffects": false -} +} \ No newline at end of file diff --git a/packages/neo-one-smart-contract/src/index.d.ts b/packages/neo-one-smart-contract/src/index.d.ts index b9adcdfb4b..b561fe5ef8 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] 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/gulpfile.js b/packages/neo-one-suite/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-suite/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json index 0dc393cffa..3bdae7075a 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -2,6 +2,12 @@ "name": "@neo-one/suite", "version": "2.3.1", "description": "NEO•ONE core dependencies for easy installation", + "scripts": { + "build": "", + "lint": "", + "lint:staged": "", + "pack": "gulp pack" + }, "dependencies": { "@neo-one/cli": "^2.4.0", "@neo-one/client": "^2.3.0", @@ -10,5 +16,9 @@ "@neo-one/smart-contract-test": "^2.3.1", "@neo-one/smart-contract-typescript-plugin": "^2.3.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + }, "sideEffects": false } 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..6c383d8768 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -2,14 +2,24 @@ "name": "@neo-one/ts-utils", "version": "2.3.0", "description": "NEO•ONE TypeScript utils.", - "main": "./src/index", + "main": "./lib/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": { "lodash": "^4.17.15", "source-map": "^0.7.3", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.6.3" }, "devDependencies": { - "@types/lodash": "^4.14.138" + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" }, "sideEffects": false } diff --git a/packages/neo-one-ts-utils/src/class_.ts b/packages/neo-one-ts-utils/src/class_.ts index 4cb2bbbd27..55df54d794 100644 --- a/packages/neo-one-ts-utils/src/class_.ts +++ b/packages/neo-one-ts-utils/src/class_.ts @@ -15,7 +15,7 @@ export function isClassProperty(node: ts.Node): node is ClassPropertyType { export type ClassInstancePropertyType = ClassPropertyType | ts.ParameterPropertyDeclaration; export function isClassInstanceProperty(node: ts.Node): node is ClassInstancePropertyType { - return (isClassProperty(node) || ts.isParameterPropertyDeclaration(node, node.parent)) && !modifier.isStatic(node); + return (isClassProperty(node) || ts.isParameterPropertyDeclaration(node)) && !modifier.isStatic(node); } export type ClassInstanceMemberType = ts.MethodDeclaration | ClassInstancePropertyType; @@ -80,7 +80,7 @@ export function getMembers(node: ts.ClassDeclaration | ts.ClassExpression): read let insertIndex = members.indexOf(ctor) + 1; // tslint:disable-next-line no-loop-statement for (const param of parametered.getParameters(ctor)) { - if (ts.isParameterPropertyDeclaration(param, param.parent)) { + if (ts.isParameterPropertyDeclaration(param)) { // tslint:disable-next-line no-array-mutation members.splice(insertIndex, 0, param); insertIndex += 1; 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/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..5579c50039 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -2,21 +2,35 @@ "name": "@neo-one/typescript-concatenator", "version": "2.3.0", "description": "NEO•ONE TypeScript Concatenator", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/ts-utils": "^2.3.0", "@neo-one/utils": "^2.3.0", "lodash": "^4.17.15", "toposort": "^2.0.2", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.6.3" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@neo-one/smart-contract-compiler-node": "^2.3.0", + "@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" + "gulp": "~4.0.2", + "yargs": "^14.2.0" }, "sideEffects": false } 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/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..0c3609e196 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -2,18 +2,29 @@ "name": "@neo-one/utils-node", "version": "2.3.0", "description": "NEO•ONE shared Nodejs utils.", - "main": "./src/index", + "main": "./lib/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": { "@neo-one/utils": "^2.3.0", "execa": "^3.2.0", "npm-package-arg": "^6.1.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/npm-package-arg": "^6.1.0", + "@types/jest": "^24.0.18", "@types/pino": "^5.8.9", - "@types/yargs": "^13.0.2" + "@types/yargs": "^13.0.3", + "gulp": "~4.0.2" }, "sideEffects": false } 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/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..9096509734 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -2,14 +2,28 @@ "name": "@neo-one/utils", "version": "2.3.0", "description": "NEO•ONE shared utils.", - "main": "./src/index", + "main": "./lib/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" + }, "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" + "@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.6.3" }, "sideEffects": false } 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/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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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..1cf3e4f301 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 @@ -2,8 +2,8 @@ "dependencies": { "@emotion/core": "10.0.22", "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", "@types/react": "16.9.9", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", 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/package.json b/packages/neo-one-website/package.json index 7850fd4e0c..753b153815 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -3,19 +3,31 @@ "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" + }, "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", "@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", + "cross-env": "^6.0.0", + "concurrently": "^4.1.2", + "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", @@ -35,31 +47,43 @@ "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-source-filesystem": "7.1.0", + "react-static-plugin-reach-router": "^7.2.2", "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", + "typescript": "3.6.3", + "tslib": "^1.10.0", + "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/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": "^16.9.11", "@types/react-dom": "^16.9.0", "@types/react-redux": "^7.1.1", - "@types/webpack": "^4.39.0" + "@types/webpack": "^4.39.0", + "@neo-one/client": "^2.3.0", + "@neo-one/react-core": "^2.3.0", + "bignumber.js":"^9.0.0", + "rxjs": "^6.5.3" }, "sideEffects": [ "src/polyfill.ts", diff --git a/packages/neo-one-website/src/components/Header.tsx b/packages/neo-one-website/src/components/Header.tsx index cf104d74ac..4c6e1bf3b6 100644 --- a/packages/neo-one-website/src/components/Header.tsx +++ b/packages/neo-one-website/src/components/Header.tsx @@ -26,10 +26,6 @@ const StyledToolbar = styled(Toolbar)` overflow-x: auto; } - ${ToolbarFocusable} { - outline: none; - } - @media (min-width: ${prop('theme.breakpoints.sm')}) { padding: 0 16px; } @@ -55,7 +51,10 @@ const NavigationLink = styled `color: ${color};`))}; + ${ifProp( + 'active', + withProp('theme.accent', (color) => `color: ${color};`), + )}; border-bottom: 5px solid ${ifProp('active', prop('theme.accent'), 'transparent')}; text-decoration: none; diff --git a/packages/neo-one-website/src/components/course/CourseHeader.tsx b/packages/neo-one-website/src/components/course/CourseHeader.tsx index ef2d29de77..430d8a3ffc 100644 --- a/packages/neo-one-website/src/components/course/CourseHeader.tsx +++ b/packages/neo-one-website/src/components/course/CourseHeader.tsx @@ -23,10 +23,6 @@ const StyledToolbar = styled(Toolbar)` grid-gap: 8px; padding: 0 8px; } - - ${/* sc-sel */ ToolbarFocusable as any} { - outline: none; - } `; const LogoLink = styled(RouterLink)` 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..3dd3ff8f5e 100644 --- a/packages/neo-one-website/src/components/course/chapter/NextButton.tsx +++ b/packages/neo-one-website/src/components/course/chapter/NextButton.tsx @@ -52,14 +52,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/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/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/utils/getReferences.ts b/packages/neo-one-website/src/utils/getReferences.ts index 827aea378c..9edcc8bfc0 100644 --- a/packages/neo-one-website/src/utils/getReferences.ts +++ b/packages/neo-one-website/src/utils/getReferences.ts @@ -360,15 +360,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..73fca908b7 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', + 'lib', + '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-worker/package.json b/packages/neo-one-worker/package.json index baf79c3f44..a192c3f18d 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" + }, "dependencies": { - "rxjs": "^6.5.2", + "core-js": "^3.2.1", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + }, "sideEffects": false } 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..f4a418d0e9 100644 --- a/renovate.json +++ b/renovate.json @@ -3,7 +3,6 @@ "schedule": ["after 1am and before 5am on every weekday", "every weekend"], "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..981bf55fa7 --- /dev/null +++ b/rush.json @@ -0,0 +1,376 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + "rushVersion": "5.17.2", + "yarnVersion": "1.19.1", + "nodeSupportedVersionRange": ">=10.13.0 <=12.10.0", + "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-common", + "projectFolder": "packages/neo-one-build-common", + "reviewCategory": "tools" + }, + { + "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 + }, + { + "packageName": "@neo-one/cli-common", + "projectFolder": "packages/neo-one-cli-common", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/cli-common-node", + "projectFolder": "packages/neo-one-cli-common-node", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client", + "projectFolder": "packages/neo-one-client", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-common", + "projectFolder": "packages/neo-one-client-common", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-core", + "projectFolder": "packages/neo-one-client-core", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-full", + "projectFolder": "packages/neo-one-client-full", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-full-common", + "projectFolder": "packages/neo-one-client-full-common", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-full-core", + "projectFolder": "packages/neo-one-client-full-core", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/client-switch", + "projectFolder": "packages/neo-one-client-switch", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/developer-tools", + "projectFolder": "packages/neo-one-developer-tools", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "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 + }, + { + "packageName": "@neo-one/http-context", + "projectFolder": "packages/neo-one-http-context", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "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 + }, + { + "packageName": "@neo-one/node-bin", + "projectFolder": "packages/neo-one-node-bin", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-blockchain", + "projectFolder": "packages/neo-one-node-blockchain", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "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 + }, + { + "packageName": "@neo-one/node-core", + "projectFolder": "packages/neo-one-node-core", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-http-rpc", + "projectFolder": "packages/neo-one-node-http-rpc", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-neo-settings", + "projectFolder": "packages/neo-one-node-neo-settings", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-network", + "projectFolder": "packages/neo-one-node-network", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-offline", + "projectFolder": "packages/neo-one-node-offline", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-protocol", + "projectFolder": "packages/neo-one-node-protocol", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-rpc-handler", + "projectFolder": "packages/neo-one-node-rpc-handler", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-storage-cache", + "projectFolder": "packages/neo-one-node-storage-cache", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-storage-common", + "projectFolder": "packages/neo-one-node-storage-common", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-storage-levelup", + "projectFolder": "packages/neo-one-node-storage-levelup", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node-vm", + "projectFolder": "packages/neo-one-node-vm", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/react", + "projectFolder": "packages/neo-one-react", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/react-common", + "projectFolder": "packages/neo-one-react-common", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/react-core", + "projectFolder": "packages/neo-one-react-core", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract", + "projectFolder": "packages/neo-one-smart-contract", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract-codegen", + "projectFolder": "packages/neo-one-smart-contract-codegen", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract-compiler", + "projectFolder": "packages/neo-one-smart-contract-compiler", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract-compiler-node", + "projectFolder": "packages/neo-one-smart-contract-compiler-node", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract-lib", + "projectFolder": "packages/neo-one-smart-contract-lib", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/smart-contract-test", + "projectFolder": "packages/neo-one-smart-contract-test", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "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": true + }, + { + "packageName": "@neo-one/smart-contract-typescript-plugin", + "projectFolder": "packages/neo-one-smart-contract-typescript-plugin", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/suite", + "projectFolder": "packages/neo-one-suite", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "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..34287f3459 100644 --- a/scripts/DockerfileNode +++ b/scripts/DockerfileNode @@ -3,73 +3,109 @@ 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 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/lib packages/neo-one-utils/lib/ +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/lib packages/neo-one-client-common/lib/ +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/lib packages/neo-one-client-full-common/lib/ +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/lib packages/neo-one-node-core/lib/ +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/lib packages/neo-one-node-vm/lib/ +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-client-switch/package.json packages/neo-one-client-switch/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/lib packages/neo-one-client-switch/lib/ +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/lib packages/neo-one-client-core/lib/ +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/lib packages/neo-one-react-core/lib/ +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/lib packages/neo-one-logger-config/lib/ +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/lib packages/neo-one-client-full-core/lib/ +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/lib packages/neo-one-react/lib/ +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/lib packages/neo-one-react-common/lib/ +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/lib packages/neo-one-logger/lib/ +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/lib packages/neo-one-cli-common/lib/ +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/lib packages/neo-one-cli-common-node/lib/ +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/lib packages/neo-one-http/lib/ +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/lib packages/neo-one-http-context/lib/ +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/lib packages/neo-one-node-rpc-handler/lib/ +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/lib packages/neo-one-node-consensus/lib/ +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/lib packages/neo-one-node-storage-common/lib/ +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/lib packages/neo-one-node-blockchain/lib/ +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/lib packages/neo-one-node-http-rpc/lib/ +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/lib packages/neo-one-node-network/lib/ +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/lib packages/neo-one-node-offline/lib/ +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/lib packages/neo-one-node-protocol/lib/ +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/lib packages/neo-one-node-storage-levelup/lib/ +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/lib packages/neo-one-node/lib/ +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/lib packages/neo-one-node-neo-settings/lib/ +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/lib packages/neo-one-utils-node/lib/ +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/lib packages/neo-one-node-bin/lib/ +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/common/temp/node_modules common/temp/node_modules/ + +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..c4d1c4b466 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -3,74 +3,109 @@ 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 mkdir -p /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/lib packages/neo-one-utils/lib/ +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/lib packages/neo-one-client-common/lib/ +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/lib packages/neo-one-client-full-common/lib/ +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/lib packages/neo-one-node-core/lib/ +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/lib packages/neo-one-node-vm/lib/ +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-client-switch/package.json packages/neo-one-client-switch/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/lib packages/neo-one-client-switch/lib/ +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/lib packages/neo-one-client-core/lib/ +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/lib packages/neo-one-react-core/lib/ +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/lib packages/neo-one-logger-config/lib/ +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/lib packages/neo-one-client-full-core/lib/ +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/lib packages/neo-one-react/lib/ +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/lib packages/neo-one-react-common/lib/ +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/lib packages/neo-one-logger/lib/ +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/lib packages/neo-one-cli-common/lib/ +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/lib packages/neo-one-cli-common-node/lib/ +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/lib packages/neo-one-http/lib/ +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/lib packages/neo-one-http-context/lib/ +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/lib packages/neo-one-node-rpc-handler/lib/ +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/lib packages/neo-one-node-consensus/lib/ +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/lib packages/neo-one-node-storage-common/lib/ +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/lib packages/neo-one-node-blockchain/lib/ +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/lib packages/neo-one-node-http-rpc/lib/ +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/lib packages/neo-one-node-network/lib/ +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/lib packages/neo-one-node-offline/lib/ +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/lib packages/neo-one-node-protocol/lib/ +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/lib packages/neo-one-node-storage-levelup/lib/ +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/lib packages/neo-one-node/lib/ +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/lib packages/neo-one-node-neo-settings/lib/ +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/lib packages/neo-one-utils-node/lib/ +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/lib packages/neo-one-node-bin/lib/ +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/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"] 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 index 1a767c6da8..43ab64a732 100755 --- a/scripts/try-publish +++ b/scripts/try-publish @@ -1,8 +1,8 @@ #!/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) +package=$(cat package.json | node ../../../common/temp/node_modules/.bin/json name) +version=$(cat package.json | node ../../../common/temp/node_modules/.bin/json version) published=$(npm info $package@$version version || echo "0") if [[ "$version" = "$published" ]]; then echo "⚠️ $package@$version is already published!" 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..b89e39db06 100644 --- a/wallaby.js +++ b/wallaby.js @@ -24,9 +24,9 @@ module.exports = function(wallaby) { 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('./build-configs/tsconfig.build.json').compilerOptions, + ...require('./build-configs/tsconfig.cjs.json').compilerOptions, + ...require('./build-configs/tsconfig.es2017.cjs.json').compilerOptions, ...require('./tsconfig.jest.json').compilerOptions, }), }, From b26cabd9dda358bd277fef3b78eca6338be9a147 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 3 Dec 2019 15:33:47 -0800 Subject: [PATCH 002/141] chore(deps): upgrade dependencies (#1896) --- .../update-deps_2019-12-03-22-14.json | 11 + .../cli/update-deps_2019-12-03-22-14.json | 11 + .../update-deps_2019-12-03-22-14.json | 11 + .../update-deps_2019-12-03-22-14.json | 11 + .../update-deps_2019-12-03-22-14.json | 11 + .../update-deps_2019-12-03-22-14.json | 11 + .../update-deps_2019-12-03-22-14.json | 11 + common/config/rush/common-versions.json | 16 + common/config/rush/yarn.lock | 1857 +++++++++-------- packages/neo-one-build-common/package.json | 28 - packages/neo-one-build-tools-web/package.json | 3 +- packages/neo-one-cli-common-node/package.json | 3 +- .../src/configuration.ts | 23 +- packages/neo-one-cli/package.json | 2 +- packages/neo-one-client-common/package.json | 2 +- packages/neo-one-client-switch/package.json | 14 +- .../package.json | 7 +- packages/neo-one-editor/package.json | 6 +- packages/neo-one-react-common/package.json | 4 +- packages/neo-one-react-core/package.json | 2 +- packages/neo-one-utils-node/package.json | 2 +- packages/neo-one-website/package.json | 8 +- rush.json | 5 - 23 files changed, 1103 insertions(+), 956 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json create mode 100644 common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json delete mode 100644 packages/neo-one-build-common/package.json diff --git a/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..82aafa8273 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "update cosmicconfig to 6.0.0", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..f4d9327066 --- /dev/null +++ b/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "update @types/react to 16.9.14", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..21e0f1d19a --- /dev/null +++ b/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "update scrypt-js to 3.0.0", + "type": "patch" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..76976aa543 --- /dev/null +++ b/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-switch", + "comment": "update @opencensus packages to 0.0.19", + "type": "patch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..341d6dc345 --- /dev/null +++ b/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-common", + "comment": "update @types/react to 16.9.14 and @types/react-dom to 16.9.4", + "type": "patch" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..4ad061a7de --- /dev/null +++ b/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-core", + "comment": "update @types/react to 16.9.14", + "type": "patch" + } + ], + "packageName": "@neo-one/react-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json new file mode 100644 index 0000000000..472750a83f --- /dev/null +++ b/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils-node", + "comment": "update npm-package-arg to 7.0.0", + "type": "patch" + } + ], + "packageName": "@neo-one/utils-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index f26790c5aa..56f06d6bf3 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -1,6 +1,22 @@ { "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json", "preferredVersions": { + "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.6.3" }, "implicitlyPreferredVersions": true, diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index da1d4401b5..6187217be7 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -10,11 +10,11 @@ tslib "^1.9.0" "@babel/cli@^7.5.5": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.0.tgz#8d10c9acb2acb362d7614a9493e1791c69100d89" - integrity sha512-jECEqAq6Ngf3pOhLSg7od9WKyrIacyh1oNNYtRXNn+ummSHCTXBamGywOAtiae34Vk7zKuQNnLvo2BKTMCoV4A== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.4.tgz#38804334c8db40209f88c69a5c90998e60cca18b" + integrity sha512-O7mmzaWdm+VabWQmxuM8hqNrWGGihN83KfhPUzp2lAW4kzIMwBxujXkZbD4fMwKMYY9FXTbDvXsJqU+5XHXi4A== 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" @@ -33,17 +33,17 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.5.5", "@babel/core@^7.6.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" - integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" + integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helpers" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.7.2" + "@babel/generator" "^7.7.4" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" @@ -63,140 +63,140 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.4.0", "@babel/generator@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" - integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== +"@babel/generator@^7.4.0", "@babel/generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" + integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== dependencies: - "@babel/types" "^7.7.2" + "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" - integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg== +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz#32dd9551d6ed3a5fc2edc50d6912852aa18274d9" - integrity sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-builder-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz#c6b8254d305bacd62beb648e4dea7d3ed79f352d" - integrity sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A== +"@babel/helper-builder-react-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" + integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.4.4": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz#df8942452c2c1a217335ca7e393b9afc67f668dc" - integrity sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: - "@babel/helper-hoist-variables" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz#bcdc223abbfdd386f94196ae2544987f8df775e8" - integrity sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" -"@babel/helper-create-regexp-features-plugin@^7.7.0": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz#6f20443778c8fce2af2ff4206284afc0ced65db6" - integrity sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ== +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== dependencies: "@babel/helper-regex" "^7.4.4" regexpu-core "^4.6.0" -"@babel/helper-define-map@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529" - integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA== +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz#db2a6705555ae1f9f33b4b8212a546bc7f9dc3ef" - integrity sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg== +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== dependencies: - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" - integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: - "@babel/helper-get-function-arity" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-get-function-arity@^7.0.0", "@babel/helper-get-function-arity@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" - integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-hoist-variables@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81" - integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a" - integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d" - integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786" - integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ== - dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-simple-access" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" +"@babel/helper-module-transforms@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" + integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365" - integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg== +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== dependencies: - "@babel/types" "^7.7.0" + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -210,60 +210,60 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7" - integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-wrap-function" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-replace-supers@^7.5.5", "@babel/helper-replace-supers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512" - integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-simple-access@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d" - integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-split-export-declaration@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" - integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-wrap-function@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74" - integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helpers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" - integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/highlight@^7.0.0": version "7.5.0" @@ -279,462 +279,462 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.54.tgz#c01aa63b57c9c8dce8744796c81d9df121f20db4" integrity sha1-wBqmO1fJyNzodEeWyB2d8SHyDbQ= -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" - integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== -"@babel/plugin-proposal-async-generator-functions@^7.2.0", "@babel/plugin-proposal-async-generator-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971" - integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA== +"@babel/plugin-proposal-async-generator-functions@^7.2.0", "@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" "@babel/plugin-proposal-class-properties@^7.5.0", "@babel/plugin-proposal-class-properties@^7.5.5": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz#ac54e728ecf81d90e8f4d2a9c05a890457107917" - integrity sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-dynamic-import@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f" - integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ== +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" "@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.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.7.4.tgz#890de3c0c475374638292df31f6582160b54d639" + integrity sha512-1t6dh7BHYUz4zD1m4pozYYEZy/3m8dgOr9owx3r0mPPI3iGKRUKUbIxfYmcJ4hwljs/dhd0qOTr1ZDUp43ix+w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.2.0" + "@babel/plugin-syntax-export-default-from" "^7.7.4" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" "@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== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.7.4.tgz#7819a17445f4197bb9575e5750ed349776da858a" + integrity sha512-CG605v7lLpVgVldSY6kxsN9ui1DxFOyepBfuX2AzU2TNriMAYApoU55mrGw9Jr4TlrTzPCG10CL8YXyi+E/iPw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-numeric-separator" "^7.2.0" + "@babel/plugin-syntax-numeric-separator" "^7.7.4" -"@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-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" + integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@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-optional-catch-binding@^7.2.0", "@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" "@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== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz#3f04c2de1a942cbd3008324df8144b9cbc0ca0ba" + integrity sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.2.0" + "@babel/plugin-syntax-optional-chaining" "^7.7.4" -"@babel/plugin-proposal-unicode-property-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d" - integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw== +"@babel/plugin-proposal-unicode-property-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" + integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.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-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.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-export-default-from@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.7.4.tgz#897f05808298060b52873fa804ff853540790ea1" + integrity sha512-j888jpjATLEzOWhKawq46UrpXnCRDbdhBd5io4jgwjJ3+CHHGCRb6PNAVEgs+BXIb+dNRAmnkv36zfB992PRVw== dependencies: "@babel/helper-plugin-utils" "^7.0.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-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" + integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== dependencies: "@babel/helper-plugin-utils" "^7.0.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-numeric-separator@^7.2.0", "@babel/plugin-syntax-numeric-separator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.7.4.tgz#39818f8042a09d4c6248d85d82555369da4da5c4" + integrity sha512-vmlUUBlLuFnbpaR+1kKIdo62xQEN+THWbtAHSEilo+0rHl2dKKCn6GLUVKpI848wL/T0ZPQgAy8asRJ9yYEjog== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.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-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-optional-chaining@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" + integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-top-level-await@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d" - integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA== +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.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-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" + integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== dependencies: "@babel/helper-plugin-utils" "^7.0.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-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492" - integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw== +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: - "@babel/helper-module-imports" "^7.7.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" -"@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-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a" - integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA== +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-define-map" "^7.7.0" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" 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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b" - integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA== +"@babel/plugin-transform-dotall-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" + integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a" - integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA== +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: - "@babel/helper-function-name" "^7.7.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" + integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0", "@babel/plugin-transform-modules-commonjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" - integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== +"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0", "@babel/plugin-transform-modules-commonjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" + integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== dependencies: - "@babel/helper-module-transforms" "^7.7.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.0" + "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417" - integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg== +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: - "@babel/helper-hoist-variables" "^7.7.0" + "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966" - integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA== +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: - "@babel/helper-module-transforms" "^7.7.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf" - integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-replace-supers" "^7.7.4" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" + integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" + integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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-self@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" + integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@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-source@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" + integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz#834b0723ba78cd4d24d7d629300c2270f516d0b7" - integrity sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ== +"@babel/plugin-transform-react-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" + integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== dependencies: - "@babel/helper-builder-react-jsx" "^7.7.0" + "@babel/helper-builder-react-jsx" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-regenerator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc" - integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg== +"@babel/plugin-transform-regenerator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" + integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== dependencies: regenerator-transform "^0.14.0" -"@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-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@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.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz#51fe458c1c1fa98a8b07934f4ed38b6cd62177a6" + integrity sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" 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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript@^7.5.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz#eb9f14c516b5d36f4d6f3a9d7badae6d0fc313d4" - integrity sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" + integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/plugin-syntax-typescript" "^7.7.4" -"@babel/plugin-transform-unicode-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3" - integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA== +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/polyfill@^7.6.0": @@ -746,56 +746,56 @@ regenerator-runtime "^0.13.2" "@babel/preset-env@^7.0.0", "@babel/preset-env@^7.5.5", "@babel/preset-env@^7.6.3": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" - integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" + integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== dependencies: - "@babel/helper-module-imports" "^7.7.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.0" - "@babel/plugin-proposal-dynamic-import" "^7.7.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.7.0" - "@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-syntax-top-level-await" "^7.7.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.7.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.7.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.7.0" - "@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.7.0" - "@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.7.0" - "@babel/plugin-transform-modules-systemjs" "^7.7.0" - "@babel/plugin-transform-modules-umd" "^7.7.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" - "@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.7.0" - "@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.7.0" - "@babel/types" "^7.7.1" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.4" + "@babel/plugin-transform-modules-commonjs" "^7.7.4" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.4" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" @@ -803,15 +803,15 @@ semver "^5.5.0" "@babel/preset-react@^7.0.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.0.tgz#8ab0c4787d98cf1f5f22dabf115552bf9e4e406c" - integrity sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" + integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.7.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.7.4" + "@babel/plugin-transform-react-jsx" "^7.7.4" + "@babel/plugin-transform-react-jsx-self" "^7.7.4" + "@babel/plugin-transform-react-jsx-source" "^7.7.4" "@babel/preset-stage-0@^7.0.0": version "7.0.0" @@ -819,9 +819,9 @@ integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== "@babel/register@^7.5.5": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.0.tgz#4e23ecf840296ef79c605baaa5c89e1a2426314b" - integrity sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.4.tgz#45a4956471a9df3b012b747f5781cc084ee8f128" + integrity sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" @@ -830,45 +830,45 @@ source-map-support "^0.5.16" "@babel/runtime-corejs2@^7.2.0": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.2.tgz#5a8c4e2f8688ce58adc9eb1d8320b6e7341f96ce" - integrity sha512-GfVnHchOBvIMsweQ13l4jd9lT4brkevnavnVOej5g2y7PpTRY+R4pcQlCjWMZoUla5rMLFzaS/Ll2s59cB1TqQ== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.4.tgz#b9c2b1b5882762005785bc47740195a0ac780888" + integrity sha512-hKNcmHQbBSJFnZ82ewYtWDZ3fXkP/l1XcfRtm7c8gHPM/DMecJtFFBEp7KMLZTuHwwb7RfemHdsEnd7L916Z6A== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" "@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": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" - integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" + integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== dependencies: regenerator-runtime "^0.13.2" "@babel/standalone@^7.5.4": - version "7.7.3" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.7.3.tgz#9a4f7fc64876b11398e7371665969ccfdb0c9806" - integrity sha512-tVwxALbq7HGudHD0oZ6SQPkWM2L/Snw1vcbrtirDTqZsgswZ9xyuOOsSplqGtyazCCt9fidbymM47ZfYjASscg== + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.7.4.tgz#9adcda4b7c33627c65eacf87f5c1f950987294c2" + integrity sha512-7erMqY9K0uOsWERAJrKzOkG5BezlZw8s1Yez40PUJrf8XXPTebv/fO7555+5Hmo1kBiDQlf9FOkV6wc7wRQ19A== -"@babel/template@^7.4.0", "@babel/template@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" - integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== +"@babel/template@^7.4.0", "@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" - integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/types" "^7.7.2" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" @@ -882,10 +882,10 @@ lodash "^4.17.5" to-fast-properties "^2.0.0" -"@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.7.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" - integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== +"@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.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -1032,9 +1032,9 @@ integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== "@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" @@ -1045,17 +1045,17 @@ raf "^3.4.1" "@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.0.3" + resolved "https://registry.yarnpkg.com/@essentials/request-interval/-/request-interval-1.0.3.tgz#44c3b503554d04472e24709ddcc6fb6feaec8ead" + integrity sha512-rWDDMeSYUjVvdkg6pu2eTHCCKFLU9GeVDYN+R+MFG1WYGR/K/c/SKPz9/NMrqT1cSiS7znNJgkZoBClhc6R0RA== dependencies: performance-now "^2.1.0" raf "^3.4.1" "@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== + version "1.0.2" + resolved "https://registry.yarnpkg.com/@essentials/request-timeout/-/request-timeout-1.0.2.tgz#0fcb7d7ec186fcfc5f32685968407a2d51d6443d" + integrity sha512-P4pM8z1J9Ifj9SanjHyIuzV+AF/Ry6Coxm6foyza3aiDsweHME3t5sRrKv0ohpsmQLrmgt8XLlwFLPoAYLpq2Q== dependencies: performance-now "^2.1.0" raf "^3.4.1" @@ -1278,62 +1278,62 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@ledgerhq/devices@^4.74.2": - version "4.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.74.2.tgz#f7042c31b491ba3d9fad506ec6519674fd9c7474" - integrity sha512-EUA2S28DWWKvUs9XOIpdNZMU5HGyXIZU2nVr6Rr0yYvYTEuItuBSvtfot17rSoyYLwClOoNPHMqXAvrCmr/6hg== +"@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.74.2" + "@ledgerhq/errors" "^4.78.0" "@ledgerhq/logs" "^4.72.0" rxjs "^6.5.3" -"@ledgerhq/errors@^4.74.2": - version "4.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.74.2.tgz#586cfaed135354e94afda4e7ab2334abcdce187a" - integrity sha512-Y42pWQlxP0cD5av/UKXM0PXCL4knylP4lZ0BFMPDDqU8VTOWKhj92sWJJgb4beqU19i7uuEqqAeYbMMt1ubwpg== +"@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.74.2": - version "4.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.74.2.tgz#a1b49562bdb781b07ec85072e1eb80b648078fa3" - integrity sha512-ed2dApJWGEZFdLX4Z3wRAWKXiPloNpqE22KkehiBgDCMtiJBTCtI7cH97OgsjqAac9fEelUXplQIPLbYjiWlJQ== +"@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.74.2" - "@ledgerhq/errors" "^4.74.2" - "@ledgerhq/hw-transport" "^4.74.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.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.74.2.tgz#4880f5dada00b6af507275234086d198540d290a" - integrity sha512-wdNdr7oojIEj7EZjoJ5L+R7rdm1wTEMB7Sy+/cR2CwgEIn2L+qKhgUrBcpMeiU+SN3tKrTAzUZ2+ZcTSpY4GZA== - dependencies: - "@ledgerhq/devices" "^4.74.2" - "@ledgerhq/errors" "^4.74.2" - "@ledgerhq/hw-transport" "^4.74.2" - "@ledgerhq/hw-transport-node-hid-noevents" "^4.74.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.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.74.2.tgz#20946865204113eb4a586b2ac8d721730ee35bad" - integrity sha512-islCIL1HTnmSEj6V9U/f9TT9HHe9sviDuN3Ra0zK65cGaWqQa3Ni6wQil2wl7vNrEN7inwqAq5QOf3LzEFTOtg== + 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.74.2" - "@ledgerhq/hw-transport" "^4.74.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.74.2": - version "4.74.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.74.2.tgz#dc4874b77616b63419cee5eed746dc23183ab6ce" - integrity sha512-83SiHd7wuif/epq58n9kPFhqr/1zv9a13nDYFLinaUGvRrx5jGFvCq9HiS/WIPOeIHsnuStpqKQbpUDvlRlHKg== +"@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.74.2" - "@ledgerhq/errors" "^4.74.2" + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" events "^3.0.0" "@ledgerhq/logs@^4.72.0": @@ -1342,9 +1342,9 @@ integrity sha512-o+TYF8vBcyySRsb2kqBDv/KMeme8a2nwWoG+lAWzbDmWfb2/MrVWYCVYDYvjXdSoI/Cujqy1i0gIDrkdxa9chA== "@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" @@ -1573,7 +1573,7 @@ rxjs "^6.5.2" tslib "^1.10.0" -"@neotracker/core@1.3.1", "@neotracker/core@^1.3.1": +"@neotracker/core@1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.3.1.tgz#ae85cb951e9ce4328d9a80541231756fe8877a8f" integrity sha512-eIO7LB60bUdYY9nGu/xRSMd3gjYcsIeCz8sZA+7APuhmazcZTmgqnAQJvtRV1jLn5rwp2wq2hBMbC+MwL0P3lQ== @@ -1718,6 +1718,17 @@ shimmer "^1.2.0" uuid "^3.2.1" +"@opencensus/core@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.19.tgz#058a2885179bb9f89db7fa93b366a73e51c0c8dc" + integrity sha512-Y5QXa7vggMU0+jveLcworfX9jNnztix7x1NraAV0uGkTp4y46HrFl0DnNcnNxUDvBu/cYeWRwlmhiWlr9+adOQ== + dependencies: + continuation-local-storage "^3.2.1" + log-driver "^1.2.7" + semver "^6.0.0" + shimmer "^1.2.0" + uuid "^3.2.1" + "@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" @@ -1726,6 +1737,14 @@ "@opencensus/core" "^0.0.17" jaeger-client "~3.15.0" +"@opencensus/exporter-jaeger@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@opencensus/exporter-jaeger/-/exporter-jaeger-0.0.19.tgz#38abd5e791202b53c127b3e4f1b3d4ee3f1bcbf4" + integrity sha512-wlbPfTU8EhU7dhQMzMh8vJeHQ3GelEoAiMnKx53KtPjTi4Kl6jaLwizwxxiIWBc2P0QEANVWLyBR1pmazoQ/Jg== + dependencies: + "@opencensus/core" "^0.0.19" + jaeger-client "~3.17.0" + "@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" @@ -1735,6 +1754,15 @@ express "^4.16.3" prom-client "^11.1.1" +"@opencensus/exporter-prometheus@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@opencensus/exporter-prometheus/-/exporter-prometheus-0.0.19.tgz#b2f9b3d1a7b8019e3bad9f769b93bc76a2914a6b" + integrity sha512-htVWkHPCA7OO00t21MidSNHJ3+blLnXQkxx6P2reARvKg2bRn5d1RAkIK5sBbS6eHrIFkI21VWGGUtcFJlE6Dw== + dependencies: + "@opencensus/core" "^0.0.19" + express "^4.16.3" + prom-client "^11.1.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" @@ -1744,6 +1772,15 @@ extend "^3.0.2" require-in-the-middle "^4.0.0" +"@opencensus/nodejs-base@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@opencensus/nodejs-base/-/nodejs-base-0.0.19.tgz#69aad730543cb740b942928aea9d09c7d7971c13" + integrity sha512-pzhvCQv2HPVdhkazPf9U55pC9LU6jTvJjilWHI+3vnHXNOozDTGK/3UwIxvlLcwzi0K2qJ1ubOsHry38sanBtg== + dependencies: + "@opencensus/core" "^0.0.19" + extend "^3.0.2" + require-in-the-middle "^4.0.0" + "@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" @@ -1751,6 +1788,13 @@ dependencies: "@opencensus/core" "^0.0.16" +"@opencensus/propagation-tracecontext@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@opencensus/propagation-tracecontext/-/propagation-tracecontext-0.0.19.tgz#9776fd0528dfc3432cd40321cf1589a9733dcdca" + integrity sha512-6uO5VA744ESiwSswM5+ADR7NuDaopYHAhgasuKu2sLa4WYOkMHHZzAZ9gRcP+JHSQydwcKDgSlmfBx4QijdB+w== + dependencies: + "@opencensus/core" "^0.0.19" + "@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" @@ -1883,30 +1927,9 @@ "@render-props/throttle" "^0.1.15" "@render-props/utils" "^0.2.11" -"@rush-temp/build-common@file:./projects/build-common.tgz": - version "0.0.0" - resolved "file:./projects/build-common.tgz" - dependencies: - concurrently "^4.1.2" - cross-env "^6.0.0" - cypress "3.4.1" - cypress-plugin-retries "^1.2.2" - husky "^3.1.0" - json "^9.0.6" - 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" - "@rush-temp/build-tests@file:./projects/build-tests.tgz": version "0.0.0" - resolved "file:./projects/build-tests.tgz" + resolved "file:./projects/build-tests.tgz#6f99eb2211a10a6b490102fb0445c16fae0a7582" dependencies: "@babel/preset-env" "^7.6.3" app-root-dir "^1.0.2" @@ -1925,7 +1948,7 @@ "@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": version "0.0.0" - resolved "file:./projects/build-tools-web.tgz" + resolved "file:./projects/build-tools-web.tgz#93f353b907594c3bb83fac6673f3294ca32c9969" dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -1949,7 +1972,7 @@ "@types/gulp-replace" "^0.0.31" "@types/gulp-sourcemaps" "^0.0.32" "@types/lodash" "^4.14.138" - "@types/react" "^16.9.11" + "@types/react" "^16.9.14" "@types/webpack" "^4.39.0" "@types/webpack-bundle-analyzer" "^2.13.2" "@types/webpack-dev-server" "^3.1.7" @@ -1963,7 +1986,6 @@ babel-plugin-universal-import "^4.0.0" cache-loader "^4.1.0" compression-webpack-plugin "^3.0.0" - cross-env "^6.0.0" cssnano "^4.1.10" execa "^3.2.0" extract-css-chunks-webpack-plugin "4.6.0" @@ -2000,7 +2022,7 @@ "@rush-temp/build-tools@file:./projects/build-tools.tgz": version "0.0.0" - resolved "file:./projects/build-tools.tgz" + resolved "file:./projects/build-tools.tgz#a8955128cf020cd09e3e518553d0d996ca0a40eb" dependencies: "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -2047,14 +2069,13 @@ "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": version "0.0.0" - resolved "file:./projects/cli-common-node.tgz" + resolved "file:./projects/cli-common-node.tgz#49fcb8b3ad12a04cb9bb85ef74856c4789e8bc80" dependencies: - "@types/cosmiconfig" "^5.0.3" "@types/fs-extra" "^8.0.0" "@types/lodash" "^4.14.138" "@types/prompts" "^2.0.1" "@types/schema-utils" "^1.0.0" - cosmiconfig "^5.2.1" + cosmiconfig "^6.0.0" fs-extra "^8.1.0" gulp "~4.0.2" lodash "^4.17.15" @@ -2065,7 +2086,7 @@ "@rush-temp/cli-common@file:./projects/cli-common.tgz": version "0.0.0" - resolved "file:./projects/cli-common.tgz" + resolved "file:./projects/cli-common.tgz#b8c0646ce8db53d978aeb7119483f1a8f691fa4f" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2073,7 +2094,7 @@ "@rush-temp/cli@file:./projects/cli.tgz": version "0.0.0" - resolved "file:./projects/cli.tgz" + resolved "file:./projects/cli.tgz#6084f0004b6265d35d4860323aec095db5a15609" dependencies: "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" @@ -2085,7 +2106,7 @@ "@types/listr" "^0.14.2" "@types/lodash" "^4.14.138" "@types/prompts" "^2.0.1" - "@types/react" "^16.9.11" + "@types/react" "^16.9.14" "@types/yargs" "^13.0.3" bignumber.js "^9.0.0" bn.js "^5.0.0" @@ -2110,7 +2131,7 @@ "@rush-temp/client-common@file:./projects/client-common.tgz": version "0.0.0" - resolved "file:./projects/client-common.tgz" + resolved "file:./projects/client-common.tgz#7a9ae784ab31c5e9168262e34df717fbec254f74" dependencies: "@neo-one/ec-key" "^0.1.0" "@types/bn.js" "^4.11.5" @@ -2132,14 +2153,14 @@ lodash "^4.17.15" rxjs "^6.5.3" safe-stable-stringify "^1.1.0" - scrypt-js "^2.0.4" + scrypt-js "^3.0.0" 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" + resolved "file:./projects/client-core.tgz#87dcf2ed07068029d4d227f6d017a9b1dc8d1867" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2162,7 +2183,7 @@ "@rush-temp/client-full-common@file:./projects/client-full-common.tgz": version "0.0.0" - resolved "file:./projects/client-full-common.tgz" + resolved "file:./projects/client-full-common.tgz#16e0c1cffd76d1b33210e731b329892a4264c90f" dependencies: "@types/jest" "^24.0.18" gulp "~4.0.2" @@ -2170,7 +2191,7 @@ "@rush-temp/client-full-core@file:./projects/client-full-core.tgz": version "0.0.0" - resolved "file:./projects/client-full-core.tgz" + resolved "file:./projects/client-full-core.tgz#c95b6c1762e298e4ec30fd4fc336b6321f236365" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@types/bn.js" "^4.11.5" @@ -2185,24 +2206,24 @@ "@rush-temp/client-full@file:./projects/client-full.tgz": version "0.0.0" - resolved "file:./projects/client-full.tgz" + resolved "file:./projects/client-full.tgz#8d736690d0bd10044c8ec1ca3663723aeaa6d0a7" dependencies: gulp "~4.0.2" "@rush-temp/client-switch@file:./projects/client-switch.tgz": version "0.0.0" - resolved "file:./projects/client-switch.tgz" + resolved "file:./projects/client-switch.tgz#eb170163ba46b026297e4aea3a408da93358d1ba" dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" - "@opencensus/core" "^0.0.16" - "@opencensus/exporter-jaeger" "^0.0.17" - "@opencensus/exporter-prometheus" "^0.0.16" - "@opencensus/nodejs-base" "^0.0.16" - "@opencensus/propagation-tracecontext" "^0.0.16" - "@opencensus/web-core" "^0.0.6" + "@opencensus/core" "^0.0.19" + "@opencensus/exporter-jaeger" "^0.0.19" + "@opencensus/exporter-prometheus" "^0.0.19" + "@opencensus/nodejs-base" "^0.0.19" + "@opencensus/propagation-tracecontext" "^0.0.19" + "@opencensus/web-core" "^0.0.7" "@opencensus/web-propagation-tracecontext" "^0.0.7" - "@opencensus/web-types" "^0.0.6" + "@opencensus/web-types" "^0.0.7" "@types/babel__code-frame" "^7.0.1" "@types/ledgerhq__hw-transport" "^4.21.1" "@types/ledgerhq__hw-transport-node-hid" "^4.22.1" @@ -2218,13 +2239,13 @@ "@rush-temp/client@file:./projects/client.tgz": version "0.0.0" - resolved "file:./projects/client.tgz" + resolved "file:./projects/client.tgz#8703e8b33a230688c013e5924c77f33e14d270fc" 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" + resolved "file:./projects/developer-tools-frame.tgz#2335be1e92cf7d61fcf46558675e42b29e53dd4d" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2232,12 +2253,11 @@ "@reactivex/ix-esnext-esm" "^2.5.3" "@render-props/size-observer" "^0.1.18" "@types/lodash" "^4.14.138" - "@types/react" "^16.9.11" - "@types/react-dom" "^16.9.0" + "@types/react" "^16.9.14" + "@types/react-dom" "^16.9.4" "@types/react-select" "^3.0.0" bignumber.js "^9.0.0" core-js "^3.2.1" - cross-env "^6.0.0" date-fns "^2.0.0-beta.5" emotion-theming "^10.0.14" localforage "^1.7.3" @@ -2254,7 +2274,7 @@ "@rush-temp/developer-tools@file:./projects/developer-tools.tgz": version "0.0.0" - resolved "file:./projects/developer-tools.tgz" + resolved "file:./projects/developer-tools.tgz#e31f1fa3b9998e5a015888d2231e0fcf79ba4e24" dependencies: gulp "~4.0.2" resize-observer-polyfill "^1.5.0" @@ -2262,7 +2282,7 @@ "@rush-temp/editor-server@file:./projects/editor-server.tgz": version "0.0.0" - resolved "file:./projects/editor-server.tgz" + resolved "file:./projects/editor-server.tgz#9ab8b839d813b701d0a4c803130bf174a61e1c15" dependencies: "@types/graphlib" "^2.1.5" "@types/jest" "^24.0.18" @@ -2291,7 +2311,7 @@ "@rush-temp/editor@file:./projects/editor.tgz": version "0.0.0" - resolved "file:./projects/editor.tgz" + resolved "file:./projects/editor.tgz#ee83a209c063c2bcaf669890034ceae1ef3c800a" dependencies: "@babel/code-frame" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2316,8 +2336,8 @@ "@types/jest-matchers" "^20.0.2" "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" - "@types/react" "^16.9.11" - "@types/react-dom" "^16.9.0" + "@types/react" "^16.9.14" + "@types/react-dom" "^16.9.4" "@types/react-redux" "^7.1.1" "@types/resolve" "^0.0.8" "@types/webpack" "^4.39.0" @@ -2329,7 +2349,7 @@ fs-extra "^8.1.0" glob "^7.1.4" html-entities "^1.2.1" - immer "^4.0.0" + immer "^5.0.0" jest-circus "^24.9.0" jest-matchers "^20.0.3" jest-mock "^24.0.0" @@ -2362,7 +2382,7 @@ "@rush-temp/http-context@file:./projects/http-context.tgz": version "0.0.0" - resolved "file:./projects/http-context.tgz" + resolved "file:./projects/http-context.tgz#c2547b314ef0d96bee7614e1f19652e0993b8bd5" dependencies: "@types/koa" "^2.0.49" gulp "~4.0.2" @@ -2371,7 +2391,7 @@ "@rush-temp/http@file:./projects/http.tgz": version "0.0.0" - resolved "file:./projects/http.tgz" + resolved "file:./projects/http.tgz#c6ff4cba9e166dfa848f00cb9dbe0be579bed02c" dependencies: "@types/koa" "^2.0.49" "@types/koa-bodyparser" "^4.3.0" @@ -2386,7 +2406,7 @@ "@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/local-browser-worker.tgz" + resolved "file:./projects/local-browser-worker.tgz#dbd5b0898dad201cd0d64056d5df130bcfe82122" dependencies: "@types/nanoid" "^2.0.0" "@types/pouchdb" "^6.4.0" @@ -2399,7 +2419,7 @@ "@rush-temp/local-browser@file:./projects/local-browser.tgz": version "0.0.0" - resolved "file:./projects/local-browser.tgz" + resolved "file:./projects/local-browser.tgz#c68c577b35e90e02b19956363ef23c5b2e91cda7" dependencies: "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" @@ -2417,21 +2437,21 @@ "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" - resolved "file:./projects/local-singleton.tgz" + resolved "file:./projects/local-singleton.tgz#a4d04ed98bcefa5b806d0c271ec6766510949f10" 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" + resolved "file:./projects/logger-config.tgz#e08a99cfb217afcd1cede25260d95922c234a65d" 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" + resolved "file:./projects/logger.tgz#8af27e13c689f3943da2fe594333a740718f798d" dependencies: "@types/pino" "^5.8.9" gulp "~4.0.2" @@ -2441,7 +2461,7 @@ "@rush-temp/node-bin@file:./projects/node-bin.tgz": version "0.0.0" - resolved "file:./projects/node-bin.tgz" + resolved "file:./projects/node-bin.tgz#fc5ff4814a321514a9f995ce3fe8f002dfb08061" dependencies: "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" @@ -2461,7 +2481,7 @@ "@rush-temp/node-blockchain@file:./projects/node-blockchain.tgz": version "0.0.0" - resolved "file:./projects/node-blockchain.tgz" + resolved "file:./projects/node-blockchain.tgz#d20518db1940b20ab39d948522bc7aba77593755" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2476,7 +2496,7 @@ "@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/node-browser-worker.tgz" + resolved "file:./projects/node-browser-worker.tgz#261343813b17e7d56f4dd1492cac96964be154c3" dependencies: core-js "^3.2.1" file-loader "^4.2.0" @@ -2484,7 +2504,7 @@ "@rush-temp/node-browser@file:./projects/node-browser.tgz": version "0.0.0" - resolved "file:./projects/node-browser.tgz" + resolved "file:./projects/node-browser.tgz#2352edf5c53d5a264be276446d5fda85ea897383" dependencies: "@types/level-js" "^4.0.1" "@types/levelup" "^3.1.1" @@ -2497,7 +2517,7 @@ "@rush-temp/node-consensus@file:./projects/node-consensus.tgz": version "0.0.0" - resolved "file:./projects/node-consensus.tgz" + resolved "file:./projects/node-consensus.tgz#f20381174fde6c7777a08fc8941d821462b7501d" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2512,7 +2532,7 @@ "@rush-temp/node-core@file:./projects/node-core.tgz": version "0.0.0" - resolved "file:./projects/node-core.tgz" + resolved "file:./projects/node-core.tgz#34a056b4699f31625dc870c5fbd5b87f2ad02bbd" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2528,7 +2548,7 @@ "@rush-temp/node-http-rpc@file:./projects/node-http-rpc.tgz": version "0.0.0" - resolved "file:./projects/node-http-rpc.tgz" + resolved "file:./projects/node-http-rpc.tgz#0c690e5bd3bb77611537b43cebd8e4e1d98e7fb2" dependencies: "@types/koa" "^2.0.49" "@types/koa-compose" "^3.2.4" @@ -2549,7 +2569,7 @@ "@rush-temp/node-neo-settings@file:./projects/node-neo-settings.tgz": version "0.0.0" - resolved "file:./projects/node-neo-settings.tgz" + resolved "file:./projects/node-neo-settings.tgz#7ac891582213e5e1672b4dd60e19540bfac53d7c" dependencies: "@types/bn.js" "^4.11.5" "@types/lodash" "^4.14.138" @@ -2560,7 +2580,7 @@ "@rush-temp/node-network@file:./projects/node-network.tgz": version "0.0.0" - resolved "file:./projects/node-network.tgz" + resolved "file:./projects/node-network.tgz#96f6ebb39851613597d43d6d462fb3184e6cb1a7" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2569,7 +2589,7 @@ "@rush-temp/node-offline@file:./projects/node-offline.tgz": version "0.0.0" - resolved "file:./projects/node-offline.tgz" + resolved "file:./projects/node-offline.tgz#2314e4e5c424bfab64eb4e5267b8a1231d7caeb8" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2578,7 +2598,7 @@ "@rush-temp/node-protocol@file:./projects/node-protocol.tgz": version "0.0.0" - resolved "file:./projects/node-protocol.tgz" + resolved "file:./projects/node-protocol.tgz#3ab42dcee92ad02d429a48a595c0ae2e5845cbd1" dependencies: "@types/bloem" "^0.2.0" "@types/bloom-filter" "^0.2.0" @@ -2599,7 +2619,7 @@ "@rush-temp/node-rpc-handler@file:./projects/node-rpc-handler.tgz": version "0.0.0" - resolved "file:./projects/node-rpc-handler.tgz" + resolved "file:./projects/node-rpc-handler.tgz#f6d4a693a6c9cf45837865e69a0ebdd1179a56a9" dependencies: gulp "~4.0.2" rxjs "^6.5.3" @@ -2607,7 +2627,7 @@ "@rush-temp/node-storage-cache@file:./projects/node-storage-cache.tgz": version "0.0.0" - resolved "file:./projects/node-storage-cache.tgz" + resolved "file:./projects/node-storage-cache.tgz#62afadfd25a23e84d951ab6136ddc74b4b5f6a3b" dependencies: "@types/lru-cache" "^5.1.0" gulp "~4.0.2" @@ -2616,14 +2636,14 @@ "@rush-temp/node-storage-common@file:./projects/node-storage-common.tgz": version "0.0.0" - resolved "file:./projects/node-storage-common.tgz" + resolved "file:./projects/node-storage-common.tgz#2bf2a184288c5df4e8a043c33766f316bce31ca6" dependencies: 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" + resolved "file:./projects/node-storage-levelup.tgz#ac6dca3e8cea9117af50e4111142eddd81c1fde7" dependencies: "@types/jest" "^24.0.18" "@types/levelup" "^3.1.1" @@ -2636,7 +2656,7 @@ "@rush-temp/node-vm@file:./projects/node-vm.tgz": version "0.0.0" - resolved "file:./projects/node-vm.tgz" + resolved "file:./projects/node-vm.tgz#bdd3772a91f1b4629fb44930a732a4e2aa3b0188" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2652,7 +2672,7 @@ "@rush-temp/node@file:./projects/node.tgz": version "0.0.0" - resolved "file:./projects/node.tgz" + resolved "file:./projects/node.tgz#de5d5bec11d26b48f64fb7e2c80f474128fd56e4" dependencies: "@types/abstract-leveldown" "^5.0.1" "@types/fs-extra" "^8.0.0" @@ -2667,13 +2687,13 @@ "@rush-temp/react-common@file:./projects/react-common.tgz": version "0.0.0" - resolved "file:./projects/react-common.tgz" + resolved "file:./projects/react-common.tgz#01cb86acf4d703852ab707409bb77fedff486ab7" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" "@types/node" "^12.7.7" - "@types/react" "^16.9.11" - "@types/react-dom" "^16.9.0" + "@types/react" "^16.9.14" + "@types/react-dom" "^16.9.4" "@types/react-select" "^3.0.0" gulp "~4.0.2" popper.js "^1.15.0" @@ -2687,11 +2707,11 @@ "@rush-temp/react-core@file:./projects/react-core.tgz": version "0.0.0" - resolved "file:./projects/react-core.tgz" + resolved "file:./projects/react-core.tgz#189507d7a5101e9bc1a89ea7653c0cd66cb071df" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" - "@types/react" "^16.9.11" + "@types/react" "^16.9.14" gulp "~4.0.2" react "^16.11.0" rxjs "^6.5.3" @@ -2700,7 +2720,7 @@ "@rush-temp/react@file:./projects/react.tgz": version "0.0.0" - resolved "file:./projects/react.tgz" + resolved "file:./projects/react.tgz#776b9b2de12a7059f25c7a1fbbf5218e85ff07ca" dependencies: "@types/react" "^16.0.0" gulp "~4.0.2" @@ -2710,7 +2730,7 @@ "@rush-temp/smart-contract-codegen@file:./projects/smart-contract-codegen.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-codegen.tgz" + resolved "file:./projects/smart-contract-codegen.tgz#f64ba61d3ca51d12dd1d2f9c8449b5df31dcb63e" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2724,7 +2744,7 @@ "@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" + resolved "file:./projects/smart-contract-compiler-node.tgz#d04f34264edeb0106339e4685949985860f81000" dependencies: "@types/app-root-dir" "^0.1.0" "@types/glob" "^7.1.1" @@ -2736,7 +2756,7 @@ "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-compiler.tgz" + resolved "file:./projects/smart-contract-compiler.tgz#51575797f52cb76c34f876ae56c3222ffa09f476" dependencies: "@babel/code-frame" "^7.0.0" "@types/app-root-dir" "^0.1.0" @@ -2760,7 +2780,7 @@ "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-lib.tgz" + resolved "file:./projects/smart-contract-lib.tgz#f8e3167515a43303abd956811f13f64416dd3851" dependencies: "@types/jest" "^24.0.18" bignumber.js "^9.0.0" @@ -2769,14 +2789,14 @@ "@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" + resolved "file:./projects/smart-contract-test-browser.tgz#6d06c607a6da418f3647bf9b3e4ef49ae2d67e19" dependencies: core-js "^3.2.1" tslib "^1.10.0" "@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" + resolved "file:./projects/smart-contract-test-common.tgz#d67deb5579084662fb66beb1dcb208c37a9c68e0" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2784,7 +2804,7 @@ "@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-test.tgz" + resolved "file:./projects/smart-contract-test.tgz#1c86383657df540ef7df6c741756c57992070319" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2797,26 +2817,26 @@ "@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" + resolved "file:./projects/smart-contract-typescript-plugin.tgz#9f3492020cbebd2ddaa1558f2fc3952e391d5d39" dependencies: gulp "~4.0.2" typescript "3.6.3" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" - resolved "file:./projects/smart-contract.tgz" + resolved "file:./projects/smart-contract.tgz#e2dda84ffab87ea38b2c27e856e75b03daae4e0a" dependencies: gulp "~4.0.2" "@rush-temp/suite@file:./projects/suite.tgz": version "0.0.0" - resolved "file:./projects/suite.tgz" + resolved "file:./projects/suite.tgz#bb0dd3756584f9a24cde10161946952dd27498fd" dependencies: gulp "~4.0.2" "@rush-temp/ts-utils@file:./projects/ts-utils.tgz": version "0.0.0" - resolved "file:./projects/ts-utils.tgz" + resolved "file:./projects/ts-utils.tgz#e28e0e908af0b8a47b6477a6d64a390f29c1112f" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2827,7 +2847,7 @@ "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" - resolved "file:./projects/typescript-concatenator.tgz" + resolved "file:./projects/typescript-concatenator.tgz#2e1fe20e5e5e933f6796318d3814844140e8587c" dependencies: "@types/app-root-dir" "^0.1.0" "@types/fs-extra" "^8.0.0" @@ -2846,7 +2866,7 @@ "@rush-temp/utils-node@file:./projects/utils-node.tgz": version "0.0.0" - resolved "file:./projects/utils-node.tgz" + resolved "file:./projects/utils-node.tgz#55a5931de82e597bf4998e65f040f74994df2805" dependencies: "@types/jest" "^24.0.18" "@types/npm-package-arg" "^6.1.0" @@ -2854,14 +2874,14 @@ "@types/yargs" "^13.0.3" execa "^3.2.0" gulp "~4.0.2" - npm-package-arg "^6.1.0" + npm-package-arg "^7.0.0" pino "^5.12.6" tslib "^1.10.0" yargs "^14.2.0" "@rush-temp/utils@file:./projects/utils.tgz": version "0.0.0" - resolved "file:./projects/utils.tgz" + resolved "file:./projects/utils.tgz#b9c1503236d0266568dd21dcedffd98928c5908d" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2875,7 +2895,7 @@ "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" - resolved "file:./projects/website.tgz" + resolved "file:./projects/website.tgz#b3009bf51ed5bfad303764c5ee3bcb67621c26ec" dependencies: "@babel/runtime" "^7.6.3" "@emotion/core" "^10.0.22" @@ -2892,24 +2912,22 @@ "@types/modernizr" "^3.5.3" "@types/prismjs" "^1.16.0" "@types/reach__router" "^1.2.4" - "@types/react" "^16.9.11" - "@types/react-dom" "^16.9.0" + "@types/react" "^16.9.14" + "@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" - concurrently "^4.1.2" core-js "^3.2.1" - cross-env "^6.0.0" 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" @@ -2946,7 +2964,7 @@ "@rush-temp/worker@file:./projects/worker.tgz": version "0.0.0" - resolved "file:./projects/worker.tgz" + resolved "file:./projects/worker.tgz#1685cf4ac1b6e6d572c78e7ebf9c3534ae79bb1b" dependencies: core-js "^3.2.1" rxjs "^6.5.3" @@ -3123,13 +3141,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" @@ -3150,9 +3161,9 @@ "@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.40" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.40.tgz#0e6cb9b9bbd098031fa19e4b4e8131bc70e5de13" + integrity sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA== "@types/events@*": version "3.0.0" @@ -3433,9 +3444,9 @@ "@types/koa-send" "*" "@types/koa@*", "@types/koa@^2.0.49": - version "2.0.52" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.52.tgz#7dd11de4189ab339ad66c4ccad153716b14e525f" - integrity sha512-cp/GTOhOYwomlSKqEoG0kaVEVJEzP4ojYmfa7EKaGkmkkRwJ4B/1VBLbQZ49Z+WJNvzXejQB/9GIKqMo9XLgFQ== + version "2.11.0" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.0.tgz#394a3e9ec94f796003a6c8374b4dbc2778746f20" + integrity sha512-Hgx/1/rVlJvqYBrdeCsS7PDiR2qbxlMt1RnmNWD4Uxi5FF9nwkYqIldo7urjc+dfNpk+2NRGcnAYd4L5xEhCcQ== dependencies: "@types/accepts" "*" "@types/cookies" "*" @@ -3565,9 +3576,9 @@ "@types/node" "*" "@types/node-fetch@*": - version "2.5.3" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.3.tgz#b84127facd93642b1fb6439bc630ba0612e3ec50" - integrity sha512-X3TNlzZ7SuSwZsMkb5fV7GrPbVKvHc2iwHmslb8bIxRKWg2iqkfm3F/Wd79RhDpOXR7wCtKAwc5Y2JE6n/ibyw== + version "2.5.4" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.4.tgz#5245b6d8841fc3a6208b82291119bc11c4e0ce44" + integrity sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ== dependencies: "@types/node" "*" @@ -3579,14 +3590,14 @@ "@types/node" "*" "@types/node@*", "@types/node@>=6", "@types/node@^12.12.3", "@types/node@^12.6.9", "@types/node@^12.7.7": - version "12.12.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.11.tgz#bec2961975888d964196bf0016a2f984d793d3ce" - integrity sha512-O+x6uIpa6oMNTkPuHDa9MhMMehlxLAd5QcOvKRjAFsBVpeFWTOPnXbDvILvFgFFZfQ1xh1EZi1FbXxUix+zpsQ== + version "12.12.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" + integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== "@types/node@^11.11.6": - version "11.15.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.2.tgz#998b9cacc5f26e441d8396340818fde8e08aada5" - integrity sha512-BqCU9uIFkUH9Sgo2uLYbmIiFB1T+VBiM8AI/El3LIAI5KzwtckeSG+3WOYZr9aMoX4UIvRFBWBeSaOu6hFue2Q== + version "11.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.3.tgz#cb7f19846a83ac5a88fc22756b74633cdeb476a7" + integrity sha512-5RzvXVietaB8S4dwDjxjltAOHtTO87fiksjqjWGZih97j6KSrdCDaRfmYMNrgrLM87odGBrsTHAl6N3fLraQaw== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3765,9 +3776,9 @@ "@types/pouchdb-replication" "*" "@types/prettier@^1.18.2": - version "1.18.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.4.tgz#40bebad38700a2f785940f01bdc067276fd2f7b8" - integrity sha512-03H3ZfaayhhSwcE8YfYd2OWlUK2IaJYQO/7Q5DjhaU2PQw8OSoH/dl6dxdhTyA32aBg4+k+1EOCqb8czIeVY6Q== + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.0.tgz#a2502fb7ce9b6626fdbfc2e2a496f472de1bdd05" + integrity sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A== "@types/prismjs@^1.16.0": version "1.16.0" @@ -3807,7 +3818,7 @@ "@types/history" "*" "@types/react" "*" -"@types/react-dom@*", "@types/react-dom@^16.9.0": +"@types/react-dom@*", "@types/react-dom@^16.9.4": version "16.9.4" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df" integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw== @@ -3847,10 +3858,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.11": - version "16.9.11" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120" - integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ== +"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.14": + version "16.9.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.14.tgz#7f1158ce450b4b5aa83b1c5e1324fa75f348bdd1" + integrity sha512-Q4tW4RGmR+u/CgzR8VqZcsUWjP4Pz/LcHfs9AzSG+aBnwq8As3Bid3vG1eGGsXg/xuR2k2tqNlI8pzyV8kxe0g== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -4001,9 +4012,9 @@ "@types/webpack" "*" "@types/webpack-dev-server@^3.1.7": - 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== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#e31096477a88b0e54968cbc0d688dac9ba2c5442" + integrity sha512-4wXREDfUJmKTNcoaLLHjgsRHZhogIScXJPc5B6e5bYx16zd9H3WfM67w+mEgNaRxVCgb6YNnc8O2lX2IUn4zdQ== dependencies: "@types/connect-history-api-fallback" "*" "@types/express" "*" @@ -4305,9 +4316,9 @@ acorn@5.X, acorn@^5.0.3, acorn@^5.5.3: integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== 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== + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== acorn@^7.0.0, acorn@^7.1.0: version "7.1.0" @@ -4473,7 +4484,7 @@ 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: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== @@ -4620,9 +4631,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.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" + integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== argparse@^1.0.7: version "1.0.10" @@ -4920,12 +4931,12 @@ atob@^2.1.1: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.6.1: - version "9.7.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.2.tgz#26cf729fbb709323b40171a874304884dcceffed" - integrity sha512-LCAfcdej1182uVvPOZnytbq61AhnOZ/4JelDaJGDeNwewyU1AMaNthcHsyz1NRjTmd2FkurMckLWfkHg3Z//KA== + version "9.7.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" + integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== dependencies: - browserslist "^4.7.3" - caniuse-lite "^1.0.30001010" + browserslist "^4.8.0" + caniuse-lite "^1.0.30001012" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" @@ -4938,9 +4949,9 @@ 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.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== axios@^0.19.0: version "0.19.0" @@ -5136,9 +5147,9 @@ 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.7.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.7.0.tgz#f409a674cbbe548b60cbdf495ec059a2de429ab7" - integrity sha512-eV/9IWjmwT/TDCrNzA9sgO/j+x1dWAdLds7KLTY/emkLimzYbiXugfa0EO9IMkLeBBYvS0OdY+6pkF5VGf0iog== + version "2.7.1" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.7.1.tgz#ee294383c1a38f9d6535be3d89734824cb3ed415" + integrity sha512-HNM284amlKSQ6FddI4jLXD+XTqF0cTYOe5uemOIZxHJHnamC+OhFQ57rMF9sgnYhkJQptVl9U1SKVZsV9/GLQQ== dependencies: "@babel/runtime" "^7.7.2" cosmiconfig "^6.0.0" @@ -5685,11 +5696,16 @@ bluebird@3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= -bluebird@3.7.1, bluebird@^3.5.1, 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.1, bluebird@^3.5.5: + 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" @@ -5884,14 +5900,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.7.2, browserslist@^4.7.3: - version "4.7.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3" - integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ== +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" + integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== dependencies: - caniuse-lite "^1.0.30001010" - electron-to-chromium "^1.3.306" - node-releases "^1.1.40" + caniuse-lite "^1.0.30001012" + electron-to-chromium "^1.3.317" + node-releases "^1.1.41" bs-logger@0.x: version "0.2.6" @@ -6233,10 +6249,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001010: - version "1.0.30001011" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz#0d6c4549c78c4a800bb043a83ca0cbe0aee6c6e1" - integrity sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001012: + version "1.0.30001013" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001013.tgz#da2440d4d266a17d40eb79bd19c0c8cc1d029c72" + integrity sha512-hOAXaWKuq/UVFgYawxIOdPdyMQdYcwOCDOjnZcKn7wCgFUrhP7smuNZjGLuJlPSgE6aRA4cRJ+bGSrhtEt7ZAg== canonical-path@^1.0.0: version "1.0.0" @@ -6330,6 +6346,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" @@ -6755,11 +6779,16 @@ 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.16.0, commander@^2.18.0, commander@^2.20.0, commander@~2.20.3: 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@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" + integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -7021,11 +7050,11 @@ copy-to@^2.0.1: integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= core-js-compat@^3.1.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.1.tgz#e12c5a3ef9fcb50fd9d9a32805bfe674f9139246" - integrity sha512-YdeJI26gLc0CQJ9asLE5obEgBz2I0+CIgnoTbS2T0d5IPQw/OCgCIFR527RmpduxjrB3gSEHoGOCTq9sigOyfw== + version "3.4.7" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.7.tgz#39f8080b1d92a524d6d90505c42b9c5c1eb90611" + integrity sha512-57+mgz/P/xsGdjwQYkwtBZR3LuISaxD1dEwVDtbk8xJMqAmwqaxLOvnNT7kdJ7jYE/NjNptyzXi+IQFMi/2fCw== dependencies: - browserslist "^4.7.2" + browserslist "^4.8.0" semver "^6.3.0" core-js@^1.0.0: @@ -7039,9 +7068,9 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== core-js@^3.2.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.1.tgz#76dd6828412900ab27c8ce0b22e6114d7ce21b18" - integrity sha512-KX/dnuY/J8FtEwbnrzmAjUYgLqtk+cxM86hfG60LGiW3MmltIc2yAmDgBgEkfm0blZhUrdr1Zd84J2Y14mLxzg== + version "3.4.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.7.tgz#57c35937da80fe494fbc3adcf9cf3dc00eb86b34" + integrity sha512-qaPVGw30J1wQ0GR3GvoPqlGf9GZfKKF4kFC7kiHlcsPTqH3txrs9crCp3ZiMAXuSenhz89Jnl4GZs/67S5VOSg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -7460,9 +7489,11 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= cypress-plugin-retries@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.4.0.tgz#30477294a22e368c874d50dc282e657906080955" - integrity sha512-Pudna9+dn0wp3flUVWt1ttn6hKTnD1MIBUSznYkw+uRv3JPNJhxHIv9cfxrZmig49/R1fIyGBVNORchtnFedEw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.5.0.tgz#717cdfd7f2a8f07f218eb23e93ff6f7aa4c95029" + integrity sha512-nSJx4RkbeQFGjsymPWabn7i2GmxULUu9SqtiJqoVFa1XfVtQC1Uoogxj/zZzhrWYwYJ2183xslb9HqQV6bafFQ== + dependencies: + chalk "^3.0.0" cypress@3.4.1: version "3.4.1" @@ -7540,9 +7571,9 @@ date-fns@^1.27.2, date-fns@^1.30.1: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== date-fns@^2.0.0-beta.5: - version "2.8.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.8.0.tgz#628d865367e30e45747ed1e8b0c1572090b04f55" - integrity sha512-nbZMIMsoD7QiIKipZ5+XRTCtHZad1ch8OEkLaJxjGL6ThAK2IWAdjmAUAS7Fdz5fCaVWtqc+c8pAsN/MX8eaew== + version "2.8.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.8.1.tgz#2109362ccb6c87c3ca011e9e31f702bc09e4123b" + integrity sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg== dateformat@^2.0.0: version "2.2.0" @@ -7899,9 +7930,9 @@ detective@^5.2.0: minimist "^1.1.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.2" + resolved "https://registry.yarnpkg.com/dgeni-packages/-/dgeni-packages-0.28.2.tgz#04ad9a4e824942baba82a872452ea90d17be1c7f" + integrity sha512-W8GsMjILSPOfbjxyXgUD/T20isQ0ojw4HChrN6NwXIQtFJioNPRX4WeIOAZxw0S77S4vbXh4wfOs9wof5sIh+Q== dependencies: canonical-path "^1.0.0" catharsis "^0.8.1" @@ -8222,10 +8253,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.306: - version "1.3.307" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.307.tgz#e9b98901371d20164af7c0ca5bc820bd4305ccd3" - integrity sha512-01rTsAqHwf3D2X6NtlUvzB2hxDj67kiTVIO5GWdFb2unA0QvFvrjyrtc993ByRLF+surlr+9AvJdD0UYs5HzwA== +electron-to-chromium@^1.3.317: + version "1.3.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" + integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== elegant-spinner@^1.0.1: version "1.0.1" @@ -8233,9 +8264,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" @@ -8426,22 +8457,22 @@ error@^7.0.0: string-template "~0.2.1" 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== + version "1.16.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" + integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== 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" + has-symbols "^1.0.1" is-callable "^1.1.4" is-regex "^1.0.4" - object-inspect "^1.6.0" + object-inspect "^1.7.0" object-keys "^1.1.1" string.prototype.trimleft "^2.1.0" string.prototype.trimright "^2.1.0" -es-to-primitive@^1.2.0: +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== @@ -8451,12 +8482,12 @@ es-to-primitive@^1.2.0: 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.52" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.52.tgz#bb21777e919a04263736ded120a9d665f10ea63f" - integrity sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag== + 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.2" + es6-symbol "~3.1.3" next-tick "~1.0.0" es6-denodeify@^0.1.1: @@ -8490,7 +8521,7 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -es6-symbol@^3.1.1, es6-symbol@~3.1.2: +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== @@ -8693,9 +8724,9 @@ execa@^2.0.3: strip-final-newline "^2.0.0" execa@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.3.0.tgz#7e348eef129a1937f21ecbbd53390942653522c1" - integrity sha512-j5Vit5WZR/cbHlqU97+qcnw9WHRCIL4V1SVe75VcHcD1JRBdt8fv0zw89b7CQHQdUHTt2VjuhcF5ibAgVOxqpg== + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -8833,9 +8864,9 @@ ext-name@^5.0.0: sort-keys-length "^1.0.0" ext@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.2.0.tgz#8dd8d2dd21bcced3045be09621fa0cbf73908ba4" - integrity sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA== + 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" @@ -8896,7 +8927,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-css-chunks-webpack-plugin@4.6.0, extract-css-chunks-webpack-plugin@^4.6.0: +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== @@ -8907,6 +8938,17 @@ extract-css-chunks-webpack-plugin@4.6.0, extract-css-chunks-webpack-plugin@^4.6. webpack-external-import "^0.0.1-beta.19" webpack-sources "^1.1.0" +extract-css-chunks-webpack-plugin@^4.6.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.7.1.tgz#8bfb94463a8d31c80d88b9c419507c472d810657" + integrity sha512-dpcOJA3wQk4rbgbOGRXyK3Gjl+/Ng8miD162/0uol31Ld4PLnQqIMbKV6ju/gi+uwfZIQcBW3KW1pmfU0epmDg== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-external-import "^0.3.0-beta.0" + webpack-sources "^1.1.0" + extract-zip@1.6.7: version "1.6.7" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" @@ -8965,9 +9007,9 @@ fast-glob@^2.2.2: 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.1.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.1.tgz#87ee30e9e9f3eb40d6f254a7997655da753d7c82" + integrity sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -9111,12 +9153,12 @@ file-loader@3.0.1: 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== + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== dependencies: loader-utils "^1.2.3" - schema-utils "^2.0.0" + schema-utils "^2.5.0" file-type@^3.8.0: version "3.9.0" @@ -9849,11 +9891,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" @@ -10162,6 +10204,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" @@ -10174,7 +10221,7 @@ 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: +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== @@ -10428,11 +10475,18 @@ 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: +hosted-git-info@^2.1.4: 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@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.2.tgz#8b7e3bd114b59b51786f8bade0f39ddc80275a97" + integrity sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw== + dependencies: + lru-cache "^5.1.1" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -10725,10 +10779,10 @@ immediate@~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.0.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-5.0.0.tgz#07f462b7d95f7e86c214a861ecacd766d42b8c0a" + integrity sha512-G7gRqKbi9NE025XVyqyTV98dxUOtdKvu/P1QRaVZfA55aEcXgjbxPdm+TlWdcSMNPKijlaHNz61DGPyelouRlA== immutable@^3.8.2: version "3.8.2" @@ -11436,11 +11490,11 @@ 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-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -11472,9 +11526,9 @@ is-valid-glob@^1.0.0: integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= 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== + version "3.4.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.4.0.tgz#a9b3fe0c22f52d49efef977f640da44e65a3f866" + integrity sha512-oFdBRuSY9PocqPoUUseDXek4I+A1kWGigZGhuG+7GEkp0tRkek11adc0HbTEVsNvtojV7rp0uhf5LWtGvHzoOQ== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -11624,6 +11678,17 @@ jaeger-client@~3.15.0: uuid "^3.2.1" xorshift "^0.2.0" +jaeger-client@~3.17.0: + version "3.17.1" + resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.1.tgz#8fea09f832c2bbfb1ea6935f37424cc907164342" + integrity sha512-S3fS3vk7dcWTWUWGqMWD9fGa/diLhPIP9h0S8L+OQdz24+7hR7cdALk+AOZD1VzbvqUIQbj6uUELp31J4Frgcw== + 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" @@ -12413,15 +12478,15 @@ knex@^0.15.2: v8flags "^3.1.1" koa-better-body@^3.1.13: - version "3.1.15" - resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.1.15.tgz#c4c54497e4d3712c93c929a86c1df95ca4cc2ca6" - integrity sha512-PrQeSueLlWqnfr4wFIX8ljZbDJTDeR6xqyhekzIxXZc5Qc99DSkZ4HpAjo8idGyGNLK1kuywFQQYJY0OS0RwZg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.2.0.tgz#8e037c1e8b68c4cfa82920a7b53ce0ed25553b6d" + integrity sha512-raxYUJ/0O8UF4imhvJBv9/YDWTFnUb/XNshdOHGenHu4rE5K4QwXzA+8tpORlVIa4gDILOz+G9iX50wspZBJFg== 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@github:tunnckoCore/body-parsers#patch-1": version "3.1.0" resolved "https://codeload.github.com/tunnckoCore/body-parsers/tar.gz/7788b9cf82d84f90bbd543f8753affb82baf3a96" dependencies: @@ -12639,9 +12704,9 @@ level-iterator-stream@~4.0.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== + 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.0.1" immediate "~3.2.3" @@ -12650,9 +12715,9 @@ level-js@^4.0.0: 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== + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.1.tgz#c68f8e55c3331bcba1f5b448b5cc833f21c68628" + integrity sha512-Jse0/UP2qFl2YN8HISnxwQIRHNM3vJLafkTKjw4tZs9Vi8VGUFVmGvg/WMn5To/6KHyYJTXZvUzuouoaZuPGXA== dependencies: abstract-leveldown "~6.2.1" immediate "~3.2.3" @@ -12660,9 +12725,9 @@ level-js@^5.0.0: ltgt "^2.1.2" level-packager@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.0.tgz#9c01c6c8e2380d3196d61e56bd79c2eff4a9d5c3" - integrity sha512-3pbJmDgGvp/lUQNULPoYQZtUbhMI8KoViYDw7Sa0kWl1mPeHWWJF7T/9upWI/NTMuEikkEE/cd6wBvmrW1+ZnQ== + 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.3.0" levelup "^4.3.2" @@ -12797,9 +12862,9 @@ linkify-it@^2.0.0: uc.micro "^1.0.1" lint-staged@^9.4.1: - version "9.4.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.3.tgz#f55ad5f94f6e105294bfd6499b23142961f7b982" - integrity sha512-PejnI+rwOAmKAIO+5UuAZU9gxdej/ovSEOAY34yMfC3OS4Ac82vCBPzAWLReR9zCPOMqeVwQRaZ3bUBpAsaL2Q== + 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" @@ -13478,9 +13543,9 @@ memory-fs@^0.5.0: readable-stream "^2.0.1" 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" @@ -13967,9 +14032,9 @@ 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.13.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.13.0.tgz#e2f2ec444d0aca3ea1b3874b6de41d1665828f63" + integrity sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA== dependencies: semver "^5.4.1" @@ -14097,10 +14162,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.40: - version "1.1.40" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.40.tgz#a94facfa8e2d612302601ca1361741d529c4515a" - integrity sha512-r4LPcC5b/bS8BdtWH1fbeK88ib/wg9aqmg6/s3ngNLn2Ewkn/8J6Iw3P9RTlfIAdSdvYvQl2thCY5Y+qTAQ2iQ== +node-releases@^1.1.41: + version "1.1.41" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" + integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== dependencies: semver "^6.3.0" @@ -14216,12 +14281,12 @@ npm-conf@^1.1.0: config-chain "^1.1.11" pify "^3.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" @@ -14358,7 +14423,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: +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== @@ -14994,9 +15059,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" @@ -15196,9 +15261,9 @@ pino-std-serializers@^2.4.2: integrity sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ== pino@^5.12.6, pino@^5.13.2: - version "5.13.6" - resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.6.tgz#c7669cb02add833b3afa75e2dd8c6e4cb411295e" - integrity sha512-cYhvK4lopLnW/OtU3uRqBNsPiBt0Cdv97LGJg4yPGbGajlOjWWaODwD66q3Ynqnj6bSNw8HSofYcEOKZqh4Gcg== + version "5.14.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-5.14.0.tgz#eec56c6388797528e526f969ee022592cc538d4e" + integrity sha512-Vj1f2wAojTGesogT0hsA/ua8ALltCOBCcA1nkEoDfnTsVWpgBu5UVSY7OdjiGmrMOKHBm24nd3nKXzyPUYJ3ig== dependencies: fast-redact "^2.0.0" fast-safe-stringify "^2.0.7" @@ -15448,9 +15513,9 @@ postcss-modules-local-by-default@^2.0.6: postcss-value-parser "^3.3.1" 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.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" + integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -15929,9 +15994,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.5.0.tgz#47fd1292def7fdb1e138cd78afa8814cebcf7b13" + integrity sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA== pstree.remy@^1.1.7: version "1.1.7" @@ -17119,13 +17184,20 @@ 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" +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.13.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== + dependencies: + path-parse "^1.0.6" + responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -17234,9 +17306,9 @@ rollup-pluginutils@^2.4.1: estree-walker "^0.6.1" rollup@^1.21.4: - version "1.27.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.27.3.tgz#0e427d9bee9e30e6017e89b942d88276ce26f9e2" - integrity sha512-79AEh4m5NPCz97GTuIoXpSFIMPyk2AiqVQp040baSRPXk/I4YMGt5/CR9GX5oEYEkxwBZoWLheaS1/w/FidfJw== + version "1.27.8" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.27.8.tgz#94288a957af9f4c2380b73a17494d87705997d0f" + integrity sha512-EVoEV5rAWl+5clnGznt1KY8PeVkzVQh/R0d2s3gHEkN7gfoyC4JmvIVuCtPbYE8NM5Ep/g+nAmvKXBjzaqTsHA== dependencies: "@types/estree" "*" "@types/node" "*" @@ -17272,9 +17344,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs-tslint-rules@^4.24.3: - version "4.26.3" - resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.26.3.tgz#7d521fbff754022771ddf4b02199cea3d5864e57" - integrity sha512-SZM3AjmvHhEJ1tUtGB82i/KruhqxiDohBx7wdepQst5PnG76qp84NU7WSGzXFY0pK54rdS7iNU/oqJMcCu/Ssg== + version "4.27.1" + resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.27.1.tgz#9f646ba2f768672bfdc4b51fc0e6c1a062412db1" + integrity sha512-LMTT0QeGKqBI+oOcWhnKTclovHFL9NrzviNeDc+iPRJpNsvq8ZN/nBaWAhFhnNtqMLX2SgWrhCKJcW6lAyxAYA== dependencies: "@phenomnomnominal/tsquery" "^4.0.0" decamelize "^3.0.0" @@ -17362,10 +17434,10 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.4.1: - 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: + version "2.6.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" + integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== dependencies: ajv "^6.10.2" ajv-keywords "^3.4.1" @@ -17380,6 +17452,11 @@ scrypt-js@^2.0.4: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== +scrypt-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.0.tgz#52361c1f272eeaab09ec1f806ea82078bca58b15" + integrity sha512-7CC7aufwukEvqdmllR0ny0QaSg0+S22xKXrXz3ZahaV6J+fgD2YAtrjtImuoDWog17/Ty9Q4HBmnXEXJ3JkfQA== + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -17727,9 +17804,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" @@ -18418,6 +18495,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.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" @@ -18593,9 +18677,9 @@ terser-webpack-plugin@^1.4.1: worker-farm "^1.7.0" terser@^4.1.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.0.tgz#22c46b4817cf4c9565434bfe6ad47336af259ac3" - integrity sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA== + version "4.4.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" + integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -18979,9 +19063,9 @@ ts-invariant@^0.4.0: tslib "^1.9.3" ts-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" - integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== + version "24.2.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.2.0.tgz#7abca28c2b4b0a1fdd715cd667d65d047ea4e768" + integrity sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -19006,9 +19090,9 @@ ts-loader@^6.1.0: semver "^6.0.0" ts-node@^8.4.1: - version "8.5.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.2.tgz#434f6c893bafe501a30b32ac94ee36809ba2adce" - integrity sha512-W1DK/a6BGoV/D4x/SXXm6TSQx6q3blECUzd5TN+j56YEMX3yPVMpHsICLedUw3DvGF3aTQ8hfdR9AKMaHjIi+A== + version "8.5.4" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" + integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== dependencies: arg "^4.1.0" diff "^4.0.1" @@ -19229,9 +19313,9 @@ uglify-js@3.4.x: source-map "~0.6.1" uglify-js@^3.1.4: - version "3.6.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.9.tgz#85d353edb6ddfb62a9d798f36e91792249320611" - integrity sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" + integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== dependencies: commander "~2.20.3" source-map "~0.6.1" @@ -19471,13 +19555,13 @@ 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" @@ -19527,9 +19611,9 @@ urlgrey@^0.4.4: integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= usb@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.1.tgz#1cc6e82548f62135e2ddc13e0b351bb423d34e2a" - integrity sha512-iZRGRsdbCvhBpeufY+cpy7LS9OMrh1hobvHaxa6/HNr1mgqrfeNpfbzoRCBofkG9MpLsujKieBFzqdPWcMugYQ== + version "1.6.2" + resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.2.tgz#4ed7f0d8631c70192b33635f6a4e700d9e6bfe62" + integrity sha512-KcovLXRQuH63iEtnqXyDQGOi5dXHpLM5lZBIUsqSJQToua8nL2sVCieQTkzQBfLe5mCuvk40MgKciI61lgevWw== dependencies: bindings "^1.4.0" nan "2.13.2" @@ -19870,6 +19954,15 @@ webpack-external-import@^0.0.1-beta.19: loadjs "^3.6.1" scriptjs "^2.5.9" +webpack-external-import@^0.3.0-beta.0: + version "0.3.0-beta.0" + resolved "https://registry.yarnpkg.com/webpack-external-import/-/webpack-external-import-0.3.0-beta.0.tgz#bceccdafb9572931ee93ffa84e39eea9f6d15dca" + integrity sha512-58uSxZEi1Y2HGktQficlwSVHcvml1p6fpXrFEMEgi8nR/eLWlHcoYyILGRzZFSq8jfFqhAbHlm4fcnAIVA5Epg== + dependencies: + dimport "^1.0.0" + fs-extra "^8.1.0" + loadjs "^3.6.1" + webpack-flush-chunks@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/webpack-flush-chunks/-/webpack-flush-chunks-2.0.3.tgz#77a4f18d101f889ec33456a0c64a8c0f8b4600db" diff --git a/packages/neo-one-build-common/package.json b/packages/neo-one-build-common/package.json deleted file mode 100644 index 6c8a8e38c2..0000000000 --- a/packages/neo-one-build-common/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "@neo-one/build-common", - "version": "1.0.0", - "description": "Helper package to install script packages via Rush", - "scripts": { - "build": "", - "lint": "" - }, - "devDependencies": { - "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" - }, - "sideEffects": false -} diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index cdc8113c8f..95291034f0 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -57,7 +57,6 @@ "babel-plugin-universal-import": "^4.0.0", "cache-loader": "^4.1.0", "compression-webpack-plugin": "^3.0.0", - "cross-env": "^6.0.0", "cssnano": "^4.1.10", "execa": "^3.2.0", "extract-css-chunks-webpack-plugin": "4.6.0", @@ -100,7 +99,7 @@ "@types/gulp-replace": "^0.0.31", "@types/gulp-sourcemaps": "^0.0.32", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.11", + "@types/react": "^16.9.14", "@types/webpack": "^4.39.0", "@types/webpack-bundle-analyzer": "^2.13.2", "@types/webpack-dev-server": "^3.1.7", diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 5b0b58e304..e994fc028f 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -14,7 +14,7 @@ "@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", + "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", "prompts": "^2.2.1", @@ -24,7 +24,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/cosmiconfig": "^5.0.3", "@types/fs-extra": "^8.0.0", "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index c2c944da8d..43428e9193 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'; @@ -270,7 +271,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); @@ -318,17 +319,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/package.json b/packages/neo-one-cli/package.json index 6bf3014db6..21f85e77e7 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -63,7 +63,7 @@ "@types/listr": "^0.14.2", "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", - "@types/react": "^16.9.11", + "@types/react": "^16.9.14", "@types/yargs": "^13.0.3", "gulp": "~4.0.2", "react": "^16.11.0", diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 5ed98b9d1d..8b9b6bf012 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -22,7 +22,7 @@ "lodash": "^4.17.15", "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", - "scrypt-js": "^2.0.4", + "scrypt-js": "^3.0.0", "source-map": "^0.7.3", "tslib": "^1.10.0", "wif": "^2.0.6" diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 5d02a87d57..708ae3a80c 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -17,14 +17,14 @@ "@neo-one/client-common": "^2.3.0", "@neo-one/node-vm": "^2.3.0", "@neo-one/utils": "^2.3.0", - "@opencensus/core": "^0.0.16", - "@opencensus/exporter-jaeger": "^0.0.17", - "@opencensus/exporter-prometheus": "^0.0.16", - "@opencensus/nodejs-base": "^0.0.16", - "@opencensus/propagation-tracecontext": "^0.0.16", - "@opencensus/web-core": "^0.0.6", + "@opencensus/core": "^0.0.19", + "@opencensus/exporter-jaeger": "^0.0.19", + "@opencensus/exporter-prometheus": "^0.0.19", + "@opencensus/nodejs-base": "^0.0.19", + "@opencensus/propagation-tracecontext": "^0.0.19", + "@opencensus/web-core": "^0.0.7", "@opencensus/web-propagation-tracecontext": "^0.0.7", - "@opencensus/web-types": "^0.0.6", + "@opencensus/web-types": "^0.0.7", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", "source-map": "^0.7.3", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 4c42e7780d..fe945d55a8 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -40,10 +40,9 @@ "@neo-one/build-tools": "^1.0.0", "@neo-one/build-tools-web": "^1.0.0", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.9.0", - "@types/react-select": "^3.0.0", - "cross-env": "^6.0.0" + "@types/react": "^16.9.14", + "@types/react-dom": "^16.9.4", + "@types/react-select": "^3.0.0" }, "sideEffects": false } diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 26d1d25fdf..a0f90b5791 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -46,7 +46,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.4", "html-entities": "^1.2.1", - "immer": "^4.0.0", + "immer": "^5.0.0", "jest-circus": "^24.9.0", "jest-matchers": "^20.0.3", "jest-mock": "^24.0.0", @@ -88,8 +88,8 @@ "@types/jest-matchers": "^20.0.2", "@types/lodash": "^4.14.138", "@types/nanoid": "^2.0.0", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.9.0", + "@types/react": "^16.9.14", + "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/resolve": "^0.0.8", "@types/webpack": "^4.39.0" diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index 6567ae725e..b424500487 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -26,8 +26,8 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/node": "^12.7.7", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.9.0", + "@types/react": "^16.9.14", + "@types/react-dom": "^16.9.4", "@types/react-select": "^3.0.0", "gulp": "~4.0.2" }, diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index aa198f3f4f..27a163ff6d 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -13,7 +13,7 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@types/react": "^16.9.11", + "@types/react": "^16.9.14", "react": "^16.11.0", "rxjs": "^6.5.3", "styled-tools": "^1.7.1", diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 0c3609e196..ec54d52507 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -13,7 +13,7 @@ "dependencies": { "@neo-one/utils": "^2.3.0", "execa": "^3.2.0", - "npm-package-arg": "^6.1.0", + "npm-package-arg": "^7.0.0", "pino": "^5.12.6", "tslib": "^1.10.0", "yargs": "^14.2.0" diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 753b153815..57a6697c4c 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -22,8 +22,6 @@ "babel-plugin-emotion": "^10.0.21", "babel-plugin-universal-import": "^4.0.0", "clipboard": "^2.0.3", - "cross-env": "^6.0.0", - "concurrently": "^4.1.2", "core-js": "^3.2.1", "dgeni": "^0.4.12", "dgeni-packages": "^0.28.1", @@ -31,7 +29,7 @@ "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", @@ -76,8 +74,8 @@ "@types/modernizr": "^3.5.3", "@types/prismjs": "^1.16.0", "@types/reach__router": "^1.2.4", - "@types/react": "^16.9.11", - "@types/react-dom": "^16.9.0", + "@types/react": "^16.9.14", + "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/webpack": "^4.39.0", "@neo-one/client": "^2.3.0", diff --git a/rush.json b/rush.json index 981bf55fa7..75f32d9f9f 100644 --- a/rush.json +++ b/rush.json @@ -21,11 +21,6 @@ "postRushBuild": [] }, "projects": [ - { - "packageName": "@neo-one/build-common", - "projectFolder": "packages/neo-one-build-common", - "reviewCategory": "tools" - }, { "packageName": "@neo-one/build-tools", "projectFolder": "packages/neo-one-build-tools", From ad804175bf01f89cffe9885d94d3bb5e457dc81b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2019 09:12:00 -0800 Subject: [PATCH 003/141] fix(deps): update dependency @types/react to v16.9.14 (#1848) --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 1cf3e4f301..e8945c36d1 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.9", + "@types/react": "16.9.14", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", From f07431f11d088db3ec5dd044f9e6b205521548c1 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 5 Dec 2019 10:09:55 -0800 Subject: [PATCH 004/141] chore(deps): upgrade dependencies (#1909) --- actions/dockerhub/Dockerfile | 2 +- .../@neo-one/cli/master_2019-12-04-18-33.json | 11 + .../master_2019-12-04-18-33.json | 11 + .../client-core/master_2019-12-04-18-33.json | 11 + .../react-common/master_2019-12-04-18-33.json | 11 + .../react-core/master_2019-12-04-18-33.json | 11 + common/config/rush/command-line.json | 40 +- common/config/rush/yarn.lock | 437 ++++++++++-------- packages/neo-one-build-tests/package.json | 2 +- packages/neo-one-build-tools-web/package.json | 18 +- packages/neo-one-build-tools/package.json | 4 +- packages/neo-one-cli/package.json | 6 +- .../projects/ico-Js/codegen/client.js | 6 +- .../projects/ico-angular/codegen/client.ts | 6 +- .../projects/ico-angularJs/codegen/client.js | 6 +- .../projects/ico-vue/codegen/client.ts | 6 +- .../projects/ico-vueJs/codegen/client.js | 6 +- .../__data__/projects/ico/codegen/client.ts | 6 +- packages/neo-one-client-common/package.json | 2 +- packages/neo-one-client-core/package.json | 2 +- .../package.json | 6 +- packages/neo-one-editor/package.json | 12 +- .../neo-one-local-browser-worker/package.json | 2 +- .../neo-one-node-browser-worker/package.json | 2 +- packages/neo-one-react-common/package.json | 6 +- packages/neo-one-react-core/package.json | 4 +- .../0-tokenomics/2-launch/0-info/package.json | 2 +- .../2-launch/1-balance/package.json | 2 +- .../2-launch/2-participate/package.json | 2 +- .../2-launch/3-reactive/package.json | 2 +- .../2-launch/4-transfer/package.json | 2 +- .../2-launch/5-withdraw/package.json | 2 +- packages/neo-one-website/package.json | 10 +- 33 files changed, 377 insertions(+), 281 deletions(-) create mode 100644 common/changes/@neo-one/cli/master_2019-12-04-18-33.json create mode 100644 common/changes/@neo-one/client-common/master_2019-12-04-18-33.json create mode 100644 common/changes/@neo-one/client-core/master_2019-12-04-18-33.json create mode 100644 common/changes/@neo-one/react-common/master_2019-12-04-18-33.json create mode 100644 common/changes/@neo-one/react-core/master_2019-12-04-18-33.json diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index d80b13ba80..9d41325e76 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:1932552a0fc1717b0ac7de53ae9e14f910a0f80f956b88c19f00b41d9c22b0fd +FROM library/docker@sha256:6daea00729cf32ae7e01aa648d1dc47ce45e470e77f5119126e08ce602e79f81 COPY entrypoint.sh /entrypoint.sh diff --git a/common/changes/@neo-one/cli/master_2019-12-04-18-33.json b/common/changes/@neo-one/cli/master_2019-12-04-18-33.json new file mode 100644 index 0000000000..ad98b3f8ed --- /dev/null +++ b/common/changes/@neo-one/cli/master_2019-12-04-18-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update dependencies", + "type": "patch", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json b/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json new file mode 100644 index 0000000000..f5e0b49026 --- /dev/null +++ b/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update dependencies", + "type": "patch", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json b/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json new file mode 100644 index 0000000000..eb7748f6be --- /dev/null +++ b/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update dependencies", + "type": "patch", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json b/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json new file mode 100644 index 0000000000..f0cfda6ac4 --- /dev/null +++ b/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update dependencies", + "type": "patch", + "packageName": "@neo-one/react-common" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json b/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json new file mode 100644 index 0000000000..8bd8ed14bc --- /dev/null +++ b/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update dependencies", + "type": "patch", + "packageName": "@neo-one/react-core" + } + ], + "packageName": "@neo-one/react-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 8330551c08..8210ad534c 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -28,7 +28,7 @@ { "commandKind": "global", "name": "compile-overlay-dev", - "summary": "Compile overlay in dev mode", + "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/lib/compile --bundle overlay --watch" @@ -36,15 +36,15 @@ { "commandKind": "global", "name": "compile-test-runner-dev", - "summary": "Compile test-runner in dev mode", - "description": "Compile the NEO-ONE test-runner in dev mode", + "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/lib/compile --bundle testRunner --watch" }, { "commandKind": "global", "name": "compile-preview-dev", - "summary": "Compile preview in dev mode", + "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/lib/compile --bundle preview --watch" @@ -52,7 +52,7 @@ { "commandKind": "global", "name": "serve-server", - "summary": "Compile and serve editor server (only a dev mode)", + "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/lib/compile --watch --bundle server" @@ -60,16 +60,16 @@ { "commandKind": "global", "name": "serve-static-dev", - "summary": "Build and serve static with React Static in dev mode", - "description": "Build and serve NEO-ONE website with React Static in dev mode", + "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 in dev mode", - "description": "Compile the workers and overlay bundles in dev mode", + "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\"" }, @@ -77,14 +77,14 @@ "commandKind": "global", "name": "run-website-dev", "summary": "Run website in dev mode (run compile-website-dev first)", - "description": "Run the entire NEO-ONE website in dev mode", + "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", + "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/lib/compile --bundle workers" @@ -92,7 +92,7 @@ { "commandKind": "global", "name": "compile-overlay-prod", - "summary": "Compile overlay in dev mode", + "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/lib/compile --bundle overlay" @@ -100,16 +100,16 @@ { "commandKind": "global", "name": "serve-preview-prod", - "summary": "Compile and serve preview in prod mode", - "description": "Compile and serve the NEO-ONE editor preview in prod mode", + "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/lib/compile --bundle preview && serve dist/preview -p 8080" }, { "commandKind": "global", "name": "serve-test-runner-prod", - "summary": "Compile and serve test-runner in prod mode", - "description": "Compile and serve the NEO-ONE test-runner in prod mode", + "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/lib/compile --bundle testRunner && serve dist/testRunner -p 8081" }, @@ -124,16 +124,16 @@ { "commandKind": "global", "name": "compile-website-prod", - "summary": "Compile workers, overlay bundles in prod mode", - "description": "Compile the workers and overlay bundles in prod mode", + "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 mode (run compile-website-prod & link-root before, run unlink-root when done)", - "description": "Run the entire NEO-ONE website in prod mode", + "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\"" }, diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 6187217be7..cf9d2f461c 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1929,7 +1929,7 @@ "@rush-temp/build-tests@file:./projects/build-tests.tgz": version "0.0.0" - resolved "file:./projects/build-tests.tgz#6f99eb2211a10a6b490102fb0445c16fae0a7582" + resolved "file:./projects/build-tests.tgz#d72223165490f333b5e75327ff819663c4a0ca46" dependencies: "@babel/preset-env" "^7.6.3" app-root-dir "^1.0.2" @@ -1940,7 +1940,7 @@ fs-extra "^8.1.0" jest "^24.9.0" jest-circus "^24.9.0" - jest-junit "^8.0.0" + jest-junit "^10.0.0" lodash "^4.17.15" nyc "^14.1.1" tmp "^0.1.0" @@ -1948,7 +1948,7 @@ "@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": version "0.0.0" - resolved "file:./projects/build-tools-web.tgz#93f353b907594c3bb83fac6673f3294ca32c9969" + resolved "file:./projects/build-tools-web.tgz#9bf5478dd40e24f2a0e80088c972ddcef8b352ef" dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -1962,7 +1962,7 @@ "@babel/preset-react" "^7.0.0" "@babel/runtime" "^7.6.3" "@cypress/webpack-preprocessor" "^4.1.0" - "@types/autoprefixer" "^6.7.3" + "@types/autoprefixer" "^9.6.1" "@types/cssnano" "^4.0.0" "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -1972,7 +1972,7 @@ "@types/gulp-replace" "^0.0.31" "@types/gulp-sourcemaps" "^0.0.32" "@types/lodash" "^4.14.138" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" "@types/webpack" "^4.39.0" "@types/webpack-bundle-analyzer" "^2.13.2" "@types/webpack-dev-server" "^3.1.7" @@ -1988,30 +1988,30 @@ compression-webpack-plugin "^3.0.0" cssnano "^4.1.10" execa "^3.2.0" - extract-css-chunks-webpack-plugin "4.6.0" - file-loader "^4.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 "^1.4.0" + 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 "^1.19.3" + nodemon "^2.0.1" optimize-css-assets-webpack-plugin "^5.0.3" postcss-flexbugs-fixes "^4.1.0" - react "^16.11.0" + react "^16.12.0" rxjs "^6.5.3" stats-webpack-plugin "^0.7.0" - terser-webpack-plugin "^1.4.1" + 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.6.3" - url-loader "^2.1.0" + url-loader "^3.0.0" webpack "^4.40.2" webpack-bundle-analyzer "^3.4.1" webpack-dev-server "^3.8.0" @@ -2022,7 +2022,7 @@ "@rush-temp/build-tools@file:./projects/build-tools.tgz": version "0.0.0" - resolved "file:./projects/build-tools.tgz#a8955128cf020cd09e3e518553d0d996ca0a40eb" + resolved "file:./projects/build-tools.tgz#33ff887893909b32a19d633687db662504d33647" dependencies: "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -2045,7 +2045,7 @@ gulp-if "^3.0.0" gulp-json-transform "^0.4.7" gulp-plumber "^1.2.1" - gulp-rename "^1.4.0" + gulp-rename "^2.0.0" gulp-replace "^1.0.0" gulp-sourcemaps "^2.6.5" gulp-typescript "^5.0.1" @@ -2054,7 +2054,7 @@ minimatch "^3.0.4" rollup "^1.21.4" rollup-plugin-string "^3.0.0" - rollup-plugin-typescript2 "^0.24.2" + rollup-plugin-typescript2 "^0.25.0" rxjs-tslint-rules "^4.24.3" ts-node "^8.4.1" tslint "^5.20.0" @@ -2094,7 +2094,7 @@ "@rush-temp/cli@file:./projects/cli.tgz": version "0.0.0" - resolved "file:./projects/cli.tgz#6084f0004b6265d35d4860323aec095db5a15609" + resolved "file:./projects/cli.tgz#d0bd474d93490ca5a2ebaea5f0e93b56275f6e99" dependencies: "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" @@ -2106,7 +2106,7 @@ "@types/listr" "^0.14.2" "@types/lodash" "^4.14.138" "@types/prompts" "^2.0.1" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" "@types/yargs" "^13.0.3" bignumber.js "^9.0.0" bn.js "^5.0.0" @@ -2117,9 +2117,9 @@ import-local "^3.0.2" listr "^0.14.3" lodash "^4.17.15" - nodemon "^1.19.3" + nodemon "^2.0.1" prompts "^2.2.1" - react "^16.11.0" + react "^16.12.0" rxjs "^6.5.3" safe-stable-stringify "^1.1.0" source-map "^0.7.3" @@ -2131,7 +2131,7 @@ "@rush-temp/client-common@file:./projects/client-common.tgz": version "0.0.0" - resolved "file:./projects/client-common.tgz#7a9ae784ab31c5e9168262e34df717fbec254f74" + resolved "file:./projects/client-common.tgz#663cc08778c16de97e7718ce275e1039f12163ef" dependencies: "@neo-one/ec-key" "^0.1.0" "@types/bn.js" "^4.11.5" @@ -2153,14 +2153,14 @@ lodash "^4.17.15" rxjs "^6.5.3" safe-stable-stringify "^1.1.0" - scrypt-js "^3.0.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#87dcf2ed07068029d4d227f6d017a9b1dc8d1867" + resolved "file:./projects/client-core.tgz#eae3c7e3655480087cd454b0a93d072174abeda2" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2172,7 +2172,7 @@ 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" gulp "~4.0.2" lodash "^4.17.15" @@ -2245,7 +2245,7 @@ "@rush-temp/developer-tools-frame@file:./projects/developer-tools-frame.tgz": version "0.0.0" - resolved "file:./projects/developer-tools-frame.tgz#2335be1e92cf7d61fcf46558675e42b29e53dd4d" + resolved "file:./projects/developer-tools-frame.tgz#4c33c2dbe2caf4ac69cf7e2cd9b22532a7195a43" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2253,7 +2253,7 @@ "@reactivex/ix-esnext-esm" "^2.5.3" "@render-props/size-observer" "^0.1.18" "@types/lodash" "^4.14.138" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" "@types/react-dom" "^16.9.4" "@types/react-select" "^3.0.0" bignumber.js "^9.0.0" @@ -2263,8 +2263,8 @@ 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" @@ -2311,7 +2311,7 @@ "@rush-temp/editor@file:./projects/editor.tgz": version "0.0.0" - resolved "file:./projects/editor.tgz#ee83a209c063c2bcaf669890034ceae1ef3c800a" + resolved "file:./projects/editor.tgz#b8f345c17fb3dc3cb81814440e122dc33fa9027f" dependencies: "@babel/code-frame" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2336,7 +2336,7 @@ "@types/jest-matchers" "^20.0.2" "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" "@types/react-dom" "^16.9.4" "@types/react-redux" "^7.1.1" "@types/resolve" "^0.0.8" @@ -2345,7 +2345,7 @@ color "^3.1.2" 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" @@ -2354,14 +2354,14 @@ jest-matchers "^20.0.3" jest-mock "^24.0.0" lodash "^4.17.15" - monaco-editor "^0.17.1" + monaco-editor "^0.18.1" monaco-textmate "^3.0.0" 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" @@ -2406,12 +2406,12 @@ "@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/local-browser-worker.tgz#dbd5b0898dad201cd0d64056d5df130bcfe82122" + resolved "file:./projects/local-browser-worker.tgz#1e9843ca121af30798adc6194e5106bf32d36844" dependencies: "@types/nanoid" "^2.0.0" "@types/pouchdb" "^6.4.0" core-js "^3.2.1" - file-loader "^4.2.0" + file-loader "^5.0.2" nanoid "^2.0.3" pouchdb "^7.1.1" regenerator-runtime "^0.13.3" @@ -2496,10 +2496,10 @@ "@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/node-browser-worker.tgz#261343813b17e7d56f4dd1492cac96964be154c3" + resolved "file:./projects/node-browser-worker.tgz#1381e1248a89f4e8c455b4521dc13645094b167d" dependencies: core-js "^3.2.1" - file-loader "^4.2.0" + file-loader "^5.0.2" regenerator-runtime "^0.13.3" "@rush-temp/node-browser@file:./projects/node-browser.tgz": @@ -2687,18 +2687,18 @@ "@rush-temp/react-common@file:./projects/react-common.tgz": version "0.0.0" - resolved "file:./projects/react-common.tgz#01cb86acf4d703852ab707409bb77fedff486ab7" + resolved "file:./projects/react-common.tgz#c5ebbdb2960522652505d16028390f80204e4a38" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" "@types/node" "^12.7.7" - "@types/react" "^16.9.14" + "@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.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" @@ -2707,13 +2707,13 @@ "@rush-temp/react-core@file:./projects/react-core.tgz": version "0.0.0" - resolved "file:./projects/react-core.tgz#189507d7a5101e9bc1a89ea7653c0cd66cb071df" + resolved "file:./projects/react-core.tgz#c28d0c1c1ccccd13ae87bac0a38ee91d9eee5c95" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" gulp "~4.0.2" - react "^16.11.0" + react "^16.12.0" rxjs "^6.5.3" styled-tools "^1.7.1" tslib "^1.10.0" @@ -2895,7 +2895,7 @@ "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" - resolved "file:./projects/website.tgz#b3009bf51ed5bfad303764c5ee3bcb67621c26ec" + resolved "file:./projects/website.tgz#f53e0a8ef6ed49099d04fd668a7103b3ca27f363" dependencies: "@babel/runtime" "^7.6.3" "@emotion/core" "^10.0.22" @@ -2912,7 +2912,7 @@ "@types/modernizr" "^3.5.3" "@types/prismjs" "^1.16.0" "@types/reach__router" "^1.2.4" - "@types/react" "^16.9.14" + "@types/react" "^16.9.15" "@types/react-dom" "^16.9.4" "@types/react-redux" "^7.1.1" "@types/webpack" "^4.39.0" @@ -2936,16 +2936,16 @@ 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.2" - react-static-plugin-source-filesystem "7.1.0" + 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" @@ -3004,12 +3004,13 @@ resolved "https://registry.yarnpkg.com/@types/app-root-dir/-/app-root-dir-0.1.0.tgz#ad0c090ea036b10f5cb4823d8e151495f23b271f" integrity sha512-hL5zdUZ6OZE2DQ38CTxvcTIPYT8YXQE5wq3cs4EWf6NTL+HbyD+9yKeta6qNTuYS68JfqSVgTpwPwoBEhNZLIA== -"@types/autoprefixer@^6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@types/autoprefixer/-/autoprefixer-6.7.3.tgz#1bd7c1e2bb0fcfde46011545ddc5f177d7efdd98" - integrity sha512-1iqqxR9rcUsTrngdea+dpGP3/iuokNnsGYmgXsclJ6iPJ79gqCcYuJAR1AyQRKUVpikxBZBjJKFzStJAlSWMvw== +"@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== dependencies: - postcss "^5.2.15" + "@types/browserslist" "*" + postcss "7.x.x" "@types/babel__code-frame@^7.0.1": version "7.0.1" @@ -3078,6 +3079,11 @@ "@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== + "@types/bs58@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.1.tgz#3d51222aab067786d3bc3740a84a7f5a0effaa37" @@ -3858,10 +3864,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.14": - version "16.9.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.14.tgz#7f1158ce450b4b5aa83b1c5e1324fa75f348bdd1" - integrity sha512-Q4tW4RGmR+u/CgzR8VqZcsUWjP4Pz/LcHfs9AzSG+aBnwq8As3Bid3vG1eGGsXg/xuR2k2tqNlI8pzyV8kxe0g== +"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.15": + version "16.9.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.15.tgz#aeabb7a50f96c9e31a16079ada20ede9ed602977" + integrity sha512-WsmM1b6xQn1tG3X2Hx4F3bZwc2E82pJXt5OPs2YJgg71IzvUoKOSSSYOvLXYCg1ttipM+UuA4Lj3sfvqjVxyZw== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -5901,13 +5907,13 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" - integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== + version "4.8.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" + integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== dependencies: - caniuse-lite "^1.0.30001012" - electron-to-chromium "^1.3.317" - node-releases "^1.1.41" + caniuse-lite "^1.0.30001015" + electron-to-chromium "^1.3.322" + node-releases "^1.1.42" bs-logger@0.x: version "0.2.6" @@ -6102,6 +6108,30 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6249,10 +6279,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001012: - version "1.0.30001013" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001013.tgz#da2440d4d266a17d40eb79bd19c0c8cc1d029c72" - integrity sha512-hOAXaWKuq/UVFgYawxIOdPdyMQdYcwOCDOjnZcKn7wCgFUrhP7smuNZjGLuJlPSgE6aRA4cRJ+bGSrhtEt7ZAg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: + version "1.0.30001015" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" + integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== canonical-path@^1.0.0: version "1.0.0" @@ -6432,7 +6462,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.2, chokidar@^2.1.5, chokidar@^2.1.8: +chokidar@^2.0.0, chokidar@^2.0.2, 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== @@ -6451,7 +6481,7 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.2, chokidar@^2. optionalDependencies: fsevents "^1.2.7" -chokidar@^3.0.2: +chokidar@^3.0.2, chokidar@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== @@ -6466,7 +6496,7 @@ chokidar@^3.0.2: optionalDependencies: fsevents "~2.1.1" -chownr@^1.1.1, chownr@^1.1.3: +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== @@ -7565,6 +7595,11 @@ dataloader@^1.4.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== +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-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" @@ -8253,7 +8288,7 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.317: +electron-to-chromium@^1.3.322: version "1.3.322" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== @@ -8457,9 +8492,9 @@ error@^7.0.0: string-template "~0.2.1" es-abstract@^1.12.0, es-abstract@^1.5.1: - version "1.16.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" - integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== + version "1.16.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" + integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -8927,18 +8962,7 @@ 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== - 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-sources "^1.1.0" - -extract-css-chunks-webpack-plugin@^4.6.0: +extract-css-chunks-webpack-plugin@^4.6.0, extract-css-chunks-webpack-plugin@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.7.1.tgz#8bfb94463a8d31c80d88b9c419507c472d810657" integrity sha512-dpcOJA3wQk4rbgbOGRXyK3Gjl+/Ng8miD162/0uol31Ld4PLnQqIMbKV6ju/gi+uwfZIQcBW3KW1pmfU0epmDg== @@ -9152,10 +9176,10 @@ file-loader@3.0.1: loader-utils "^1.0.2" schema-utils "^1.0.0" -file-loader@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" - integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== +file-loader@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.0.2.tgz#7f3d8b4ac85a5e8df61338cfec95d7405f971caa" + integrity sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg== dependencies: loader-utils "^1.2.3" schema-utils "^2.5.0" @@ -9484,7 +9508,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== @@ -10037,10 +10061,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" @@ -10189,11 +10213,6 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -10884,7 +10903,7 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -11869,14 +11888,15 @@ jest-jasmine2@^24.9.0: pretty-format "^24.9.0" throat "^4.0.0" -jest-junit@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-8.0.0.tgz#d4f7ff67e292a5426dc60bc38694c9f77cb94178" - integrity sha512-cuD2XM2youMjrOxOu/7H2pLfsO8LfAG4D3WsBxd9fFyI9U0uPpmr/CORH64kbIyZ47X5x1Rbzb9ovUkAEvhEEA== +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.0.0" + jest-validate "^24.9.0" mkdirp "^0.5.1" - strip-ansi "^4.0.0" + strip-ansi "^5.2.0" + uuid "^3.3.3" xml "^1.0.1" jest-leak-detector@^24.9.0: @@ -12076,7 +12096,7 @@ jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.0.0, jest-validate@^24.9.0: +jest-validate@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== @@ -12127,11 +12147,6 @@ joycon@^2.2.5: resolved "https://registry.yarnpkg.com/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== -js-base64@^2.1.9: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== - js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -13730,6 +13745,27 @@ minimist@~0.0.1, minimist@~0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.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" @@ -13738,7 +13774,7 @@ 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: +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== @@ -13821,10 +13857,10 @@ moment@2.24.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -monaco-editor@^0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.17.1.tgz#8fbe96ca54bfa75262706e044f8f780e904aa45c" - integrity sha512-JAc0mtW7NeO+0SwPRcdkfDbWLgkqL9WfP1NbpP9wNASsW6oWqgZqNIWt4teymGjZIXTElx3dnQmUYHmVrJ7HxA== +monaco-editor@^0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.18.1.tgz#ced7c305a23109875feeaf395a504b91f6358cfc" + integrity sha512-fmL+RFZ2Hrezy+X/5ZczQW51LUmvzfcqOurnkCIRFTyjdVjzR7JvENzI6+VKBJzJdPh6EYL4RoWl92b2Hrk9fw== monaco-textmate@^3.0.0: version "3.0.1" @@ -14162,19 +14198,19 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.41: - version "1.1.41" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" - integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== +node-releases@^1.1.42: + version "1.1.42" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" + integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== dependencies: semver "^6.3.0" -nodemon@^1.19.3: - 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.1" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.1.tgz#cec436f8153ad5d3e6c27c304849a06cabea71cc" + integrity sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg== dependencies: - chokidar "^2.1.8" + chokidar "^3.2.2" debug "^3.2.6" ignore-by-default "^1.0.1" minimatch "^3.0.4" @@ -15239,9 +15275,9 @@ pinkie@^2.0.0: integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pino-pretty@^3.2.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.4.0.tgz#b8b170d066f57cc7948ca9cedba60497a4f6c284" - integrity sha512-0oEHicFdUCh2tFHQnTX7b9jph+S/UibLMuhBF0yFkt+7JGZGQejNkui27B9qPUofwmqKAf3FfLYvponPyNsQJw== + version "3.5.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.5.0.tgz#5e88003fdbaef9d541393eac4498ac9b97c1683b" + integrity sha512-3sg6s7nI5vgjrEBKhLckAfLPjgjm1U/Fw0C6jhoWnIU2D6QqCpF8eAqL+E1A6bBglCGR/APCx8VuxchBxtuMjA== dependencies: "@hapi/bourne" "^1.3.2" args "^5.0.1" @@ -15694,7 +15730,7 @@ postcss-value-parser@^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.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: +"postcss@5 - 7", postcss@7.x.x, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: version "7.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== @@ -15703,16 +15739,6 @@ postcss-value-parser@^4.0.2: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^5.2.15: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - postgres-array@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" @@ -16188,7 +16214,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== @@ -16196,6 +16222,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.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.0.tgz#d639c40fb9d72b5c7f8abc1fb2ddb25b29d3d540" + integrity sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + 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" @@ -16206,7 +16240,7 @@ 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.11.0, react-dom@^16.7.0, react-dom@^16.9.0: +react-dom@^16.12.0, react-dom@^16.7.0, react-dom@^16.9.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== @@ -16414,18 +16448,18 @@ react-static-plugin-emotion@^7.2.2: dependencies: emotion-server "^10.0.14" -react-static-plugin-reach-router@^7.2.2: +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.1.0" - resolved "https://registry.yarnpkg.com/react-static-plugin-source-filesystem/-/react-static-plugin-source-filesystem-7.1.0.tgz#41ed385f6b01a4c53bebd918281a7bcb03423e85" - integrity sha512-HI7yVBNDTQz5aYsFWJfTUsCgOVjUU9+s+vLPEd8BxeqGAJ0TPKymkmKJJLJYFo8TGm20Wn0yqXiEvuXEOYDoEg== +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 "^2.1.5" - glob "^7.1.3" + chokidar "^3.0.2" + glob "^7.1.4" react-static@^7.1.0: version "7.2.3" @@ -16543,7 +16577,7 @@ react-universal-component@^4.0.0: prop-types "^15.5.10" react-hot-loader "^4.3.6" -react@^16.0.0, react@^16.11.0, react@^16.7.0, react@^16.9.0: +react@^16.0.0, react@^16.12.0, react@^16.7.0, react@^16.9.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== @@ -17251,7 +17285,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +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== @@ -17280,10 +17314,10 @@ rollup-plugin-string@^3.0.0: dependencies: rollup-pluginutils "^2.4.1" -rollup-plugin-typescript2@^0.24.2: - version "0.24.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.24.3.tgz#276fa33a9d584d500da62d3e5400307f4a46bdf2" - integrity sha512-D7yovQlhnRoz7pG/RF0ni+koxgzEShwfAGuOq6OVqKzcATHOvmUt2ePeYVdc9N0adcW1PcTzklUEM0oNWE/POw== +rollup-plugin-typescript2@^0.25.0: + 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" @@ -17442,21 +17476,11 @@ schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.5 ajv "^6.10.2" ajv-keywords "^3.4.1" -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== -scrypt-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.0.tgz#52361c1f272eeaab09ec1f806ea82078bca58b15" - integrity sha512-7CC7aufwukEvqdmllR0ny0QaSg0+S22xKXrXz3ZahaV6J+fgD2YAtrjtImuoDWog17/Ty9Q4HBmnXEXJ3JkfQA== - section-matter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" @@ -17555,6 +17579,11 @@ serialize-javascript@^1.4.0, serialize-javascript@^1.5.0, serialize-javascript@^ 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.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.1.tgz#952907a04a3e3a75af7f73d92d15e233862048b2" + integrity sha512-MPLPRpD4FNqWq9tTIjYG5LesFouDhdyH0EPY3gVK4DRD5+g4aDqdNSzLIwceulo3Yj+PL1bPh6laE5+H6LTcrQ== + serve-handler@6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.2.tgz#f05b0421a313fff2d257838cba00cbcc512cd2b6" @@ -18080,9 +18109,9 @@ sql-summary@^1.0.1: 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== + version "4.1.1" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.1.1.tgz#539a42e476640796578e22d589b3283c28055242" + integrity sha512-CvT5XY+MWnn0HkbwVKJAyWEMfzpAPwnTiB3TobA5Mri44SrTovmmh499NPQP+gatkeOipqPlBLel7rn4E/PCQg== dependencies: nan "^2.12.1" node-pre-gyp "^0.11.0" @@ -18110,6 +18139,14 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^7.0.0: + 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.1.1" + stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -18474,13 +18511,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" @@ -18676,7 +18706,21 @@ terser-webpack-plugin@^1.4.1: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2: +terser-webpack-plugin@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz#5569e6c7d8be79e5e43d6da23acc3b6ba77d22bd" + integrity sha512-jwdauV5Al7zopR6OAYvIIRcxXCSvLjZjr7uZE8l2tIWb/ryrGN48sJftqGf5k9z09tWhajx53ldp0XPI080YnA== + 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" + source-map "^0.6.1" + terser "^4.3.9" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.3.9: version "4.4.2" resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== @@ -19285,9 +19329,9 @@ typescript@3.6.3: integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== typescript@^3.2.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" - integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== + version "3.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" + integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== u2f-api@0.2.7: version "0.2.7" @@ -19563,6 +19607,15 @@ url-loader@^2.1.0: mime "^2.4.4" schema-utils "^2.5.0" +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: + loader-utils "^1.2.3" + mime "^2.4.4" + 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" @@ -19666,7 +19719,7 @@ 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.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, 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== @@ -19942,18 +19995,6 @@ 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== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - babel-traverse "^6.26.0" - dimport "^1.0.0" - fs-extra "^8.0.1" - loadjs "^3.6.1" - scriptjs "^2.5.9" - webpack-external-import@^0.3.0-beta.0: version "0.3.0-beta.0" resolved "https://registry.yarnpkg.com/webpack-external-import/-/webpack-external-import-0.3.0-beta.0.tgz#bceccdafb9572931ee93ffa84e39eea9f6d15dca" @@ -19981,7 +20022,7 @@ webpack-node-externals@^1.7.2: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== -webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: +webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index 234da585f9..a355088788 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -18,7 +18,7 @@ "fs-extra": "^8.1.0", "jest": "^24.9.0", "jest-circus": "^24.9.0", - "jest-junit": "^8.0.0", + "jest-junit": "^10.0.0", "lodash": "^4.17.15", "nyc": "^14.1.1", "tmp": "^0.1.0", diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index 95291034f0..7105754f22 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -59,26 +59,26 @@ "compression-webpack-plugin": "^3.0.0", "cssnano": "^4.1.10", "execa": "^3.2.0", - "extract-css-chunks-webpack-plugin": "4.6.0", - "file-loader": "^4.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": "^1.19.3", + "nodemon": "^2.0.1", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-flexbugs-fixes": "^4.1.0", - "react": "^16.11.0", + "react": "^16.12.0", "rxjs": "^6.5.3", "stats-webpack-plugin": "^0.7.0", - "terser-webpack-plugin": "^1.4.1", + "terser-webpack-plugin": "^2.2.1", "thread-loader": "^2.1.3", "ts-loader": "^6.1.0", "ts-node": "^8.4.1", "typescript": "3.6.3", - "url-loader": "^2.1.0", + "url-loader": "^3.0.0", "webpack": "^4.40.2", "webpack-bundle-analyzer": "^3.4.1", "webpack-dev-server": "^3.8.0", @@ -89,7 +89,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/autoprefixer": "^6.7.3", + "@types/autoprefixer": "^9.6.1", "@types/cssnano": "^4.0.0", "@types/fs-extra": "^8.0.0", "@types/gulp": "^4.0.6", @@ -99,13 +99,13 @@ "@types/gulp-replace": "^0.0.31", "@types/gulp-sourcemaps": "^0.0.32", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.14", + "@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": "^1.4.0", + "gulp-rename": "^2.0.0", "gulp-typescript": "^5.0.1", "tslint": "^5.20.0" }, diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index f8cfedf2a3..cbe63f0f6a 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -51,7 +51,7 @@ "gulp-flatten": "^0.4.0", "gulp-json-transform": "^0.4.7", "gulp-plumber": "^1.2.1", - "gulp-rename": "^1.4.0", + "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-sourcemaps": "^2.6.5", "gulp-typescript": "^5.0.1", @@ -60,7 +60,7 @@ "minimatch": "^3.0.4", "rollup": "^1.21.4", "rollup-plugin-string": "^3.0.0", - "rollup-plugin-typescript2": "^0.24.2", + "rollup-plugin-typescript2": "^0.25.0", "rxjs-tslint-rules": "^4.24.3", "tslint": "^5.20.0", "tslint-clean-code": "^0.2.9", diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 21f85e77e7..c2ea5d504e 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -43,7 +43,7 @@ "import-local": "^3.0.2", "listr": "^0.14.3", "lodash": "^4.17.15", - "nodemon": "^1.19.3", + "nodemon": "^2.0.1", "prompts": "^2.2.1", "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", @@ -63,10 +63,10 @@ "@types/listr": "^0.14.2", "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", - "@types/react": "^16.9.14", + "@types/react": "^16.9.15", "@types/yargs": "^13.0.3", "gulp": "~4.0.2", - "react": "^16.11.0", + "react": "^16.12.0", "rxjs": "^6.5.3", "zone.js": "^0.10.2" }, 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 14884ecbf1..a23a824f49 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,4 +1,4 @@ -/* @hash f46d3990a4894d6a61d9ff22499ee172 */ +/* @hash 323ac5b3b5ddedf2518da6d5e5201b89 */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10030/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10080/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10030/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10080/rpc` })), }); 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 704b511e05..d292c3f23f 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,4 +1,4 @@ -/* @hash 52c353d47e30c3e4c1036416ac26de71 */ +/* @hash 7f61b229c7e7744a0bb711cf3d758db6 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10040/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10090/rpc` })), }); 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 55da2be1e4..aaab26a8d6 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,4 +1,4 @@ -/* @hash db83d007b86b64c594c868c08d8b514a */ +/* @hash 4650e18615a274ffb89134a0285085da */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10050/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10100/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10050/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10100/rpc` })), }); 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 b02e97b140..850051337a 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,4 +1,4 @@ -/* @hash 75addf13d49c998b009e371e02264bfe */ +/* @hash b5936228de9f3fb6e77af4e4eb9a7538 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ 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}:10120/rpc` })), }); 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 fee9888198..93552ed9ae 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,4 +1,4 @@ -/* @hash 6a825bb1fc578614e72a5301095a3be1 */ +/* @hash b9bc03ffe9c24e8c3f355a7a588b8a8f */ // tslint:disable /* eslint-disable */ import { @@ -50,7 +50,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}:10070/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10130/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -129,5 +129,5 @@ 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}:10130/rpc` })), }); 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 081acbf193..051098d130 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,4 +1,4 @@ -/* @hash 62c81cb3802f775995035832c616b05b */ +/* @hash a26bf8347a707d68c0c0b22d77d4abaf */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10020/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10110/rpc` })), }); diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 8b9b6bf012..6448e684a1 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -22,7 +22,7 @@ "lodash": "^4.17.15", "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", - "scrypt-js": "^3.0.0", + "scrypt-js": "^2.0.3", "source-map": "^0.7.3", "tslib": "^1.10.0", "wif": "^2.0.6" diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 1e2eecff53..e6e65fe4fc 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -19,7 +19,7 @@ "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.3", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index fe945d55a8..480049f828 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -27,8 +27,8 @@ "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", @@ -40,7 +40,7 @@ "@neo-one/build-tools": "^1.0.0", "@neo-one/build-tools-web": "^1.0.0", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.14", + "@types/react": "^16.9.15", "@types/react-dom": "^16.9.4", "@types/react-select": "^3.0.0" }, diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index a0f90b5791..67709faa8a 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -42,7 +42,7 @@ "color": "^3.1.2", "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", @@ -51,14 +51,14 @@ "jest-matchers": "^20.0.3", "jest-mock": "^24.0.0", "lodash": "^4.17.15", - "monaco-editor": "^0.17.1", + "monaco-editor": "^0.18.1", "monaco-textmate": "^3.0.0", "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", @@ -88,7 +88,7 @@ "@types/jest-matchers": "^20.0.2", "@types/lodash": "^4.14.138", "@types/nanoid": "^2.0.0", - "@types/react": "^16.9.14", + "@types/react": "^16.9.15", "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/resolve": "^0.0.8", diff --git a/packages/neo-one-local-browser-worker/package.json b/packages/neo-one-local-browser-worker/package.json index a05c3bc63e..1dc6f3041f 100644 --- a/packages/neo-one-local-browser-worker/package.json +++ b/packages/neo-one-local-browser-worker/package.json @@ -13,7 +13,7 @@ "@neo-one/local-browser": "^2.3.1", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", - "file-loader": "^4.2.0", + "file-loader": "^5.0.2", "nanoid": "^2.0.3", "pouchdb": "^7.1.1", "regenerator-runtime": "^0.13.3", diff --git a/packages/neo-one-node-browser-worker/package.json b/packages/neo-one-node-browser-worker/package.json index e586717638..9fed20f36e 100644 --- a/packages/neo-one-node-browser-worker/package.json +++ b/packages/neo-one-node-browser-worker/package.json @@ -13,7 +13,7 @@ "@neo-one/node-browser": "^2.3.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", - "file-loader": "^4.2.0", + "file-loader": "^5.0.2", "regenerator-runtime": "^0.13.3" }, "devDependencies": { diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index b424500487..63ee14e343 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -15,8 +15,8 @@ "@emotion/styled": "^10.0.23", "@neo-one/react-core": "^2.3.0", "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", @@ -26,7 +26,7 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/node": "^12.7.7", - "@types/react": "^16.9.14", + "@types/react": "^16.9.15", "@types/react-dom": "^16.9.4", "@types/react-select": "^3.0.0", "gulp": "~4.0.2" diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index 27a163ff6d..fbe28952bd 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -13,8 +13,8 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@types/react": "^16.9.14", - "react": "^16.11.0", + "@types/react": "^16.9.15", + "react": "^16.12.0", "rxjs": "^6.5.3", "styled-tools": "^1.7.1", "tslib": "^1.10.0" 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 e8945c36d1..beb61ed801 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.14", + "@types/react": "16.9.15", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 57a6697c4c..319f5d21d2 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -38,16 +38,16 @@ "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-source-filesystem": "7.1.0", - "react-static-plugin-reach-router": "^7.2.2", + "react-static-plugin-source-filesystem": "^7.2.3", + "react-static-plugin-reach-router": "^7.2.3", "react-transition-group": "^4.2.1", "react-universal-component": "^4.0.0", "redux": "^4.0.4", @@ -74,7 +74,7 @@ "@types/modernizr": "^3.5.3", "@types/prismjs": "^1.16.0", "@types/reach__router": "^1.2.4", - "@types/react": "^16.9.14", + "@types/react": "^16.9.15", "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/webpack": "^4.39.0", From 005f65e7b92746d52327aa71c7fc4cbfbeba1344 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 5 Dec 2019 11:52:01 -0800 Subject: [PATCH 005/141] chore(bors): fix bors checks (#1915) --- bors.toml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bors.toml b/bors.toml index b15a6800fb..96ed859f3a 100644 --- a/bors.toml +++ b/bors.toml @@ -1,10 +1,9 @@ status = [ - "ci/circleci: lint", + "DeepScan", + "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 From fa84cf25a82a79b0fbc6095920c5357500c30c2f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 5 Dec 2019 11:57:33 -0800 Subject: [PATCH 006/141] chore(bors): syntax (#1916) * chore(bors): fix bors checks * chore(bors): fix bors checks (syntax) --- bors.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bors.toml b/bors.toml index 96ed859f3a..10884c8fd3 100644 --- a/bors.toml +++ b/bors.toml @@ -3,7 +3,7 @@ status = [ "ci/circleci: nit", "ci/circleci: test10", "ci/circleci: test12", - "ci/circleci: build-10, + "ci/circleci: build-10", "ci/circleci: build-12" ] timeout_sec = 18000 From aa78c6be24352ac80ed9010dac5f14078120f827 Mon Sep 17 00:00:00 2001 From: afragapane Date: Tue, 10 Sep 2019 15:57:02 -0700 Subject: [PATCH 007/141] test(exchange): add exchange contract based on Switcheo for testing --- .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../switcheocontract_2019-12-04-18-49.json | 11 + .../neo-one-cli/src/__data__/buildTests.ts | 64 +- .../projects/exchange/.neo-one.config.js | 33 ++ .../projects/exchange/babel.config.js | 15 + .../projects/exchange/codegen/Coin/abi.ts | 386 ++++++++++++ .../exchange/codegen/Coin/contract.ts | 20 + .../projects/exchange/codegen/Coin/types.ts | 231 ++++++++ .../projects/exchange/codegen/CoinICO/abi.ts | 189 ++++++ .../exchange/codegen/CoinICO/contract.ts | 20 + .../exchange/codegen/CoinICO/types.ts | 97 +++ .../projects/exchange/codegen/Exchange/abi.ts | 561 ++++++++++++++++++ .../exchange/codegen/Exchange/contract.ts | 20 + .../exchange/codegen/Exchange/types.ts | 256 ++++++++ .../projects/exchange/codegen/ICO/abi.ts | 189 ++++++ .../projects/exchange/codegen/ICO/contract.ts | 20 + .../projects/exchange/codegen/ICO/types.ts | 96 +++ .../projects/exchange/codegen/Token/abi.ts | 386 ++++++++++++ .../exchange/codegen/Token/contract.ts | 20 + .../projects/exchange/codegen/Token/types.ts | 231 ++++++++ .../projects/exchange/codegen/client.ts | 149 +++++ .../projects/exchange/codegen/contracts.ts | 40 ++ .../projects/exchange/codegen/index.ts | 21 + .../projects/exchange/codegen/react.tsx | 60 ++ .../projects/exchange/codegen/sourceMaps.ts | 78 +++ .../projects/exchange/codegen/test.ts | 17 + .../exchange/neo-one/contracts/Coin.ts | 174 ++++++ .../exchange/neo-one/contracts/CoinICO.ts | 87 +++ .../exchange/neo-one/contracts/Exchange.ts | 318 ++++++++++ .../exchange/neo-one/contracts/ICO.ts | 87 +++ .../exchange/neo-one/contracts/Token.ts | 174 ++++++ .../exchange/neo-one/contracts/tsconfig.json | 30 + .../projects/exchange/neo-one/migration.ts | 10 + .../projects/ico-Js/codegen/client.js | 34 +- .../projects/ico-Js/codegen/sourceMaps.js | 8 +- .../projects/ico-angular/codegen/client.ts | 6 +- .../ico-angular/codegen/sourceMaps.ts | 8 +- .../projects/ico-angularJs/codegen/client.js | 34 +- .../ico-angularJs/codegen/sourceMaps.js | 8 +- .../projects/ico-vue/codegen/client.ts | 6 +- .../projects/ico-vue/codegen/sourceMaps.ts | 8 +- .../projects/ico-vueJs/codegen/client.js | 34 +- .../projects/ico-vueJs/codegen/sourceMaps.js | 8 +- .../__data__/projects/ico/codegen/client.ts | 6 +- .../projects/ico/codegen/sourceMaps.ts | 8 +- .../src/__e2e__/cmd/buildExchange.test.ts | 333 +++++++++++ .../neo-one-smart-contract/src/index.d.ts | 4 +- 63 files changed, 4690 insertions(+), 92 deletions(-) create mode 100644 common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json create mode 100644 common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/.neo-one.config.js create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/babel.config.js create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/abi.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/contract.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/types.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/index.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/react.tsx create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/codegen/test.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Coin.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/CoinICO.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Exchange.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/ICO.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Token.ts create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/tsconfig.json create mode 100644 packages/neo-one-cli/src/__data__/projects/exchange/neo-one/migration.ts create mode 100644 packages/neo-one-cli/src/__e2e__/cmd/buildExchange.test.ts diff --git a/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..673d56202b --- /dev/null +++ b/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Add e2e exchange test based on switcheo", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..d0e55efa35 --- /dev/null +++ b/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-core", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..d41aad832a --- /dev/null +++ b/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-switch", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-switch", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..b147b9f089 --- /dev/null +++ b/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..7b3b2e4882 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..8e5a6aa3a8 --- /dev/null +++ b/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-core", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..c7b395df34 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-neo-settings", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..262543ad4b --- /dev/null +++ b/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-network", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-network", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..d541d055e9 --- /dev/null +++ b/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-offline", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-offline", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..d5c0a3c665 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-protocol", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..b589d4e3fe --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-cache", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..80961efbd5 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-common", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..8c24c487ee --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-levelup", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..d97b22fce6 --- /dev/null +++ b/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-vm", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..a24576a71f --- /dev/null +++ b/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..88e771e54d --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..cb67e0f0c9 --- /dev/null +++ b/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json new file mode 100644 index 0000000000..2d8fd4f5a0 --- /dev/null +++ b/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/utils", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli/src/__data__/buildTests.ts b/packages/neo-one-cli/src/__data__/buildTests.ts index 83ad42e1d8..193ddade3d 100644 --- a/packages/neo-one-cli/src/__data__/buildTests.ts +++ b/packages/neo-one-cli/src/__data__/buildTests.ts @@ -60,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, @@ -101,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..c1803519b7 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/.neo-one.config.js @@ -0,0 +1,33 @@ +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 = { + 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/packages/neo-one-cli/src/__data__/projects/exchange/babel.config.js b/packages/neo-one-cli/src/__data__/projects/exchange/babel.config.js new file mode 100644 index 0000000000..794cae9b64 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/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/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..139f02eda4 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts @@ -0,0 +1,149 @@ +/* @hash a1c197d60788400088cc39a4ff04466d */ +// 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}:10210/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}:10210/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..78d1dda94d --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts @@ -0,0 +1,40 @@ +/* @hash 16213223f8ade0fb4eb287fd54d1701a */ +// 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; +} + +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..79b1ab7571 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts @@ -0,0 +1,78 @@ +/* @hash 6548f4d5dd508ca8926d480af7ecd8b3 */ +// 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/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 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/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) => 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;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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;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/lib/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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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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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/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 { 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/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) => 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-cli/src/__data__/projects/exchange/neo-one/contracts/tsconfig.json b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/tsconfig.json new file mode 100644 index 0000000000..5ffd571d07 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/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/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/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/client.js index a23a824f49..ba3467faf5 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,4 +1,4 @@ -/* @hash 323ac5b3b5ddedf2518da6d5e5201b89 */ +/* @hash 8e632ab2286d0f4b535b6faf0848ec52 */ // tslint:disable /* eslint-disable */ import { @@ -20,7 +20,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 +38,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,16 +51,25 @@ 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}:10080/rpc` }); + if ( + process.env.NODE_ENV !== 'production' || + process.env.NEO_ONE_DEV === 'true' + ) { + providers.push({ network: 'local', rpcURL: `http://${host}:10220/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) { @@ -129,5 +140,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10080/rpc` })), + local: new DeveloperClient( + new NEOONEDataProvider({ + network: 'local', + rpcURL: `http://${host}:10220/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 11b3cbdfba..56c6307005 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ +/* @hash 94b1d405bd463cf257886fe9de97662a */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -17,7 +17,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -28,7 +28,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +39,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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-angular/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts index d292c3f23f..2e505797fb 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,4 +1,4 @@ -/* @hash 7f61b229c7e7744a0bb711cf3d758db6 */ +/* @hash 41c2926d74e576594da57e5577bca924 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10090/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10230/rpc` })), }); 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 7f58eec9fa..735ffdd579 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 5272e938f80e0a8194b830501b68fc40 */ +/* @hash 20e1b85b2e2141ba2b4515dc3b173846 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -19,7 +19,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -30,7 +30,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +41,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/client.js index aaab26a8d6..41df4048a6 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,4 +1,4 @@ -/* @hash 4650e18615a274ffb89134a0285085da */ +/* @hash d744b54b8eda56be8728d023b3c76f92 */ // tslint:disable /* eslint-disable */ import { @@ -20,7 +20,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 +38,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,16 +51,25 @@ 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}:10100/rpc` }); + if ( + process.env.NODE_ENV !== 'production' || + process.env.NEO_ONE_DEV === 'true' + ) { + providers.push({ network: 'local', rpcURL: `http://${host}:10240/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) { @@ -129,5 +140,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10100/rpc` })), + local: new DeveloperClient( + new NEOONEDataProvider({ + network: 'local', + rpcURL: `http://${host}:10240/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 11b3cbdfba..56c6307005 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ +/* @hash 94b1d405bd463cf257886fe9de97662a */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -17,7 +17,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -28,7 +28,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +39,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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-vue/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts index 850051337a..1ce82693ba 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,4 +1,4 @@ -/* @hash b5936228de9f3fb6e77af4e4eb9a7538 */ +/* @hash c6fd7a5eb87f74583e5407858293dbb3 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10120/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10250/rpc` })), }); 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 7f58eec9fa..735ffdd579 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 5272e938f80e0a8194b830501b68fc40 */ +/* @hash 20e1b85b2e2141ba2b4515dc3b173846 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -19,7 +19,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -30,7 +30,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +41,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/client.js index 93552ed9ae..f39de37f00 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,4 +1,4 @@ -/* @hash b9bc03ffe9c24e8c3f355a7a588b8a8f */ +/* @hash a3b54647441b42452734c12bdec93ad7 */ // tslint:disable /* eslint-disable */ import { @@ -20,7 +20,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 +38,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,16 +51,25 @@ 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}:10130/rpc` }); + if ( + process.env.NODE_ENV !== 'production' || + process.env.NEO_ONE_DEV === 'true' + ) { + providers.push({ network: 'local', rpcURL: `http://${host}:10260/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) { @@ -129,5 +140,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10130/rpc` })), + local: new DeveloperClient( + new NEOONEDataProvider({ + network: 'local', + rpcURL: `http://${host}:10260/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 11b3cbdfba..56c6307005 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 6dd8ecf0526d1f0bb1d5e20b682bcd53 */ +/* @hash 94b1d405bd463cf257886fe9de97662a */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -17,7 +17,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -28,7 +28,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +39,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico/codegen/client.ts index 051098d130..139f02eda4 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,4 +1,4 @@ -/* @hash a26bf8347a707d68c0c0b22d77d4abaf */ +/* @hash a1c197d60788400088cc39a4ff04466d */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10110/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10210/rpc` })), }); 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 7f58eec9fa..735ffdd579 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 5272e938f80e0a8194b830501b68fc40 */ +/* @hash 20e1b85b2e2141ba2b4515dc3b173846 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -19,7 +19,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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, }, @@ -30,7 +30,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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,7 +41,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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", + "// 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-smart-contract/src/index.d.ts b/packages/neo-one-smart-contract/src/index.d.ts index b561fe5ef8..a8b9a0d2f7 100644 --- a/packages/neo-one-smart-contract/src/index.d.ts +++ b/packages/neo-one-smart-contract/src/index.d.ts @@ -1450,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. From 331b054753fd33339484406b48b2cb1a2b9a3c16 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 5 Dec 2019 13:47:32 -0800 Subject: [PATCH 008/141] chore(bors): remove deepscan check (#1917) --- bors.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/bors.toml b/bors.toml index 10884c8fd3..f3f3f09625 100644 --- a/bors.toml +++ b/bors.toml @@ -1,5 +1,4 @@ status = [ - "DeepScan", "ci/circleci: nit", "ci/circleci: test10", "ci/circleci: test12", From 5bfe8824420c0086c1b724507d90b537cc619c3f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 9 Dec 2019 12:55:23 +0000 Subject: [PATCH 009/141] fix(deps): update dependency @types/react to v16.9.16 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 beb61ed801..03eea28f79 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.15", + "@types/react": "16.9.16", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", From 6de7e9173b3cb03c6262a6f48707443dede0df1a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Dec 2019 09:25:45 +0000 Subject: [PATCH 010/141] chore(deps): update library/docker docker digest to b7736ba --- actions/dockerhub/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index 9d41325e76..e2e696d269 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:6daea00729cf32ae7e01aa648d1dc47ce45e470e77f5119126e08ce602e79f81 +FROM library/docker@sha256:b7736ba0a18b5b9dfe5393c7d07e220b84d0706432676956ff9d4bc17768d97f COPY entrypoint.sh /entrypoint.sh From 726d61e10c4da06a22eb9e5b08ecc342667a5bc9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Dec 2019 09:19:56 +0000 Subject: [PATCH 011/141] fix(deps): update dependency @types/react to v16.9.17 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", 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 03eea28f79..2b227632be 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.23", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.16", + "@types/react": "16.9.17", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.19", From 9adfd45a0e9538969376252420a2747bf95b0449 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 22 Dec 2019 23:14:39 +0000 Subject: [PATCH 012/141] fix(deps): update emotion monorepo to v10.0.27 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 6 +++--- .../courses/0-tokenomics/2-launch/1-balance/package.json | 6 +++--- .../0-tokenomics/2-launch/2-participate/package.json | 6 +++--- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 6 +++--- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 6 +++--- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", 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 2b227632be..fad54a6856 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,13 +1,13 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", + "@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.17", "@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", From 58f57871ad01c2c2f0f9c35f2f48f4c62da0d1c2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 27 Dec 2019 09:37:58 +0000 Subject: [PATCH 013/141] chore(deps): update library/docker docker digest to 83a5911 --- actions/dockerhub/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index e2e696d269..5b7efc7eac 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:b7736ba0a18b5b9dfe5393c7d07e220b84d0706432676956ff9d4bc17768d97f +FROM library/docker@sha256:83a5911718a8e472a56f615f2939358508dfc6f6f0eaa460ef58460d7c18d723 COPY entrypoint.sh /entrypoint.sh From 330dd3448eb975dd943e256f5fe4b41e5c540884 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 28 Dec 2019 08:34:24 +0000 Subject: [PATCH 014/141] fix(deps): update dependency rxjs to v6.5.4 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/package.json index fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/package.json index fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/package.json index fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/package.json index fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/package.json index fad54a6856..2dcce872e5 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 @@ -10,7 +10,7 @@ "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" } } From bd911ff4d7156989fa0b793be4d7aa7719a40aaf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 18 Jan 2020 08:37:53 +0000 Subject: [PATCH 015/141] chore(deps): update library/docker docker digest to 48db0e2 --- actions/dockerhub/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index 5b7efc7eac..913f071454 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:83a5911718a8e472a56f615f2939358508dfc6f6f0eaa460ef58460d7c18d723 +FROM library/docker@sha256:48db0e29e2214d564b66daffc707ad290c8788dc655cea59c605f021790d38a0 COPY entrypoint.sh /entrypoint.sh From 93f64d97ad7ce31a1fa9fa5901ecae3831bb1cdb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 22 Jan 2020 09:28:20 +0000 Subject: [PATCH 016/141] fix(deps): update dependency @types/react to v16.9.18 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 2dcce872e5..8027ce8662 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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.17", + "@types/react": "16.9.18", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", From 8c6dd7ac6cb1df8d537f9140e8b0e21cca7e94ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Jan 2020 09:40:13 +0000 Subject: [PATCH 017/141] fix(deps): update dependency @types/react to v16.9.19 --- .../courses/0-tokenomics/2-launch/0-info/package.json | 2 +- .../courses/0-tokenomics/2-launch/1-balance/package.json | 2 +- .../courses/0-tokenomics/2-launch/2-participate/package.json | 2 +- .../courses/0-tokenomics/2-launch/3-reactive/package.json | 2 +- .../courses/0-tokenomics/2-launch/4-transfer/package.json | 2 +- .../courses/0-tokenomics/2-launch/5-withdraw/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", 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 8027ce8662..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 @@ -4,7 +4,7 @@ "@emotion/styled": "10.0.27", "@neo-one/react": "2.3.0", "@neo-one/react-core": "2.3.0", - "@types/react": "16.9.18", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", "emotion-theming": "10.0.27", From 8ea0404b3684e6dad96456ae929d2fb82dfaff78 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 10 Feb 2020 12:50:16 -0800 Subject: [PATCH 018/141] fix(test): local unit tests now use ts-jest instead of built packages (#1972) --- .../test-fix_2020-02-10-20-01.json | 11 ++++++++ packages/neo-one-build-tests/jest/base.js | 26 ++++++++++++++++++- packages/neo-one-build-tests/jest/e2e.js | 6 +---- packages/neo-one-build-tests/jest/unit-ci.js | 2 +- packages/neo-one-build-tests/jest/unit.js | 25 ++++++------------ .../neo-one-build-tests/tsconfig.jest.json | 7 +---- .../src/builds/buildTypescript.ts | 4 +-- packages/neo-one-node-offline/package.json | 1 + packages/neo-one-node-offline/src/index.ts | 26 ++++++++++++++----- 9 files changed, 70 insertions(+), 38 deletions(-) create mode 100644 common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json diff --git a/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json b/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json new file mode 100644 index 0000000000..6dd5d07f47 --- /dev/null +++ b/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-offline", + "comment": "feat(logs): add better logging to chainfile sync", + "type": "patch" + } + ], + "packageName": "@neo-one/node-offline", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-build-tests/jest/base.js b/packages/neo-one-build-tests/jest/base.js index 6c47e927a5..ce4c992c1b 100644 --- a/packages/neo-one-build-tests/jest/base.js +++ b/packages/neo-one-build-tests/jest/base.js @@ -32,7 +32,7 @@ module.exports = ({ path }) => ({ `${jest_root}/serializers/buffer.js`, ], testPathIgnorePatterns, - transformIgnorePatterns: ['node_modules', '/packages/.*/lib/'], + transformIgnorePatterns: ['node_modules'], transform: { '^.+\\.tsx?$': `${jest_root}/node_modules/ts-jest`, '^.+\\.jsx?$': [ @@ -44,6 +44,30 @@ module.exports = ({ path }) => ({ }, ], }, + 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/e2e.js b/packages/neo-one-build-tests/jest/e2e.js index d031c1de7d..8e3a97deb0 100644 --- a/packages/neo-one-build-tests/jest/e2e.js +++ b/packages/neo-one-build-tests/jest/e2e.js @@ -6,11 +6,7 @@ module.exports = { testRunner: '/packages/neo-one-build-tests/node_modules/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', - }, + moduleNameMapper: undefined, modulePathIgnorePatterns: [ '/packages/[a-z-]+/package.json', '/common', diff --git a/packages/neo-one-build-tests/jest/unit-ci.js b/packages/neo-one-build-tests/jest/unit-ci.js index de6385c0b7..d5f2fb98be 100644 --- a/packages/neo-one-build-tests/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 index 4916a4c8e0..48538cf0e0 100644 --- a/packages/neo-one-build-tests/jest/unit.js +++ b/packages/neo-one-build-tests/jest/unit.js @@ -3,23 +3,14 @@ const base = require('./base'); module.exports = { ...base({ path: 'test' }), displayName: 'unit', + moduleNameMapper: { + '^@neo-one/ec-key$': '@neo-one/ec-key', + '^@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'], - collectCoverageFrom: [ - 'packages/*/src/**/*.ts', - '!packages/*/src/**/*.d.ts', - '!packages/*/src/__tests__/*.ts', - '!packages/*/src/__e2e__/*.ts', - '!packages/*/src/__data__/*.ts', - ], - coveragePathIgnorePatterns: [ - '/common', - '/packages/.*/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/packages/neo-one-build-tests/tsconfig.jest.json b/packages/neo-one-build-tests/tsconfig.jest.json index 1c61d2dedb..4d0e316afc 100644 --- a/packages/neo-one-build-tests/tsconfig.jest.json +++ b/packages/neo-one-build-tests/tsconfig.jest.json @@ -27,10 +27,5 @@ "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"] } }, - "exclude": [ - "./packages/*/node_modules", - "./packages/*/lib", - "./packages/*/src/__data__/contracts/**/*.ts", - "./packages/*/template/**/*.ts?(x)" - ] + "exclude": ["./packages/*/src/__data__/contracts/**/*.ts", "./packages/*/template/**/*.ts?(x)"] } diff --git a/packages/neo-one-build-tools/src/builds/buildTypescript.ts b/packages/neo-one-build-tools/src/builds/buildTypescript.ts index d537e4f0f3..ea8ced4ab0 100644 --- a/packages/neo-one-build-tools/src/builds/buildTypescript.ts +++ b/packages/neo-one-build-tools/src/builds/buildTypescript.ts @@ -1,6 +1,6 @@ // tslint:disable: no-any match-default-export-name import gulp from 'gulp'; -import gulpPlumber from 'gulp-plumber'; +// import gulpPlumber from 'gulp-plumber'; import gulpSourcemaps from 'gulp-sourcemaps'; import ts from 'gulp-typescript'; import typescript from 'typescript'; @@ -37,7 +37,7 @@ export const buildTypescript = (format: Format, pkgName?: string) => ( format, gulp .src(glob) - .pipe(gulpPlumber()) + // .pipe(gulpPlumber()) .pipe(gulpSourcemaps.init()) .pipe(project()) .pipe(replaceRXJSImport(format)) diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index c6e07d4f28..82c6b67355 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -11,6 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { + "@neo-one/logger": "^2.3.0", "@neo-one/node-core": "^2.3.0", "@neo-one/utils": "^2.3.0", "lodash": "^4.17.15", diff --git a/packages/neo-one-node-offline/src/index.ts b/packages/neo-one-node-offline/src/index.ts index f9906ee3dc..0c30ece5cb 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); @@ -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(); @@ -233,8 +245,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(); From 8ca7fe778ad69fb7070b12a66ebdac609559a2a7 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 11 Feb 2020 13:03:17 -0800 Subject: [PATCH 019/141] fix(wallaby): fix wallaby config to work with rush (#1978) --- .circleci/config.yml | 12 ++-- .../fix-wallaby_2020-02-10-22-10.json | 11 +++ jest.config.js | 3 - packages/neo-one-build-tests/jest/base.js | 2 +- .../src/__e2e__/cmd/consensus.test.ts | 1 + wallaby.js | 68 ++----------------- 6 files changed, 26 insertions(+), 71 deletions(-) create mode 100644 common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json delete mode 100644 jest.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 2227ae798a..99ebd62129 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,27 +1,27 @@ aliases: - &restore-yarn-cache-10 keys: - - v8-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + - v9-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v8-yarn-10-{{ .Branch }}- + - v9-yarn-10-{{ .Branch }}- - &save-yarn-cache-10 paths: - common/temp/node_modules - common/temp/yarn-cache - key: v8-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + key: v9-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &restore-yarn-cache-12 keys: - - v8-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + - v9-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v8-yarn-12-{{ .Branch }}- + - v9-yarn-12-{{ .Branch }}- - &save-yarn-cache-12 paths: - common/temp/node_modules - common/temp/yarn-cache - key: v8-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + key: v9-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &filter-ignore-bors-tmp branches: diff --git a/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json b/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json new file mode 100644 index 0000000000..a22bfef47c --- /dev/null +++ b/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-bin", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-bin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file 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/packages/neo-one-build-tests/jest/base.js b/packages/neo-one-build-tests/jest/base.js index ce4c992c1b..6a26d99aba 100644 --- a/packages/neo-one-build-tests/jest/base.js +++ b/packages/neo-one-build-tests/jest/base.js @@ -38,7 +38,7 @@ module.exports = ({ path }) => ({ '^.+\\.jsx?$': [ `${jest_root}/node_modules/babel-jest`, { - configFile: require.resolve('../babel.config.js'), + configFile: require.resolve(jest_root + '/babel.config.js'), babelrc: true, babelrcRoots: './packages/*', }, 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 4362e82e46..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 @@ -3,6 +3,7 @@ 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/wallaby.js b/wallaby.js index b89e39db06..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('./build-configs/tsconfig.build.json').compilerOptions, - ...require('./build-configs/tsconfig.cjs.json').compilerOptions, - ...require('./build-configs/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', + }, +}); From de896f8867781f34fdf48547cec5536afa98fa4f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 11 Feb 2020 15:34:11 -0800 Subject: [PATCH 020/141] fix(cypress): revert monaco-editor dep to prevent error throwing --- common/config/rush/yarn.lock | 137 ++++++++++++++------------- packages/neo-one-editor/package.json | 3 +- 2 files changed, 72 insertions(+), 68 deletions(-) diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index cf9d2f461c..ad77360ed8 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1929,7 +1929,7 @@ "@rush-temp/build-tests@file:./projects/build-tests.tgz": version "0.0.0" - resolved "file:./projects/build-tests.tgz#d72223165490f333b5e75327ff819663c4a0ca46" + resolved "file:./projects/build-tests.tgz" dependencies: "@babel/preset-env" "^7.6.3" app-root-dir "^1.0.2" @@ -1948,7 +1948,7 @@ "@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": version "0.0.0" - resolved "file:./projects/build-tools-web.tgz#9bf5478dd40e24f2a0e80088c972ddcef8b352ef" + resolved "file:./projects/build-tools-web.tgz" dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2022,7 +2022,7 @@ "@rush-temp/build-tools@file:./projects/build-tools.tgz": version "0.0.0" - resolved "file:./projects/build-tools.tgz#33ff887893909b32a19d633687db662504d33647" + resolved "file:./projects/build-tools.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -2069,7 +2069,7 @@ "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": version "0.0.0" - resolved "file:./projects/cli-common-node.tgz#49fcb8b3ad12a04cb9bb85ef74856c4789e8bc80" + resolved "file:./projects/cli-common-node.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/lodash" "^4.14.138" @@ -2086,7 +2086,7 @@ "@rush-temp/cli-common@file:./projects/cli-common.tgz": version "0.0.0" - resolved "file:./projects/cli-common.tgz#b8c0646ce8db53d978aeb7119483f1a8f691fa4f" + resolved "file:./projects/cli-common.tgz" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2094,7 +2094,7 @@ "@rush-temp/cli@file:./projects/cli.tgz": version "0.0.0" - resolved "file:./projects/cli.tgz#d0bd474d93490ca5a2ebaea5f0e93b56275f6e99" + resolved "file:./projects/cli.tgz" dependencies: "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" @@ -2131,7 +2131,7 @@ "@rush-temp/client-common@file:./projects/client-common.tgz": version "0.0.0" - resolved "file:./projects/client-common.tgz#663cc08778c16de97e7718ce275e1039f12163ef" + resolved "file:./projects/client-common.tgz" dependencies: "@neo-one/ec-key" "^0.1.0" "@types/bn.js" "^4.11.5" @@ -2160,7 +2160,7 @@ "@rush-temp/client-core@file:./projects/client-core.tgz": version "0.0.0" - resolved "file:./projects/client-core.tgz#eae3c7e3655480087cd454b0a93d072174abeda2" + resolved "file:./projects/client-core.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2183,7 +2183,7 @@ "@rush-temp/client-full-common@file:./projects/client-full-common.tgz": version "0.0.0" - resolved "file:./projects/client-full-common.tgz#16e0c1cffd76d1b33210e731b329892a4264c90f" + resolved "file:./projects/client-full-common.tgz" dependencies: "@types/jest" "^24.0.18" gulp "~4.0.2" @@ -2191,7 +2191,7 @@ "@rush-temp/client-full-core@file:./projects/client-full-core.tgz": version "0.0.0" - resolved "file:./projects/client-full-core.tgz#c95b6c1762e298e4ec30fd4fc336b6321f236365" + resolved "file:./projects/client-full-core.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@types/bn.js" "^4.11.5" @@ -2206,13 +2206,13 @@ "@rush-temp/client-full@file:./projects/client-full.tgz": version "0.0.0" - resolved "file:./projects/client-full.tgz#8d736690d0bd10044c8ec1ca3663723aeaa6d0a7" + 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#eb170163ba46b026297e4aea3a408da93358d1ba" + resolved "file:./projects/client-switch.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" @@ -2239,13 +2239,13 @@ "@rush-temp/client@file:./projects/client.tgz": version "0.0.0" - resolved "file:./projects/client.tgz#8703e8b33a230688c013e5924c77f33e14d270fc" + 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#4c33c2dbe2caf4ac69cf7e2cd9b22532a7195a43" + resolved "file:./projects/developer-tools-frame.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2274,7 +2274,7 @@ "@rush-temp/developer-tools@file:./projects/developer-tools.tgz": version "0.0.0" - resolved "file:./projects/developer-tools.tgz#e31f1fa3b9998e5a015888d2231e0fcf79ba4e24" + resolved "file:./projects/developer-tools.tgz" dependencies: gulp "~4.0.2" resize-observer-polyfill "^1.5.0" @@ -2282,7 +2282,7 @@ "@rush-temp/editor-server@file:./projects/editor-server.tgz": version "0.0.0" - resolved "file:./projects/editor-server.tgz#9ab8b839d813b701d0a4c803130bf174a61e1c15" + resolved "file:./projects/editor-server.tgz" dependencies: "@types/graphlib" "^2.1.5" "@types/jest" "^24.0.18" @@ -2311,7 +2311,7 @@ "@rush-temp/editor@file:./projects/editor.tgz": version "0.0.0" - resolved "file:./projects/editor.tgz#b8f345c17fb3dc3cb81814440e122dc33fa9027f" + resolved "file:./projects/editor.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2354,7 +2354,7 @@ jest-matchers "^20.0.3" jest-mock "^24.0.0" lodash "^4.17.15" - monaco-editor "^0.18.1" + monaco-editor "^0.17.1" monaco-textmate "^3.0.0" nanoid "^2.0.3" onigasm "^2.2.2" @@ -2382,7 +2382,7 @@ "@rush-temp/http-context@file:./projects/http-context.tgz": version "0.0.0" - resolved "file:./projects/http-context.tgz#c2547b314ef0d96bee7614e1f19652e0993b8bd5" + resolved "file:./projects/http-context.tgz" dependencies: "@types/koa" "^2.0.49" gulp "~4.0.2" @@ -2391,7 +2391,7 @@ "@rush-temp/http@file:./projects/http.tgz": version "0.0.0" - resolved "file:./projects/http.tgz#c6ff4cba9e166dfa848f00cb9dbe0be579bed02c" + resolved "file:./projects/http.tgz" dependencies: "@types/koa" "^2.0.49" "@types/koa-bodyparser" "^4.3.0" @@ -2406,7 +2406,7 @@ "@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/local-browser-worker.tgz#1e9843ca121af30798adc6194e5106bf32d36844" + resolved "file:./projects/local-browser-worker.tgz" dependencies: "@types/nanoid" "^2.0.0" "@types/pouchdb" "^6.4.0" @@ -2419,7 +2419,7 @@ "@rush-temp/local-browser@file:./projects/local-browser.tgz": version "0.0.0" - resolved "file:./projects/local-browser.tgz#c68c577b35e90e02b19956363ef23c5b2e91cda7" + resolved "file:./projects/local-browser.tgz" dependencies: "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" @@ -2437,21 +2437,21 @@ "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" - resolved "file:./projects/local-singleton.tgz#a4d04ed98bcefa5b806d0c271ec6766510949f10" + 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#e08a99cfb217afcd1cede25260d95922c234a65d" + 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#8af27e13c689f3943da2fe594333a740718f798d" + resolved "file:./projects/logger.tgz" dependencies: "@types/pino" "^5.8.9" gulp "~4.0.2" @@ -2461,7 +2461,7 @@ "@rush-temp/node-bin@file:./projects/node-bin.tgz": version "0.0.0" - resolved "file:./projects/node-bin.tgz#fc5ff4814a321514a9f995ce3fe8f002dfb08061" + resolved "file:./projects/node-bin.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" @@ -2481,7 +2481,7 @@ "@rush-temp/node-blockchain@file:./projects/node-blockchain.tgz": version "0.0.0" - resolved "file:./projects/node-blockchain.tgz#d20518db1940b20ab39d948522bc7aba77593755" + resolved "file:./projects/node-blockchain.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2496,7 +2496,7 @@ "@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/node-browser-worker.tgz#1381e1248a89f4e8c455b4521dc13645094b167d" + resolved "file:./projects/node-browser-worker.tgz" dependencies: core-js "^3.2.1" file-loader "^5.0.2" @@ -2504,7 +2504,7 @@ "@rush-temp/node-browser@file:./projects/node-browser.tgz": version "0.0.0" - resolved "file:./projects/node-browser.tgz#2352edf5c53d5a264be276446d5fda85ea897383" + resolved "file:./projects/node-browser.tgz" dependencies: "@types/level-js" "^4.0.1" "@types/levelup" "^3.1.1" @@ -2517,7 +2517,7 @@ "@rush-temp/node-consensus@file:./projects/node-consensus.tgz": version "0.0.0" - resolved "file:./projects/node-consensus.tgz#f20381174fde6c7777a08fc8941d821462b7501d" + resolved "file:./projects/node-consensus.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2532,7 +2532,7 @@ "@rush-temp/node-core@file:./projects/node-core.tgz": version "0.0.0" - resolved "file:./projects/node-core.tgz#34a056b4699f31625dc870c5fbd5b87f2ad02bbd" + resolved "file:./projects/node-core.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2548,7 +2548,7 @@ "@rush-temp/node-http-rpc@file:./projects/node-http-rpc.tgz": version "0.0.0" - resolved "file:./projects/node-http-rpc.tgz#0c690e5bd3bb77611537b43cebd8e4e1d98e7fb2" + resolved "file:./projects/node-http-rpc.tgz" dependencies: "@types/koa" "^2.0.49" "@types/koa-compose" "^3.2.4" @@ -2569,7 +2569,7 @@ "@rush-temp/node-neo-settings@file:./projects/node-neo-settings.tgz": version "0.0.0" - resolved "file:./projects/node-neo-settings.tgz#7ac891582213e5e1672b4dd60e19540bfac53d7c" + resolved "file:./projects/node-neo-settings.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/lodash" "^4.14.138" @@ -2580,7 +2580,7 @@ "@rush-temp/node-network@file:./projects/node-network.tgz": version "0.0.0" - resolved "file:./projects/node-network.tgz#96f6ebb39851613597d43d6d462fb3184e6cb1a7" + resolved "file:./projects/node-network.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2589,7 +2589,7 @@ "@rush-temp/node-offline@file:./projects/node-offline.tgz": version "0.0.0" - resolved "file:./projects/node-offline.tgz#2314e4e5c424bfab64eb4e5267b8a1231d7caeb8" + resolved "file:./projects/node-offline.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2598,7 +2598,7 @@ "@rush-temp/node-protocol@file:./projects/node-protocol.tgz": version "0.0.0" - resolved "file:./projects/node-protocol.tgz#3ab42dcee92ad02d429a48a595c0ae2e5845cbd1" + resolved "file:./projects/node-protocol.tgz" dependencies: "@types/bloem" "^0.2.0" "@types/bloom-filter" "^0.2.0" @@ -2619,7 +2619,7 @@ "@rush-temp/node-rpc-handler@file:./projects/node-rpc-handler.tgz": version "0.0.0" - resolved "file:./projects/node-rpc-handler.tgz#f6d4a693a6c9cf45837865e69a0ebdd1179a56a9" + resolved "file:./projects/node-rpc-handler.tgz" dependencies: gulp "~4.0.2" rxjs "^6.5.3" @@ -2627,7 +2627,7 @@ "@rush-temp/node-storage-cache@file:./projects/node-storage-cache.tgz": version "0.0.0" - resolved "file:./projects/node-storage-cache.tgz#62afadfd25a23e84d951ab6136ddc74b4b5f6a3b" + resolved "file:./projects/node-storage-cache.tgz" dependencies: "@types/lru-cache" "^5.1.0" gulp "~4.0.2" @@ -2636,14 +2636,14 @@ "@rush-temp/node-storage-common@file:./projects/node-storage-common.tgz": version "0.0.0" - resolved "file:./projects/node-storage-common.tgz#2bf2a184288c5df4e8a043c33766f316bce31ca6" + resolved "file:./projects/node-storage-common.tgz" dependencies: 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#ac6dca3e8cea9117af50e4111142eddd81c1fde7" + resolved "file:./projects/node-storage-levelup.tgz" dependencies: "@types/jest" "^24.0.18" "@types/levelup" "^3.1.1" @@ -2656,7 +2656,7 @@ "@rush-temp/node-vm@file:./projects/node-vm.tgz": version "0.0.0" - resolved "file:./projects/node-vm.tgz#bdd3772a91f1b4629fb44930a732a4e2aa3b0188" + resolved "file:./projects/node-vm.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2672,7 +2672,7 @@ "@rush-temp/node@file:./projects/node.tgz": version "0.0.0" - resolved "file:./projects/node.tgz#de5d5bec11d26b48f64fb7e2c80f474128fd56e4" + resolved "file:./projects/node.tgz" dependencies: "@types/abstract-leveldown" "^5.0.1" "@types/fs-extra" "^8.0.0" @@ -2687,7 +2687,7 @@ "@rush-temp/react-common@file:./projects/react-common.tgz": version "0.0.0" - resolved "file:./projects/react-common.tgz#c5ebbdb2960522652505d16028390f80204e4a38" + resolved "file:./projects/react-common.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2707,7 +2707,7 @@ "@rush-temp/react-core@file:./projects/react-core.tgz": version "0.0.0" - resolved "file:./projects/react-core.tgz#c28d0c1c1ccccd13ae87bac0a38ee91d9eee5c95" + resolved "file:./projects/react-core.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2720,7 +2720,7 @@ "@rush-temp/react@file:./projects/react.tgz": version "0.0.0" - resolved "file:./projects/react.tgz#776b9b2de12a7059f25c7a1fbbf5218e85ff07ca" + resolved "file:./projects/react.tgz" dependencies: "@types/react" "^16.0.0" gulp "~4.0.2" @@ -2730,7 +2730,7 @@ "@rush-temp/smart-contract-codegen@file:./projects/smart-contract-codegen.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-codegen.tgz#f64ba61d3ca51d12dd1d2f9c8449b5df31dcb63e" + resolved "file:./projects/smart-contract-codegen.tgz" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2744,7 +2744,7 @@ "@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#d04f34264edeb0106339e4685949985860f81000" + resolved "file:./projects/smart-contract-compiler-node.tgz" dependencies: "@types/app-root-dir" "^0.1.0" "@types/glob" "^7.1.1" @@ -2756,7 +2756,7 @@ "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-compiler.tgz#51575797f52cb76c34f876ae56c3222ffa09f476" + resolved "file:./projects/smart-contract-compiler.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@types/app-root-dir" "^0.1.0" @@ -2780,7 +2780,7 @@ "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-lib.tgz#f8e3167515a43303abd956811f13f64416dd3851" + resolved "file:./projects/smart-contract-lib.tgz" dependencies: "@types/jest" "^24.0.18" bignumber.js "^9.0.0" @@ -2789,14 +2789,14 @@ "@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#6d06c607a6da418f3647bf9b3e4ef49ae2d67e19" + resolved "file:./projects/smart-contract-test-browser.tgz" dependencies: core-js "^3.2.1" tslib "^1.10.0" "@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#d67deb5579084662fb66beb1dcb208c37a9c68e0" + resolved "file:./projects/smart-contract-test-common.tgz" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2804,7 +2804,7 @@ "@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-test.tgz#1c86383657df540ef7df6c741756c57992070319" + resolved "file:./projects/smart-contract-test.tgz" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2817,26 +2817,26 @@ "@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#9f3492020cbebd2ddaa1558f2fc3952e391d5d39" + resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: gulp "~4.0.2" typescript "3.6.3" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" - resolved "file:./projects/smart-contract.tgz#e2dda84ffab87ea38b2c27e856e75b03daae4e0a" + resolved "file:./projects/smart-contract.tgz" dependencies: gulp "~4.0.2" "@rush-temp/suite@file:./projects/suite.tgz": version "0.0.0" - resolved "file:./projects/suite.tgz#bb0dd3756584f9a24cde10161946952dd27498fd" + resolved "file:./projects/suite.tgz" dependencies: gulp "~4.0.2" "@rush-temp/ts-utils@file:./projects/ts-utils.tgz": version "0.0.0" - resolved "file:./projects/ts-utils.tgz#e28e0e908af0b8a47b6477a6d64a390f29c1112f" + resolved "file:./projects/ts-utils.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2847,7 +2847,7 @@ "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" - resolved "file:./projects/typescript-concatenator.tgz#2e1fe20e5e5e933f6796318d3814844140e8587c" + resolved "file:./projects/typescript-concatenator.tgz" dependencies: "@types/app-root-dir" "^0.1.0" "@types/fs-extra" "^8.0.0" @@ -2866,7 +2866,7 @@ "@rush-temp/utils-node@file:./projects/utils-node.tgz": version "0.0.0" - resolved "file:./projects/utils-node.tgz#55a5931de82e597bf4998e65f040f74994df2805" + resolved "file:./projects/utils-node.tgz" dependencies: "@types/jest" "^24.0.18" "@types/npm-package-arg" "^6.1.0" @@ -2881,7 +2881,7 @@ "@rush-temp/utils@file:./projects/utils.tgz": version "0.0.0" - resolved "file:./projects/utils.tgz#b9c1503236d0266568dd21dcedffd98928c5908d" + resolved "file:./projects/utils.tgz" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2895,7 +2895,7 @@ "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" - resolved "file:./projects/website.tgz#f53e0a8ef6ed49099d04fd668a7103b3ca27f363" + resolved "file:./projects/website.tgz" dependencies: "@babel/runtime" "^7.6.3" "@emotion/core" "^10.0.22" @@ -2964,7 +2964,7 @@ "@rush-temp/worker@file:./projects/worker.tgz": version "0.0.0" - resolved "file:./projects/worker.tgz#1685cf4ac1b6e6d572c78e7ebf9c3534ae79bb1b" + resolved "file:./projects/worker.tgz" dependencies: core-js "^3.2.1" rxjs "^6.5.3" @@ -12501,7 +12501,7 @@ koa-better-body@^3.1.13: formidable "^1.2.1" koa-body-parsers tunnckoCore/body-parsers#patch-1 -"koa-body-parsers@github: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" dependencies: @@ -13857,10 +13857,15 @@ moment@2.24.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -monaco-editor@^0.18.1: - version "0.18.1" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.18.1.tgz#ced7c305a23109875feeaf395a504b91f6358cfc" - integrity sha512-fmL+RFZ2Hrezy+X/5ZczQW51LUmvzfcqOurnkCIRFTyjdVjzR7JvENzI6+VKBJzJdPh6EYL4RoWl92b2Hrk9fw== +monaco-editor@^0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.17.1.tgz#8fbe96ca54bfa75262706e044f8f780e904aa45c" + integrity sha512-JAc0mtW7NeO+0SwPRcdkfDbWLgkqL9WfP1NbpP9wNASsW6oWqgZqNIWt4teymGjZIXTElx3dnQmUYHmVrJ7HxA== + +monaco-editor@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.20.0.tgz#5d5009343a550124426cb4d965a4d27a348b4dea" + integrity sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ== monaco-textmate@^3.0.0: version "3.0.1" diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 67709faa8a..5dea9358e2 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -34,7 +34,6 @@ "@neo-one/react-common": "^2.3.0", "@neo-one/smart-contract-test-browser": "^2.3.1", "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/smart-contract-test-browser": "^2.3.0", "@neo-one/utils": "^2.3.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", @@ -51,7 +50,7 @@ "jest-matchers": "^20.0.3", "jest-mock": "^24.0.0", "lodash": "^4.17.15", - "monaco-editor": "^0.18.1", + "monaco-editor": "^0.17.1", "monaco-textmate": "^3.0.0", "nanoid": "^2.0.3", "onigasm": "^2.2.2", From 5ac081b0e48baa8c042805a832f0b43721d3dc2c Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 20 Feb 2020 10:11:37 -0800 Subject: [PATCH 021/141] fix(docker): fix the node-gsutil image with better paths (#1981) --- scripts/DockerfileNodeGSUtil | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/DockerfileNodeGSUtil b/scripts/DockerfileNodeGSUtil index c4d1c4b466..3b5d5db292 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -14,6 +14,7 @@ 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 +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/lib packages/neo-one-utils/lib/ COPY --from=builder /tmp/neo-one/packages/neo-one-utils/node_modules packages/neo-one-utils/node_modules/ @@ -108,4 +109,4 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/bin packages/neo-one- 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"] +ENTRYPOINT ["/usr/local/bin/node", "packages/neo-one-node-bin/bin/neo-one-node.js"] From aa96f217e55e5aa0db5c43f9fd1325dfb1ee16c7 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 24 Feb 2020 12:58:06 -0800 Subject: [PATCH 022/141] feat(ts): upgrade to TS v3.8.1-rc --- .../upgrade-ts_2020-02-26-01-16.json | 11 + .../cli/upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../node-vm/upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../ts-utils/upgrade-ts_2020-02-26-01-16.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 11 + .../utils/upgrade-ts_2020-02-26-01-16.json | 11 + common/config/rush/common-versions.json | 2 +- common/config/rush/yarn.lock | 39 ++- packages/neo-one-build-tools-web/package.json | 6 +- .../neo-one-build-tools/bin/neo-one-tsc.js | 12 +- packages/neo-one-build-tools/package.json | 12 +- .../src/configuration.ts | 5 +- packages/neo-one-cli/package.json | 10 +- .../projects/exchange/codegen/client.ts | 6 +- .../projects/ico-Js/codegen/client.js | 34 +-- .../projects/ico-angular/codegen/client.ts | 6 +- .../projects/ico-angularJs/codegen/client.js | 34 +-- .../projects/ico-vue/codegen/client.ts | 6 +- .../projects/ico-vueJs/codegen/client.js | 34 +-- .../__data__/projects/ico/codegen/client.ts | 6 +- .../src/__e2e__/cmd/start/neotracker.test.ts | 3 + .../src/__e2e__/cmd/stop/neotracker.test.ts | 2 + .../package.json | 4 +- packages/neo-one-editor/package.json | 14 +- .../src/monaco/AsyncLanguageService.ts | 2 +- packages/neo-one-local-browser/package.json | 6 +- .../neo-one-node-blockchain/src/Blockchain.ts | 4 +- .../src/WriteBatchBlockchain.ts | 2 +- .../src/transaction/TransactionBase.ts | 2 +- .../src/transaction/state/StateDescriptor.ts | 5 +- .../package.json | 4 +- .../package.json | 6 +- .../package.json | 6 +- .../BinaryExpressionCompiler3.test.ts | 58 ++++ .../AwaitExpressionCompiler.test.ts.snap | 2 +- .../boolean/ToNullishBooleanHelper.test.ts | 253 ++++++++++++++++++ .../expression/BinaryExpressionCompiler.ts | 40 ++- .../compile/helper/contract/DeployHelper.ts | 2 +- .../src/compile/helper/createHelpers.ts | 3 + .../types/boolean/ToNullishBooleanHelper.ts | 65 +++++ .../src/compile/helper/types/boolean/index.ts | 1 + .../src/contract/ContractInfoProcessor.ts | 2 +- .../package.json | 6 +- packages/neo-one-ts-utils/package.json | 6 +- packages/neo-one-ts-utils/src/class_.ts | 4 +- .../neo-one-ts-utils/src/exportDeclaration.ts | 2 +- packages/neo-one-ts-utils/src/literal.ts | 16 +- packages/neo-one-ts-utils/src/symbol.ts | 7 + .../package.json | 6 +- .../src/Concatenator.ts | 37 ++- .../src/__data__/snippets/import/entry.ts | 3 + .../src/__data__/snippets/import/foo5.ts | 3 + .../__snapshots__/concatenate.test.ts.snap | 45 ++-- packages/neo-one-utils/package.json | 6 +- packages/neo-one-website/package.json | 22 +- .../src/loaders/coursesLoader.ts | 6 +- packages/neo-one-website/src/utils/getDocs.ts | 2 +- 63 files changed, 787 insertions(+), 214 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json create mode 100644 common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json create mode 100644 packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/types/boolean/ToNullishBooleanHelper.test.ts create mode 100644 packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/ToNullishBooleanHelper.ts create mode 100644 packages/neo-one-typescript-concatenator/src/__data__/snippets/import/foo5.ts diff --git a/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..3f0f0f28eb --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..b17daf8c47 --- /dev/null +++ b/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..c8496b2488 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..d465034bfd --- /dev/null +++ b/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/node-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..22f1d17899 --- /dev/null +++ b/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-vm", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..55ac48686d --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-codegen", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..2a71fefa80 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler-node", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..a83281c3db --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..8ae1efda6a --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-typescript-plugin", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..b74938be34 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/ts-utils", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..fa103f47d0 --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/typescript-concatenator", + "comment": "Upgrade TS to v3.8.1-rc. Add support for namespace exports", + "type": "minor" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json new file mode 100644 index 0000000000..f8e24e4d5f --- /dev/null +++ b/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils", + "comment": "Upgrade TS to v3.8.1-rc", + "type": "minor" + } + ], + "packageName": "@neo-one/utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index 56f06d6bf3..3874ce95c4 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -17,7 +17,7 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "implicitlyPreferredVersions": true, diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index ad77360ed8..5909c860a0 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2010,7 +2010,7 @@ ts-loader "^6.1.0" ts-node "^8.4.1" tslint "^5.20.0" - typescript "3.6.3" + typescript "3.8.1-rc" url-loader "^3.0.0" webpack "^4.40.2" webpack-bundle-analyzer "^3.4.1" @@ -2064,7 +2064,7 @@ tslint-immutable "^6.0.1" tslint-microsoft-contrib "^6.2.0" tslint-sonarts "^1.9.0" - typescript "3.6.3" + typescript "3.8.1-rc" yargs "^14.2.0" "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": @@ -2125,7 +2125,7 @@ source-map "^0.7.3" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" yargs "^14.2.0" zone.js "^0.10.2" @@ -2375,7 +2375,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -2433,7 +2433,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" @@ -2752,7 +2752,7 @@ glob "^7.1.4" gulp "~4.0.2" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" @@ -2776,7 +2776,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" @@ -2820,7 +2820,7 @@ resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: gulp "~4.0.2" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" @@ -2843,7 +2843,7 @@ lodash "^4.17.15" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" @@ -2861,7 +2861,7 @@ lodash "^4.17.15" toposort "^2.0.2" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" yargs "^14.2.0" "@rush-temp/utils-node@file:./projects/utils-node.tgz": @@ -2891,7 +2891,7 @@ lodash "^4.17.15" rxjs "^6.5.3" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" @@ -2957,7 +2957,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.6.3" + typescript "3.8.1-rc" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -13862,11 +13862,6 @@ monaco-editor@^0.17.1: resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.17.1.tgz#8fbe96ca54bfa75262706e044f8f780e904aa45c" integrity sha512-JAc0mtW7NeO+0SwPRcdkfDbWLgkqL9WfP1NbpP9wNASsW6oWqgZqNIWt4teymGjZIXTElx3dnQmUYHmVrJ7HxA== -monaco-editor@^0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.20.0.tgz#5d5009343a550124426cb4d965a4d27a348b4dea" - integrity sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ== - monaco-textmate@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/monaco-textmate/-/monaco-textmate-3.0.1.tgz#b6d26d266aa12edaff7069dae0d6e3747cba5cd7" @@ -15873,7 +15868,7 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -prettier@^1.18.2: +prettier@1.19.1, prettier@^1.18.2: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== @@ -19328,10 +19323,10 @@ typescript-fsa@^3.0.0-beta-2: resolved "https://registry.yarnpkg.com/typescript-fsa/-/typescript-fsa-3.0.0.tgz#3ad1cb915a67338e013fc21f67c9b3e0e110c912" integrity sha512-xiXAib35i0QHl/+wMobzPibjAH5TJLDj+qGq5jwVLG9qR4FUswZURBw2qihBm0m06tHoyb3FzpnJs1GRhRwVag== -typescript@3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" - integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== +typescript@3.8.1-rc: + version "3.8.1-rc" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.1-rc.tgz#f94333c14da70927ccd887be2e91be652a9a09f6" + integrity sha512-aOIe066DyZn2uYIiND6fXMUUJ70nxwu/lKhA92QuQzXyC86fr0ywo1qvO8l2m0EnDcfjprYPuFRgNgDj7U2GlQ== typescript@^3.2.2: version "3.7.3" diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index 7105754f22..1ed62ae474 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -35,6 +35,7 @@ "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", @@ -77,7 +78,7 @@ "thread-loader": "^2.1.3", "ts-loader": "^6.1.0", "ts-node": "^8.4.1", - "typescript": "3.6.3", + "typescript": "3.8.1-rc", "url-loader": "^3.0.0", "webpack": "^4.40.2", "webpack-bundle-analyzer": "^3.4.1", @@ -108,6 +109,5 @@ "gulp-rename": "^2.0.0", "gulp-typescript": "^5.0.1", "tslint": "^5.20.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-build-tools/bin/neo-one-tsc.js b/packages/neo-one-build-tools/bin/neo-one-tsc.js index 24b7a98bbf..982cfe12cd 100644 --- a/packages/neo-one-build-tools/bin/neo-one-tsc.js +++ b/packages/neo-one-build-tools/bin/neo-one-tsc.js @@ -2,8 +2,10 @@ const path = require('path'); const execa = require('execa'); -execa(path.resolve(__dirname, '..', 'node_modules', '.bin', 'tsc'), [ - '--project', - '.', - '--noEmit', -]); +execa( + path.resolve(__dirname, '..', 'node_modules', '.bin', 'tsc'), + ['--project', '.', '--noEmit'], + { + stdio: 'inherit', + }, +); diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index cbe63f0f6a..ab8d4f3238 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -41,14 +41,15 @@ "last 2 edge versions", "last 2 firefox versions" ], + "sideEffects": false, "dependencies": { "execa": "^3.2.0", "fs-extra": "^8.1.0", "gulp": "~4.0.2", "gulp-banner": "^0.1.3", - "gulp-if": "^3.0.0", "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", @@ -62,6 +63,7 @@ "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", @@ -69,16 +71,15 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "ts-node": "^8.4.1", - "typescript": "3.6.3", + "typescript": "3.8.1-rc", "yargs": "^14.2.0" }, "devDependencies": { "@types/fs-extra": "^8.0.0", "@types/gulp": "^4.0.6", - "@types/gulp-if": "^0.0.33", "@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", @@ -86,6 +87,5 @@ "@types/lodash": "^4.14.138", "@types/minimatch": "^3.0.3", "@types/yargs": "^13.0.3" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 43428e9193..97abf5eecb 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -278,7 +278,10 @@ const validateConfig = async (rootDir: string, configIn: any): Promise ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10210/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10000/rpc` })), }); 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 ba3467faf5..7a24c5a1e6 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,4 +1,4 @@ -/* @hash 8e632ab2286d0f4b535b6faf0848ec52 */ +/* @hash 22117686016222857105d2c4f9dfcb88 */ // tslint:disable /* eslint-disable */ import { @@ -20,8 +20,7 @@ const getDefaultUserAccountProviders = (provider) => { }), }; - const dapi = - typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; + const dapi = typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; if (dapi !== undefined) { return { ...localUserAccountProvider, @@ -38,8 +37,7 @@ const getDefaultUserAccountProviders = (provider) => { return localUserAccountProvider; }; -const isLocalUserAccountProvider = (userAccountProvider) => - userAccountProvider instanceof LocalUserAccountProvider; +const isLocalUserAccountProvider = (userAccountProvider) => userAccountProvider instanceof LocalUserAccountProvider; export const createClient = (getUserAccountProvidersOrHost) => { let getUserAccountProviders = getDefaultUserAccountProviders; @@ -51,25 +49,16 @@ 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}:10220/rpc` }); + 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, - ); + 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) { @@ -140,10 +129,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient( - new NEOONEDataProvider({ - network: 'local', - rpcURL: `http://${host}:10220/rpc`, - }), - ), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10010/rpc` })), }); 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 2e505797fb..081acbf193 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,4 +1,4 @@ -/* @hash 41c2926d74e576594da57e5577bca924 */ +/* @hash 62c81cb3802f775995035832c616b05b */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10230/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10020/rpc` })), }); 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 41df4048a6..14884ecbf1 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,4 +1,4 @@ -/* @hash d744b54b8eda56be8728d023b3c76f92 */ +/* @hash f46d3990a4894d6a61d9ff22499ee172 */ // tslint:disable /* eslint-disable */ import { @@ -20,8 +20,7 @@ const getDefaultUserAccountProviders = (provider) => { }), }; - const dapi = - typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; + const dapi = typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; if (dapi !== undefined) { return { ...localUserAccountProvider, @@ -38,8 +37,7 @@ const getDefaultUserAccountProviders = (provider) => { return localUserAccountProvider; }; -const isLocalUserAccountProvider = (userAccountProvider) => - userAccountProvider instanceof LocalUserAccountProvider; +const isLocalUserAccountProvider = (userAccountProvider) => userAccountProvider instanceof LocalUserAccountProvider; export const createClient = (getUserAccountProvidersOrHost) => { let getUserAccountProviders = getDefaultUserAccountProviders; @@ -51,25 +49,16 @@ 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}:10240/rpc` }); + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + providers.push({ network: 'local', rpcURL: `http://${host}:10030/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) { @@ -140,10 +129,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient( - new NEOONEDataProvider({ - network: 'local', - rpcURL: `http://${host}:10240/rpc`, - }), - ), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10030/rpc` })), }); 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 1ce82693ba..704b511e05 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,4 +1,4 @@ -/* @hash c6fd7a5eb87f74583e5407858293dbb3 */ +/* @hash 52c353d47e30c3e4c1036416ac26de71 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10250/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10040/rpc` })), }); 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 f39de37f00..55da2be1e4 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,4 +1,4 @@ -/* @hash a3b54647441b42452734c12bdec93ad7 */ +/* @hash db83d007b86b64c594c868c08d8b514a */ // tslint:disable /* eslint-disable */ import { @@ -20,8 +20,7 @@ const getDefaultUserAccountProviders = (provider) => { }), }; - const dapi = - typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; + const dapi = typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; if (dapi !== undefined) { return { ...localUserAccountProvider, @@ -38,8 +37,7 @@ const getDefaultUserAccountProviders = (provider) => { return localUserAccountProvider; }; -const isLocalUserAccountProvider = (userAccountProvider) => - userAccountProvider instanceof LocalUserAccountProvider; +const isLocalUserAccountProvider = (userAccountProvider) => userAccountProvider instanceof LocalUserAccountProvider; export const createClient = (getUserAccountProvidersOrHost) => { let getUserAccountProviders = getDefaultUserAccountProviders; @@ -51,25 +49,16 @@ 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}:10260/rpc` }); + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + providers.push({ network: 'local', rpcURL: `http://${host}:10050/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) { @@ -140,10 +129,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient( - new NEOONEDataProvider({ - network: 'local', - rpcURL: `http://${host}:10260/rpc`, - }), - ), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10050/rpc` })), }); 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 139f02eda4..128ced08de 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,4 +1,4 @@ -/* @hash a1c197d60788400088cc39a4ff04466d */ +/* @hash cc22deec02b78c38de97754994eeef14 */ // tslint:disable /* eslint-disable */ import { @@ -64,7 +64,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10210/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10000/rpc` })), }); 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 9f3a01cd2e..79ae4c1fc9 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 @@ -17,6 +17,9 @@ describe('start network', () => { }); execAsync('start neotracker'); + // this allows us to run the e2e tests in parallel, successfully + await new Promise((resolve) => setTimeout(resolve, 5000)); + 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 075c669fb9..f0a4e2648d 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 @@ -17,6 +17,8 @@ describe('start network', () => { }); execAsync('start neotracker'); + // this allows us to run the e2e tests in parallel, successfully + await new Promise((resolve) => setTimeout(resolve, 5000)); await one.until(async () => { const live = await isRunning(config.neotracker.port); diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 480049f828..aa70fce98d 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -9,6 +9,7 @@ "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.22", "@emotion/styled": "^10.0.23", @@ -43,6 +44,5 @@ "@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-editor/package.json b/packages/neo-one-editor/package.json index 5dea9358e2..dd8c02b877 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -10,6 +10,10 @@ "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", @@ -32,8 +36,8 @@ "@neo-one/node-browser-worker": "^2.3.0", "@neo-one/react": "^2.3.0", "@neo-one/react-common": "^2.3.0", - "@neo-one/smart-contract-test-browser": "^2.3.1", "@neo-one/smart-contract-compiler": "^2.3.0", + "@neo-one/smart-contract-test-browser": "^2.3.1", "@neo-one/utils": "^2.3.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", @@ -71,7 +75,7 @@ "styled-tools": "^1.7.1", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.6.3", + "typescript": "3.8.1-rc", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" @@ -92,9 +96,5 @@ "@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/monaco/AsyncLanguageService.ts b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts index 2505ca8e3c..01270bbaf5 100644 --- a/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts +++ b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts @@ -241,7 +241,7 @@ export class AsyncLanguageService { fileName: string, files: { readonly [key: string]: string }, ): Promise => - Promise.all([this.fs, this.languageService]).then(([fs, languageService]) => + 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-local-browser/package.json b/packages/neo-one-local-browser/package.json index 3ba1801967..4708ce4066 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -9,6 +9,7 @@ "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", @@ -27,13 +28,12 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "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-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 64b52a1d79..bbc65d56db 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -791,7 +791,7 @@ export class Blockchain { }) .pipe(toArray()) .toPromise(), - ]); + ] as const); return { asset, @@ -835,7 +835,7 @@ export class Blockchain { const [transactionData, output] = await Promise.all([ this.transactionData.tryGet({ hash: input.hash }), this.output.get(input), - ]); + ] as const); if (transactionData === undefined) { return undefined; diff --git a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts index 03634394f4..3dbbcf3c5a 100644 --- a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts @@ -394,7 +394,7 @@ export class WriteBatchBlockchain { this.block.add(block), this.header.add(block.header), - ]); + ] as const); const prevBlockData = maybePrevBlockData === undefined diff --git a/packages/neo-one-node-core/src/transaction/TransactionBase.ts b/packages/neo-one-node-core/src/transaction/TransactionBase.ts index ead98f06cc..6e8a115e25 100644 --- a/packages/neo-one-node-core/src/transaction/TransactionBase.ts +++ b/packages/neo-one-node-core/src/transaction/TransactionBase.ts @@ -257,7 +257,7 @@ export function TransactionBase< this.getNetworkFee(context.feeContext), // tslint:disable-next-line no-any context.tryGetTransactionData(this as any), - ]); + ] as const); return { txid: common.uInt256ToString(this.hashHex), diff --git a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts b/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts index 2f3b2cbba4..a9e2f9fc85 100644 --- a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts +++ b/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts @@ -180,7 +180,10 @@ export class StateDescriptor implements SerializableWire, Seria const reader = new BinaryReader(this.value); const hash = common.bufferToUInt160(this.key); - const [account, validators] = await Promise.all([options.tryGetAccount({ hash }), options.getAllValidators()]); + const [account, validators] = await Promise.all([ + options.tryGetAccount({ hash }), + options.getAllValidators(), + ] as const); if (account === undefined || account.isFrozen) { throw new VerifyError('Account is frozen'); diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index 902aab0200..51ac95b374 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -10,6 +10,7 @@ "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", @@ -27,6 +28,5 @@ "@types/lodash": "^4.14.138", "@types/prettier": "^1.18.2", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 1424d9dfdc..85796d48a5 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -10,6 +10,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/smart-contract": "^2.3.0", "@neo-one/smart-contract-lib": "^2.3.1", @@ -17,13 +18,12 @@ "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/app-root-dir": "^0.1.0", "@types/glob": "^7.1.1", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index a6db7fa094..0ef1cc0543 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -10,6 +10,7 @@ "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", @@ -25,7 +26,7 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", @@ -47,6 +48,5 @@ "gulp": "~4.0.2", "levelup": "^4.1.0", "memdown": "^5.0.0" - }, - "sideEffects": false + } } 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/__snapshots__/AwaitExpressionCompiler.test.ts.snap b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/AwaitExpressionCompiler.test.ts.snap index d3a76a2f7f..2070240693 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; 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/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/helper/contract/DeployHelper.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts index f9cf5fa3c8..d341ec69c0 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/DeployHelper.ts @@ -45,7 +45,7 @@ export class DeployHelper extends Helper { sb.emitPushString(property, tsUtils.node.getName(property)); // [] sb.emitHelper(property, innerOptions, sb.helpers.putCommonStorage); - } else if (ts.isParameterPropertyDeclaration(property)) { + } else if (ts.isParameterPropertyDeclaration(property, property.parent)) { const name = tsUtils.node.getName(property); // [val] sb.scope.get(sb, property, sb.pushValueOptions(innerOptions), name); 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..8bc79a24ee 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 @@ -347,6 +347,7 @@ import { SetPropertyObjectPropertyHelper, SetSymbolObjectPropertyHelper, ToBooleanHelper, + ToNullishBooleanHelper, ToNumberHelper, ToObjectHelper, ToPrimitiveHelper, @@ -561,6 +562,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; @@ -1010,6 +1012,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/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/contract/ContractInfoProcessor.ts b/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts index d46732060a..7b514d796d 100644 --- a/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts +++ b/packages/neo-one-smart-contract-compiler/src/contract/ContractInfoProcessor.ts @@ -335,7 +335,7 @@ export class ContractInfoProcessor { ts.isPropertyDeclaration(decl) || ts.isGetAccessorDeclaration(decl) || ts.isSetAccessorDeclaration(decl) || - ts.isParameterPropertyDeclaration(decl) + ts.isParameterPropertyDeclaration(decl, decl.parent) ) ) { return undefined; diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index 745a6a034b..e1baae16d4 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -10,14 +10,14 @@ "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" + "typescript": "3.8.1-rc" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index 6c383d8768..4a4c5f4795 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -10,16 +10,16 @@ "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", "tslib": "^1.10.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-ts-utils/src/class_.ts b/packages/neo-one-ts-utils/src/class_.ts index 55df54d794..4cb2bbbd27 100644 --- a/packages/neo-one-ts-utils/src/class_.ts +++ b/packages/neo-one-ts-utils/src/class_.ts @@ -15,7 +15,7 @@ export function isClassProperty(node: ts.Node): node is ClassPropertyType { export type ClassInstancePropertyType = ClassPropertyType | ts.ParameterPropertyDeclaration; export function isClassInstanceProperty(node: ts.Node): node is ClassInstancePropertyType { - return (isClassProperty(node) || ts.isParameterPropertyDeclaration(node)) && !modifier.isStatic(node); + return (isClassProperty(node) || ts.isParameterPropertyDeclaration(node, node.parent)) && !modifier.isStatic(node); } export type ClassInstanceMemberType = ts.MethodDeclaration | ClassInstancePropertyType; @@ -80,7 +80,7 @@ export function getMembers(node: ts.ClassDeclaration | ts.ClassExpression): read let insertIndex = members.indexOf(ctor) + 1; // tslint:disable-next-line no-loop-statement for (const param of parametered.getParameters(ctor)) { - if (ts.isParameterPropertyDeclaration(param)) { + if (ts.isParameterPropertyDeclaration(param, param.parent)) { // tslint:disable-next-line no-array-mutation members.splice(insertIndex, 0, param); insertIndex += 1; 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-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index 5579c50039..8645039f70 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -10,13 +10,14 @@ "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", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", - "typescript": "3.6.3" + "typescript": "3.8.1-rc" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", @@ -31,6 +32,5 @@ "fs-extra": "^8.1.0", "gulp": "~4.0.2", "yargs": "^14.2.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-typescript-concatenator/src/Concatenator.ts b/packages/neo-one-typescript-concatenator/src/Concatenator.ts index c2eb4009d5..a6eb78bf59 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) { 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..219556734a 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 @@ -80,3 +80,6 @@ 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'; 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/__tests__/__snapshots__/concatenate.test.ts.snap b/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap index 2c20e8bbda..e1ec6749f3 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,22 @@ class FooType { } const fooType = 'fooType'; // tslint:disable-next-line no-let -let valc2 = 0; -function valuec1() { - return valc2; +let valc1 = 0; +function value44() { + return valc1; } -function defaultc3() { - valc2 += 1; +function default41() { + valc1 += 1; } -const defaultc4 = 'baz'; +const default33 = 'baz'; // tslint:disable-next-line no-let -let valc5 = 0; +let valc2 = 0; const x = 3; -const value39 = () => valc5; +const value48 = () => valc2; const incrementValue = () => { - valc5 += 1; + valc2 += 1; }; -const bar = { value: value39, incrementValue: incrementValue, x: x }; +const bar = { value: value48, incrementValue: incrementValue, x: x }; if (foo !== 'foo') { throw 'Failure'; } @@ -47,17 +50,17 @@ bar.incrementValue(); if (bar.value() !== 1) { throw 'Failure'; } -if (valuec1() !== 0) { +if (value44() !== 0) { throw 'Failure'; } -defaultc3(); -if (valuec1() !== 1) { +default41(); +if (value44() !== 1) { throw 'Failure'; } if (bar.x !== 3) { throw 'Failure'; } -if (defaultc4 !== 'baz') { +if (default33 !== 'baz') { throw 'Failure'; } // tslint:disable-next-line export-name @@ -70,7 +73,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 +81,13 @@ export { fooSC as fooSC }; export { fooSC as barSC }; export { bar }; export { bar as bar2 }; -export { defaultc4 as baz }; -export { defaultc4 as baz2 }; +export { default33 as baz }; +export { default33 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 }; " `; diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 9096509734..5638a59754 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -11,6 +11,7 @@ "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", @@ -23,7 +24,6 @@ "@types/lodash": "^4.14.138", "gulp": "~4.0.2", "jest": "^24.9.0", - "typescript": "3.6.3" - }, - "sideEffects": false + "typescript": "3.8.1-rc" + } } diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 319f5d21d2..06bc180b16 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -9,6 +9,11 @@ "lint:staged": "lint-staged --relative", "tsc": "node node_modules/.bin/tsc --noEmit" }, + "sideEffects": [ + "src/polyfill.ts", + "src/Modernizr.js", + "*.css" + ], "dependencies": { "@babel/runtime": "^7.6.3", "@emotion/core": "^10.0.22", @@ -46,8 +51,8 @@ "react-redux": "^7.0.3", "react-static": "^7.1.0", "react-static-plugin-emotion": "^7.2.2", - "react-static-plugin-source-filesystem": "^7.2.3", "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", @@ -57,14 +62,16 @@ "slugify": "^1.3.3", "styled-tools": "^1.7.1", "ts-node": "^8.4.1", - "typescript": "3.6.3", "tslib": "^1.10.0", + "typescript": "3.8.1-rc", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", + "@neo-one/client": "^2.3.0", + "@neo-one/react-core": "^2.3.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", @@ -78,14 +85,7 @@ "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/webpack": "^4.39.0", - "@neo-one/client": "^2.3.0", - "@neo-one/react-core": "^2.3.0", - "bignumber.js":"^9.0.0", + "bignumber.js": "^9.0.0", "rxjs": "^6.5.3" - }, - "sideEffects": [ - "src/polyfill.ts", - "src/Modernizr.js", - "*.css" - ] + } } 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/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); From db6c5df37d29544df3a072ca129231f80016109f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 25 Feb 2020 17:17:23 -0800 Subject: [PATCH 023/141] fix(types): fix emotion types with TSv3.8. keep for later revert --- .../upgrade-ts_2020-02-26-01-35.json | 11 +++++++++++ .../upgrade-ts_2020-02-26-01-35.json | 11 +++++++++++ .../src/BalanceSelector.tsx | 5 ++--- .../src/BlockIndex.tsx | 2 +- .../src/BlockTime.tsx | 8 +++++--- .../src/DateTimePicker.tsx | 2 +- .../src/Dialog.tsx | 6 +++--- .../src/NetworkSelector.tsx | 2 +- .../src/SettingsLabel.tsx | 3 ++- .../src/Toast.tsx | 2 +- .../src/ToastsContext.tsx | 2 +- .../src/Toolbar.tsx | 2 +- .../src/ToolbarSelector.tsx | 3 +-- .../src/TransferTo.tsx | 5 +++-- packages/neo-one-editor/src/editor/Editor.tsx | 3 +-- .../src/editor/EditorToolbar.tsx | 2 +- .../src/editor/PreviewButton.tsx | 2 +- .../src/editor/toolbar/Console.tsx | 2 +- .../src/editor/toolbar/ConsoleButton.tsx | 2 +- .../src/editor/toolbar/ConsoleOutput.tsx | 3 ++- .../src/editor/toolbar/ConsoleTab.tsx | 3 ++- .../src/editor/toolbar/Feedback.tsx | 3 ++- .../src/editor/toolbar/FileText.tsx | 4 ++-- .../src/editor/toolbar/Help.tsx | 3 ++- .../src/editor/toolbar/ProblemCount.tsx | 2 +- .../src/editor/toolbar/ProblemRoot.tsx | 4 +++- .../src/editor/toolbar/ProblemWrapper.tsx | 2 +- .../src/editor/toolbar/Problems.tsx | 3 ++- .../src/editor/toolbar/ProblemsView.tsx | 2 +- .../src/editor/toolbar/TestDetailError.tsx | 2 +- .../src/editor/toolbar/TestDetailListItem.tsx | 2 +- .../src/editor/toolbar/TestText.tsx | 6 +++--- .../src/editor/toolbar/Text.tsx | 2 +- .../src/editor/toolbar/ToolbarPopover.tsx | 6 +++--- packages/neo-one-react-common/package.json | 8 ++++---- .../neo-one-react-common/src/Backdrop.tsx | 3 ++- .../neo-one-react-common/src/Background.tsx | 2 +- packages/neo-one-react-common/src/Hidden.tsx | 12 +++++++++++- .../neo-one-react-common/src/IconButton.tsx | 2 +- packages/neo-one-react-common/src/Loading.tsx | 2 +- .../neo-one-react-common/src/LoadingDots.tsx | 2 +- packages/neo-one-react-common/src/Overlay.tsx | 3 ++- packages/neo-one-react-common/src/Popover.tsx | 4 ++-- .../neo-one-react-common/src/PopoverArrow.tsx | 4 +++- packages/neo-one-react-common/src/Select.tsx | 3 +-- .../neo-one-react-common/src/Selector.tsx | 2 +- .../neo-one-react-common/src/SplitPane.tsx | 2 +- packages/neo-one-react-common/src/Tooltip.tsx | 2 +- packages/neo-one-react-core/package.json | 4 ++-- packages/neo-one-react-core/src/Box.tsx | 2 +- packages/neo-one-react-core/src/Button.tsx | 3 ++- .../neo-one-react-core/src/ButtonBase.tsx | 3 ++- packages/neo-one-react-core/src/Image.tsx | 3 ++- packages/neo-one-react-core/src/Input.tsx | 3 ++- packages/neo-one-react-core/src/Link.tsx | 3 ++- packages/neo-one-react-core/src/LinkBase.tsx | 3 ++- .../neo-one-react-core/src/ToolbarContent.tsx | 5 ++++- .../src/ToolbarFocusable.tsx | 2 +- .../0-tokenomics/2-launch/0-info/src/ICO.tsx | 2 +- .../2-launch/1-balance/src/ICO.tsx | 2 +- .../2-launch/2-participate/src/ICO.tsx | 4 ++-- .../2-launch/3-reactive/src/ICO.tsx | 4 ++-- .../2-launch/4-transfer/src/ICO.tsx | 6 +++--- .../2-launch/5-withdraw/src/ICO.tsx | 8 ++++---- .../neo-one-website/src/components/Footer.tsx | 10 +++++----- .../neo-one-website/src/components/Header.tsx | 17 ++++++++++------- .../neo-one-website/src/components/Hero.tsx | 5 +++-- .../src/components/StyledRouterLink.tsx | 2 +- .../src/components/blog/BlogAll.tsx | 6 +++--- .../src/components/blog/PostLink.tsx | 7 ++++--- .../src/components/common/LayoutWrapper.tsx | 2 +- .../src/components/common/SidebarSpacer.tsx | 2 +- .../src/components/content/AdjacentLink.tsx | 5 +++-- .../src/components/content/DateAndAuthor.tsx | 2 +- .../src/components/content/DocFooter.tsx | 4 ++-- .../src/components/content/Sidebar.tsx | 6 +++--- .../src/components/content/SidebarList.tsx | 2 +- .../src/components/content/SubsectionLink.tsx | 5 +++-- .../src/components/course/App.tsx | 8 ++++---- .../src/components/course/CourseHeader.tsx | 7 ++++--- .../course/CourseRequirementError.tsx | 6 +++--- .../components/course/chapter/DocsFooter.tsx | 2 +- .../components/course/chapter/NextButton.tsx | 3 ++- .../course/chapter/PreviousButton.tsx | 3 ++- .../course/courses/CourseExplainer.tsx | 6 +++--- .../components/course/courses/CoursesView.tsx | 5 +++-- .../components/course/courses/LessonItem.tsx | 2 +- .../components/course/lesson/LessonView.tsx | 11 ++++++----- .../src/components/home/AssetSectionGrid.tsx | 6 +++--- .../components/home/ContentWrapperBase.tsx | 2 +- .../src/components/home/EditorContent.tsx | 11 ++++++----- .../src/components/home/Home.tsx | 19 +++++++++++-------- .../src/components/home/Proof.tsx | 6 +++--- .../components/reference/ReferenceLink.tsx | 3 ++- .../components/reference/TypeFilterOption.tsx | 2 +- .../components/reference/common/Example.tsx | 4 ++-- .../src/components/reference/common/Text.tsx | 2 +- .../reference/common/TextSection.tsx | 2 +- .../src/components/reference/common/Title.tsx | 2 +- .../components/reference/common/TypeIcon.tsx | 4 +++- .../src/components/reference/common/utils.tsx | 3 ++- .../components/reference/components/Extra.tsx | 2 +- .../components/InterfaceClassItems.tsx | 2 +- .../reference/components/MethodItem.tsx | 6 +++--- .../reference/components/MethodList.tsx | 2 +- .../components/ParameterPropertyItem.tsx | 2 +- .../components/ParameterPropertyList.tsx | 2 +- .../reference/components/ParameterReturns.tsx | 2 +- .../reference/components/ReferenceHeader.tsx | 2 +- .../reference/components/ReferencePage.tsx | 2 +- .../neo-one-website/src/layout/CoreLayout.tsx | 2 +- .../src/layout/CourseLayout.tsx | 2 +- 112 files changed, 261 insertions(+), 189 deletions(-) create mode 100644 common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json create mode 100644 common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json diff --git a/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json b/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json new file mode 100644 index 0000000000..42a0b1321d --- /dev/null +++ b/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-common", + "comment": "Upgrade TS to v3.8.1-rc. Fix types.", + "type": "patch" + } + ], + "packageName": "@neo-one/react-common", + "email": "spencercorwin@icloud.com" +} diff --git a/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json b/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json new file mode 100644 index 0000000000..1511600a97 --- /dev/null +++ b/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-core", + "comment": "Upgrade TS to v3.8.1-rc. Fix types.", + "type": "patch" + } + ], + "packageName": "@neo-one/react-core", + "email": "spencercorwin@icloud.com" +} diff --git a/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx b/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx index 31925cbfdb..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; 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 a94e254e4c..f21f4a5526 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; `; diff --git a/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx b/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx index f83deb10c7..c58949dcd5 100644 --- a/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx +++ b/packages/neo-one-developer-tools-frame/src/DateTimePicker.tsx @@ -7,7 +7,7 @@ import { prop } from 'styled-tools'; const { useState, useCallback } = React; -const ErrorText = styled(Box)` +const ErrorText = styled(Box)<{}, {}>` color: ${prop('theme.error')}; `; 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/SettingsLabel.tsx b/packages/neo-one-developer-tools-frame/src/SettingsLabel.tsx index 994900b4da..37baaaf439 100644 --- a/packages/neo-one-developer-tools-frame/src/SettingsLabel.tsx +++ b/packages/neo-one-developer-tools-frame/src/SettingsLabel.tsx @@ -2,7 +2,8 @@ import styled from '@emotion/styled'; import { Label } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const SettingsLabel = styled(Label)` +// tslint:disable-next-line: no-any +export const SettingsLabel = styled(Label)` ${prop('theme.fontStyles.subheading')}; grid-auto-flow: column; align-items: center; diff --git a/packages/neo-one-developer-tools-frame/src/Toast.tsx b/packages/neo-one-developer-tools-frame/src/Toast.tsx index 9e7eb5f4ea..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')}; diff --git a/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx index cf1a7fcf96..3b1b549e7d 100644 --- a/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx +++ b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx @@ -40,7 +40,7 @@ export const useToasts = (): readonly [ReadonlyArray, typeof addToast, ty 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/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-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/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/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/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/TestText.tsx b/packages/neo-one-editor/src/editor/toolbar/TestText.tsx index 897303472a..55f30117da 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestText.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestText.tsx @@ -8,14 +8,14 @@ export const TestText = styled(Box)<{}, {}>` 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..2faba4c7fa 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,7 +20,7 @@ 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')}; @@ -34,7 +34,7 @@ const ToggleWrapper = styled(Wrapper)` ${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-react-common/package.json b/packages/neo-one-react-common/package.json index 63ee14e343..b28ef3c955 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -10,6 +10,9 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": [ + "*.css" + ], "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", @@ -30,8 +33,5 @@ "@types/react-dom": "^16.9.4", "@types/react-select": "^3.0.0", "gulp": "~4.0.2" - }, - "sideEffects": [ - "*.css" - ] + } } 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/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 85a85485f1..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; 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..ca6499ecf9 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/Tooltip.tsx b/packages/neo-one-react-common/src/Tooltip.tsx index 39d694423b..0cac02b370 100644 --- a/packages/neo-one-react-common/src/Tooltip.tsx +++ b/packages/neo-one-react-common/src/Tooltip.tsx @@ -5,7 +5,7 @@ import { prop } from 'styled-tools'; import { PopoverArrow } from './PopoverArrow'; import { TooltipBase } from './TooltipBase'; -export const StyledTooltip = styled(TooltipBase)<{}, {}>` +export const StyledTooltip = styled(TooltipBase)` background-color: ${prop('theme.gray5')}; border-color: ${prop('theme.gray5')}; color: ${prop('theme.gray0')}; diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index fbe28952bd..57bb2df42f 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -10,6 +10,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", @@ -22,6 +23,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } 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/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-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/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/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/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/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/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/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 4c6e1bf3b6..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; @@ -31,7 +32,8 @@ const StyledToolbar = styled(Toolbar)` } `; -const LogoLink = styled(StyledRouterLinkBase)` +// tslint:disable-next-line: no-any +const LogoLink = styled(StyledRouterLinkBase)` display: block; margin-right: 0; margin-bottom: 8px; @@ -45,7 +47,8 @@ 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')}; @@ -73,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..52221f3d18 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..b1b0bc3890 100644 --- a/packages/neo-one-website/src/components/StyledRouterLink.tsx +++ b/packages/neo-one-website/src/components/StyledRouterLink.tsx @@ -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..51a041a1dc 100644 --- a/packages/neo-one-website/src/components/content/DateAndAuthor.tsx +++ b/packages/neo-one-website/src/components/content/DateAndAuthor.tsx @@ -4,7 +4,7 @@ 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')}; 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/Sidebar.tsx b/packages/neo-one-website/src/components/content/Sidebar.tsx index b11197944b..a68347994e 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,7 +73,7 @@ const StyledHidden = styled(Hidden)` } `; -const MobileSidebarWrapper = styled(Box)` +const MobileSidebarWrapper = styled(Box)<{}, {}>` width: 100%; background-color: ${prop('theme.gray1')}; `; 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..86c6e46351 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')}; @@ -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 430d8a3ffc..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,7 +17,8 @@ const Wrapper = styled(Box)` } `; -const StyledToolbar = styled(Toolbar)` +// tslint:disable-next-line: no-any +const StyledToolbar = styled(Toolbar)` &&& { height: 100%; grid-gap: 8px; @@ -25,7 +26,7 @@ const StyledToolbar = styled(Toolbar)` } `; -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/NextButton.tsx b/packages/neo-one-website/src/components/course/chapter/NextButton.tsx index 3dd3ff8f5e..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); 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..3639e18e32 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..982ccb5cc3 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; 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/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; From c587bd20603911c4ecc03817503a5f9a3ff11707 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 9 Mar 2020 20:09:28 -0700 Subject: [PATCH 024/141] feat(ts): add TS v3.7/3.8 language features (#1984) --- .../new-ts_2020-02-27-21-52.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 4 +- .../new-ts_2020-02-27-21-52.json | 11 + .../upgrade-ts_2020-02-26-01-16.json | 4 +- .../ClassDeclarationCompiler.test.ts | 68 +++++ .../TypeAliasDeclarationCompiler.test.ts | 22 ++ .../ClassDeclarationCompiler.test.ts.snap | 35 +++ .../AwaitExpressionCompiler.test.ts | 11 + .../expression/CallExpressionCompiler.test.ts | 249 ++++++++++++++++++ .../ElementAccessExpressionCompiler.test.ts | 24 ++ .../ObjectLiteralExpressionCompiler.test.ts | 15 ++ .../PropertyAccessExpressionCompiler.test.ts | 48 ++++ .../AwaitExpressionCompiler.test.ts.snap | 12 + ...jectLiteralExpressionCompiler.test.ts.snap | 14 + .../ElementAccessExpressionCompiler.ts | 16 +- .../PropertyAccessExpressionCompiler.ts | 16 +- .../compile/helper/function/CallLikeHelper.ts | 149 ++++++++++- .../src/__data__/snippets/import/entry.ts | 3 + .../src/__data__/snippets/import/onlyTypes.ts | 3 + .../__snapshots__/concatenate.test.ts.snap | 24 +- 20 files changed, 717 insertions(+), 22 deletions(-) create mode 100644 common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json create mode 100644 common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json create mode 100644 packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap create mode 100644 packages/neo-one-typescript-concatenator/src/__data__/snippets/import/onlyTypes.ts diff --git a/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json b/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json new file mode 100644 index 0000000000..7c8fa80516 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Add support for new language features in TS v3.7, v3.8", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json index a83281c3db..69b1a7abee 100644 --- a/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json +++ b/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json @@ -2,10 +2,10 @@ "changes": [ { "packageName": "@neo-one/smart-contract-compiler", - "comment": "Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing", + "comment": "Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing.", "type": "minor" } ], "packageName": "@neo-one/smart-contract-compiler", "email": "spencercorwin@icloud.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json b/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json new file mode 100644 index 0000000000..9ca3484388 --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/typescript-concatenator", + "comment": "Add support for new language features in TS v3.7, v3.8", + "type": "minor" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json index fa103f47d0..e26e7190a2 100644 --- a/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json +++ b/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json @@ -2,10 +2,10 @@ "changes": [ { "packageName": "@neo-one/typescript-concatenator", - "comment": "Upgrade TS to v3.8.1-rc. Add support for namespace exports", + "comment": "Upgrade TS to v3.8.1-rc. Add support for namespace exports.", "type": "minor" } ], "packageName": "@neo-one/typescript-concatenator", "email": "spencercorwin@icloud.com" -} \ No newline at end of file +} 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/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/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..3fe64ac9d4 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 @@ -146,4 +146,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..0d5a7ec384 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 @@ -116,4 +116,19 @@ describe('ObjectLiteralExpressionCompiler', () => { assertEqual(x.f, 4); `); }); + + 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..fc64eca970 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,52 @@ 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); + `); + }); }); 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 2070240693..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 @@ -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..46bc69060c --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap @@ -0,0 +1,14 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +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/compile/expression/ElementAccessExpressionCompiler.ts b/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts index 21ebd92f05..98ab7fa8fe 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, @@ -469,12 +481,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 { + // [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-typescript-concatenator/src/__data__/snippets/import/entry.ts b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/entry.ts index 219556734a..1d45a22295 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'; @@ -83,3 +84,5 @@ 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/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/__tests__/__snapshots__/concatenate.test.ts.snap b/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap index e1ec6749f3..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 @@ -22,21 +22,22 @@ class FooType { const fooType = 'fooType'; // tslint:disable-next-line no-let let valc1 = 0; -function value44() { +function value48() { return valc1; } -function default41() { +function default45() { valc1 += 1; } -const default33 = 'baz'; +type MyType = string; +const default35 = 'baz'; // tslint:disable-next-line no-let let valc2 = 0; const x = 3; -const value48 = () => valc2; +const value52 = () => valc2; const incrementValue = () => { valc2 += 1; }; -const bar = { value: value48, incrementValue: incrementValue, x: x }; +const bar = { value: value52, incrementValue: incrementValue, x: x }; if (foo !== 'foo') { throw 'Failure'; } @@ -50,17 +51,17 @@ bar.incrementValue(); if (bar.value() !== 1) { throw 'Failure'; } -if (value44() !== 0) { +if (value48() !== 0) { throw 'Failure'; } -default41(); -if (value44() !== 1) { +default45(); +if (value48() !== 1) { throw 'Failure'; } if (bar.x !== 3) { throw 'Failure'; } -if (default33 !== 'baz') { +if (default35 !== 'baz') { throw 'Failure'; } // tslint:disable-next-line export-name @@ -81,13 +82,14 @@ export { fooSC as fooSC }; export { fooSC as barSC }; export { bar }; export { bar as bar2 }; -export { default33 as baz }; -export { default33 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, 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 }; " `; From faa5db711a3b918d42f25d4f2b77677ea55cc658 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 16 Mar 2020 13:24:57 -0700 Subject: [PATCH 025/141] feat(deps): temporarily put renovate updates together (#1989) --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index f4a418d0e9..16c69b43d6 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,5 @@ { - "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges"], + "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges", "group:all"], "schedule": ["after 1am and before 5am on every weekday", "every weekend"], "timezone": "America/Los_Angeles", "updateNotScheduled": false, From 8ce4940eaba9bcffb6212b6b5fe3ab88b8aba582 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 16 Mar 2020 13:36:11 -0700 Subject: [PATCH 026/141] feat(deps): remove renovatebot schedule temporarily (#1990) --- renovate.json | 1 - 1 file changed, 1 deletion(-) diff --git a/renovate.json b/renovate.json index 16c69b43d6..47a7b2a26f 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,5 @@ { "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges", "group:all"], - "schedule": ["after 1am and before 5am on every weekday", "every weekend"], "timezone": "America/Los_Angeles", "updateNotScheduled": false, "automerge": true, From 4c46f86b635f647a86d2e64fb947e12d468be87e Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Fri, 20 Mar 2020 09:22:22 -0700 Subject: [PATCH 027/141] feat(node): node improvements for deployment (#1987) --- .../node-restore_2020-03-16-20-14.json | 11 + .../node-restore_2020-03-16-20-14.json | 11 + .../node-restore_2020-03-16-20-14.json | 11 + .../node/node-restore_2020-03-16-20-14.json | 11 + .../rush/browser-approved-packages.json | 4 + common/config/rush/yarn.lock | 381 +++++++++++++++++- .../src/user/UserAccountProviderBase.ts | 4 +- .../src/browser/tracing.ts | 60 ++- .../neo-one-client-switch/src/node/tracing.ts | 185 +++++++-- .../src/createHandler.ts | 4 +- .../neo-one-node-tools/bin/node-restore.js | 2 + packages/neo-one-node-tools/gulpfile.js | 5 + packages/neo-one-node-tools/package.json | 36 ++ .../src/bin/node-restore.ts | 12 + packages/neo-one-node-tools/src/cmd.ts | 40 ++ packages/neo-one-node-tools/src/restore.ts | 64 +++ packages/neo-one-node-tools/tsconfig.json | 3 + packages/neo-one-node/src/startFullNode.ts | 10 +- rush.json | 5 + scripts/DockerfileNodeGSUtil | 5 + 20 files changed, 789 insertions(+), 75 deletions(-) create mode 100644 common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json create mode 100644 common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json create mode 100644 common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json create mode 100644 common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json create mode 100644 packages/neo-one-node-tools/bin/node-restore.js create mode 100644 packages/neo-one-node-tools/gulpfile.js create mode 100644 packages/neo-one-node-tools/package.json create mode 100644 packages/neo-one-node-tools/src/bin/node-restore.ts create mode 100644 packages/neo-one-node-tools/src/cmd.ts create mode 100644 packages/neo-one-node-tools/src/restore.ts create mode 100644 packages/neo-one-node-tools/tsconfig.json diff --git a/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json new file mode 100644 index 0000000000..3b3a7db585 --- /dev/null +++ b/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.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-switch/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json new file mode 100644 index 0000000000..c227bf48e1 --- /dev/null +++ b/common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-switch", + "comment": "wrap opencensus modules with lazy resolving", + "type": "patch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json new file mode 100644 index 0000000000..e6225ce5fe --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-rpc-handler", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json new file mode 100644 index 0000000000..44c35357d9 --- /dev/null +++ b/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index c586f304db..16ef76553c 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -98,6 +98,10 @@ "name": "@emotion/styled-base", "allowedCategories": [ "tools", "web" ] }, + { + "name": "@google-cloud/storage", + "allowedCategories": [ "production" ] + }, { "name": "@jest/types", "allowedCategories": [ "web" ] diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 5909c860a0..f6d0da5a1d 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1079,6 +1079,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.4.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-4.4.0.tgz#28bf3954b2711bab7731919a1992c84d543918ef" + integrity sha512-R64ey4dLIG3IgiKw0CL5MdZ4ZtZdGhN75171vjiL+ioZG+hlLFkjsrCTRuIdE35v42nNe5nXmVhBHQQTuPozHA== + 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.12.0" + duplexify "^3.5.0" + extend "^3.0.2" + gaxios "^2.0.1" + 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" @@ -2982,6 +3043,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@tootallnate/once@1": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" + integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== + "@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" @@ -4264,6 +4330,13 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +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: + event-target-shim "^5.0.0" + abstract-leveldown@^6.0.3, abstract-leveldown@^6.2.1, abstract-leveldown@~6.2.1: version "6.2.2" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.2.tgz#677425beeb28204367c7639e264e93ea4b49971a" @@ -4336,6 +4409,13 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +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: + debug "4" + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -4813,7 +4893,7 @@ 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@^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== @@ -5555,7 +5635,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== @@ -5622,6 +5702,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" @@ -5963,6 +6048,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" @@ -6868,6 +6958,13 @@ compressible@^2.0.0, compressible@~2.0.14, compressible@~2.0.16: dependencies: mime-db ">= 1.40.0 < 2" +compressible@^2.0.12: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + 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" @@ -6921,6 +7018,16 @@ concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + concurrently@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.2.tgz#1a683b2b5c41e9ed324c9002b9f6e4c6e1f3b6d7" @@ -6956,6 +7063,18 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +configstore@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + 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" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -7287,6 +7406,11 @@ crypto-random-string@^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" resolved "https://registry.yarnpkg.com/cryptocompare/-/cryptocompare-0.6.0.tgz#52015d4bc6c3c3ba58fa27bfd536e9418ed6f705" @@ -7600,6 +7724,11 @@ dataloader@^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.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.12.0.tgz#6d30c91c47fa72edadd628b71ec2ac46909b9267" + integrity sha512-n2RJIAp93AucgF/U/Rz5WRS2Hjg5Z+QxscaaMCi6pVZT1JpJKRH+C08vyH/lRR1kxNXnPxgo3lWfd+jCb/UcuQ== + 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" @@ -7655,7 +7784,7 @@ 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.1.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== @@ -8181,6 +8310,13 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" +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 "^2.0.0" + double-ended-queue@2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" @@ -8273,6 +8409,13 @@ 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" + editions@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" @@ -8442,6 +8585,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" @@ -8661,6 +8809,11 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" +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" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -9066,6 +9219,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.0" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" + integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== + 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" @@ -9614,6 +9772,37 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gaxios@^2.0.0, gaxios@^2.0.1, gaxios@^2.1.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-2.3.2.tgz#ed666826c2039b89d384907cc075595269826553" + integrity sha512-K/+py7UvKRDaEwEKlLiRKrFr+wjGjsMz5qH7Vs549QJS7cpSCOT/BbWL7pzqECflc46FcNPipjSfB+V1m8PAhw== + 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.2" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.3.2.tgz#f04a7459483f871f0de71db7454296938688a296" + integrity sha512-OPS0iAmPCV+r7PziOIhyxmQOzsazFCy76yYDOS/Z80O/7cuny1KMfqDQa2T0jLaL8EreTU7EMZG5pUuqBKgzHA== + 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" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -9864,6 +10053,28 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" +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: + node-forge "^0.9.0" + got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -9968,6 +10179,16 @@ growly@^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" @@ -10303,6 +10524,13 @@ hash-base@^3.0.0: inherits "^2.0.1" safe-buffer "^5.0.1" +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" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -10669,6 +10897,15 @@ 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@^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: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -10710,6 +10947,14 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +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" @@ -11382,6 +11627,11 @@ is-obj@^1.0.0, is-obj@^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" @@ -12232,6 +12482,13 @@ 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" @@ -12417,6 +12674,23 @@ 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= +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" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" @@ -13650,6 +13924,11 @@ mime-db@1.42.0, "mime-db@>= 1.40.0 < 2", mime-db@^1.28.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -13662,6 +13941,13 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" +mime-types@^2.0.8: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.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.25" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" @@ -13674,7 +13960,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: +mime@^2.2.0, 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== @@ -14079,7 +14365,7 @@ node-fetch@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.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== @@ -14097,6 +14383,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" @@ -15868,7 +16159,7 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -prettier@1.19.1, prettier@^1.18.2: +prettier@^1.18.2: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== @@ -16066,6 +16357,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" @@ -16688,6 +16988,15 @@ readable-stream@1.0.33: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.0.2: + 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" + util-deprecate "^1.0.1" + readable-stream@~0.0.2: version "0.0.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" @@ -17260,6 +17569,14 @@ 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-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" @@ -17802,6 +18119,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" @@ -18210,6 +18532,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" @@ -18448,6 +18777,11 @@ strip-outer@^1.0.0: dependencies: escape-string-regexp "^1.0.2" +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" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -18674,6 +19008,17 @@ teeny-request@^3.11.3: node-fetch "^2.2.0" uuid "^3.3.2" +teeny-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.2.tgz#da0a6ba6fce4a9dab772ef84b04e417157c56fe7" + integrity sha512-B6fxA0fSnY/bul06NggdN1nywtr5U5Uvt96pHfTi8pi4MNe6++VUWcAAFBrcMeha94s+gULwA5WvagoSZ+AcYg== + dependencies: + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.2.0" + stream-events "^1.0.5" + uuid "^3.3.2" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -19301,7 +19646,7 @@ type@^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== @@ -19495,6 +19840,13 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +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: + 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" @@ -20398,6 +20750,16 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" +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: + 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" resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" @@ -20448,6 +20810,11 @@ xdg-basedir@^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" diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index ec48e016c4..0607ba56ed 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -45,11 +45,11 @@ import { } from '@neo-one/client-common'; import { AggregationType, + getTagMap, globalStats, Measure, MeasureUnit, processActionsAndMessage, - TagMap, } from '@neo-one/client-switch'; import { Labels, labelToTag, utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; @@ -1194,7 +1194,7 @@ export abstract class UserAccountProviderBase { readonly invoke?: boolean; }, ): Promise { - const tags = new TagMap(); + const tags = await getTagMap(); if (invoke) { const value = labels[Labels.INVOKE_RAW_METHOD]; // tslint:disable-next-line: strict-type-predicates diff --git a/packages/neo-one-client-switch/src/browser/tracing.ts b/packages/neo-one-client-switch/src/browser/tracing.ts index 98b01a1ee6..b5bcd88d58 100644 --- a/packages/neo-one-client-switch/src/browser/tracing.ts +++ b/packages/neo-one-client-switch/src/browser/tracing.ts @@ -1,16 +1,13 @@ -// tslint:disable no-submodule-imports readonly-keyword readonly-array +// tslint:disable no-submodule-imports readonly-keyword readonly-array no-any no-let 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 = { @@ -26,7 +23,10 @@ let tracer: TracerBase = { logger: {} as any, activeTraceParams: {} as any, active: false, - propagation: {} as any, + propagation: { + extract: noOp, + inject: noOp, + } as any, eventListeners: [], start: noOp, stop: noOp, @@ -36,9 +36,7 @@ let tracer: TracerBase = { 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) { @@ -58,7 +56,6 @@ const startTracing = async (config: Config) => { }; }; -// tslint:disable-next-line: no-let let createTraceContextFormat: (() => Propagation) | undefined; const getNewPropagation = async () => { if (createTraceContextFormat === undefined) { @@ -83,39 +80,25 @@ const globalStats: Stats = { getCurrentTagContext: noOp, }; +export interface PrometheusExporterOptions extends ExporterConfig { + prefix?: string; + port?: number; + startServer?: boolean; +} + 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 + // tslint:disable-next-line: unnecessary-constructor 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(); - } -} +const getPrometheusExporter = async (...args: any[]) => Promise.resolve(new PrometheusStatsExporter(args)); export interface JaegerTraceExporterOptions extends ExporterConfig { serviceName: string; @@ -126,19 +109,28 @@ export interface JaegerTraceExporterOptions extends ExporterConfig { maxPacketSize?: number; } +class JaegerTraceExporter extends NoopExporter { + public constructor(..._args: any[]) { + super(); + } +} + +const getJaegerTraceExporter = async (...args: any[]) => Promise.resolve(new JaegerTraceExporter(args)); + +const getTagMap = async () => Promise.resolve(new TagMap()); + export { AggregationType, Config as TracingConfig, globalStats, - JaegerTraceExporter, + getJaegerTraceExporter, Measure, MeasureUnit, - NoopExporter, - PrometheusStatsExporter, + getPrometheusExporter, Span, SpanKind, startTracing, - TagMap, + getTagMap, getNewPropagation, tracer, }; diff --git a/packages/neo-one-client-switch/src/node/tracing.ts b/packages/neo-one-client-switch/src/node/tracing.ts index dedb968c58..460d5d035e 100644 --- a/packages/neo-one-client-switch/src/node/tracing.ts +++ b/packages/neo-one-client-switch/src/node/tracing.ts @@ -1,26 +1,121 @@ -// 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'; +// tslint:disable: no-let no-any +import type { Config, Measure, Span, Stats, StatsEventListener, TracerBase } from '@opencensus/core'; +import type { JaegerTraceExporter, JaegerTraceExporterOptions } from '@opencensus/exporter-jaeger'; +import type { PrometheusExporterOptions, PrometheusStatsExporter } from '@opencensus/exporter-prometheus'; +import type { TraceContextFormat } from '@opencensus/propagation-tracecontext'; + +const noOp = (..._args: readonly any[]): any => { + // +}; + +let tracer: TracerBase = { + sampler: {} as any, + logger: {} as any, + activeTraceParams: {} as any, + propagation: { + extract: noOp, + inject: noOp, + } as any, + eventListeners: [], + active: false, + start: noOp, + stop: noOp, + startRootSpan: (_options: any, func: (root: any) => T) => { + const span = { + addAttribute: noOp, + spanContext: {}, + end: noOp, + }; + + return func(span); + }, + startChildSpan: noOp, + registerSpanEventListener: noOp, + unregisterSpanEventListener: noOp, + setCurrentRootSpan: noOp, + onStartSpan: noOp, + onEndSpan: noOp, +}; + +// enums copied from types directly +enum MeasureUnit { + UNIT = "1", + BYTE = "by", + KBYTE = "kb", + SEC = "s", + MS = "ms", + NS = "ns", +} + +enum AggregationType { + COUNT = 0, + SUM = 1, + LAST_VALUE = 2, + DISTRIBUTION = 3, +} + +enum SpanKind { + UNSPECIFIED = 0, + SERVER = 1, + CLIENT = 2, +} + +let globalStatsCache: Omit & {readonly registerExporter?: (listener: StatsEventListener) => void} = { + createView: noOp, + registerView: noOp, + createMeasureDouble: noOp, + createMeasureInt64: noOp, + record: noOp, + clear: noOp, + getMetrics: noOp, + registerExporter: noOp, + unregisterExporter: noOp, + withTagContext: noOp, + getCurrentTagContext: noOp, +}; + +let coreImportCache: Promise | undefined; +const globalStats: Omit & {readonly registerExporter: (listener: StatsEventListener) => Promise}= { + createView: globalStatsCache.createView, + registerView: globalStatsCache.registerView, + createMeasureDouble: globalStatsCache.createMeasureDouble, + createMeasureInt64: globalStatsCache.createMeasureInt64, + record: globalStatsCache.record, + clear: globalStatsCache.clear, + getMetrics: globalStatsCache.getMetrics, + registerExporter: async (listener: StatsEventListener) => { + if (coreImportCache === undefined) { + coreImportCache = import('@opencensus/core') + } + + if (globalStatsCache.registerExporter === undefined) { + const coreImport = await coreImportCache; + globalStatsCache = coreImport.globalStats; + } + + if (globalStatsCache.registerExporter === undefined) { + throw new Error('For TS, should always be defined unless import fails'); + } + + globalStatsCache.registerExporter(listener); + }, + unregisterExporter: globalStatsCache.unregisterExporter, + withTagContext: globalStatsCache.withTagContext, + getCurrentTagContext: globalStatsCache.getCurrentTagContext, +} -const tracing = TracingBase.instance; -const tracer = tracing.tracer; + +let TracingBaseCache: Promise | undefined; const startTracing = async (config: Config) => { + if (TracingBaseCache === undefined) { + TracingBaseCache = import('@opencensus/nodejs-base'); + } + + const { TracingBase } = await TracingBaseCache; + const tracing = TracingBase.instance; tracing.start(config); + tracer = tracing.tracer; return () => { if (config.exporter !== undefined) { @@ -31,23 +126,63 @@ const startTracing = async (config: Config) => { }; }; -const getNewPropagation = async () => Promise.resolve(new TraceContextFormat()); + +let TraceContextFormatCache: Promise | undefined; +const getNewPropagation = async (): Promise => { + if (TraceContextFormatCache === undefined) { + TraceContextFormatCache = import('@opencensus/propagation-tracecontext'); + } + const { TraceContextFormat: ImportedTraceContextFormat } = await TraceContextFormatCache; + + return new ImportedTraceContextFormat(); +}; + +let JaegerTraceExporterCache: Promise | undefined; +const getJaegerTraceExporter = async (options: JaegerTraceExporterOptions ): Promise => { + if (JaegerTraceExporterCache === undefined) { + JaegerTraceExporterCache = import('@opencensus/exporter-jaeger'); + } + + const { JaegerTraceExporter: ImportedJaegerTraceExporter } = await JaegerTraceExporterCache; + + return new ImportedJaegerTraceExporter(options); +} + +let PrometheusExporterCache: Promise | undefined; +const getPrometheusExporter = async (options: PrometheusExporterOptions ): Promise => { + if (PrometheusExporterCache === undefined) { + PrometheusExporterCache = import('@opencensus/exporter-prometheus'); + } + + const { PrometheusStatsExporter: PrometheusExporter } = await PrometheusExporterCache + + return new PrometheusExporter(options); +} + +const getTagMap = async () => { + if (coreImportCache === undefined) { + coreImportCache = import('@opencensus/core') + }; + + const { TagMap: ImportTagMap } = await coreImportCache; + + return new ImportTagMap(); +} export { AggregationType, Config as TracingConfig, globalStats, - JaegerTraceExporter, + getJaegerTraceExporter, JaegerTraceExporterOptions, + getPrometheusExporter, + PrometheusExporterOptions, Measure, MeasureUnit, - NoopExporter, - PrometheusExporterOptions, - PrometheusStatsExporter, Span, SpanKind, startTracing, - TagMap, + getTagMap, getNewPropagation, tracer, }; diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 4cab338e82..05825369b4 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,5 +1,5 @@ import { common, crypto, JSONHelper, RelayTransactionResultJSON, TransactionJSON, utils } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit, TagMap } from '@neo-one/client-switch'; +import { AggregationType, getTagMap, globalStats, MeasureUnit } from '@neo-one/client-switch'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Account, @@ -190,7 +190,7 @@ const createJSONRPCHandler = (handlers: Handlers) => { }; } catch (err) { logger.error({ name: 'jsonrpc_server_single_request', ...labels, err }); - const tags = new TagMap(); + const tags = await getTagMap(); tags.set(rpcTag, { value: method }); globalStats.record( [ 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..e4bff693b9 --- /dev/null +++ b/packages/neo-one-node-tools/bin/node-restore.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/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..5b6bd45300 --- /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" + }, + "dependencies": { + "@google-cloud/storage": "^4.3.2", + "@neo-one/logger": "^2.3.0", + "@neo-one/utils-node": "^2.3.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.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" + }, + "sideEffects": false +} 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..1b36874ca1 --- /dev/null +++ b/packages/neo-one-node-tools/src/cmd.ts @@ -0,0 +1,40 @@ +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..97c5ec375e --- /dev/null +++ b/packages/neo-one-node-tools/src/restore.ts @@ -0,0 +1,64 @@ +import { Storage } from '@google-cloud/storage'; +import execa from 'execa'; +import fs from 'fs-extra'; +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/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index e89cd40f70..1cb197cafa 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -1,10 +1,10 @@ import { + getJaegerTraceExporter, getNewPropagation, + getPrometheusExporter, globalStats, - JaegerTraceExporter, JaegerTraceExporterOptions, PrometheusExporterOptions, - PrometheusStatsExporter, startTracing, TracingConfig, } from '@neo-one/client-switch'; @@ -73,12 +73,12 @@ export const startFullNode = async ({ } if (telemetry.prometheus !== undefined) { - const exporter = new PrometheusStatsExporter({ + const exporter = await getPrometheusExporter({ ...telemetry.prometheus, startServer: true, }); - globalStats.registerExporter(exporter); + await globalStats.registerExporter(exporter); disposable = composeDisposables(disposable, async () => { await new Promise((resolve) => exporter.stopServer(resolve)); @@ -87,7 +87,7 @@ export const startFullNode = async ({ } if (telemetry.jaeger !== undefined && telemetry.tracing !== undefined) { - const exporter = new JaegerTraceExporter({ + const exporter = await getJaegerTraceExporter({ ...telemetry.jaeger, serviceName: 'NEO-ONE', }); diff --git a/rush.json b/rush.json index 75f32d9f9f..d634656b62 100644 --- a/rush.json +++ b/rush.json @@ -250,6 +250,11 @@ "reviewCategory": "production", "shouldPublish": true }, + { + "packageName": "@neo-one/node-tools", + "projectFolder": "packages/neo-one-node-tools", + "reviewCategory": "production" + }, { "packageName": "@neo-one/node-vm", "projectFolder": "packages/neo-one-node-vm", diff --git a/scripts/DockerfileNodeGSUtil b/scripts/DockerfileNodeGSUtil index 3b5d5db292..e115921363 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -10,6 +10,7 @@ COPY packages packages/ 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 +RUN sudo node common/scripts/install-run-rush.js build -t @neo-one/node-tools # node:12.9.0-buster-slim 2019-08-27 FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250df AS production @@ -106,6 +107,10 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/package.json packages COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/lib packages/neo-one-node-bin/lib/ 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/lib packages/neo-one-node-tools/lib/ +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/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 From f0054f7d8aec39f1cdcc6a6a646191e6c7ebbdb7 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Sun, 22 Mar 2020 15:09:31 -0700 Subject: [PATCH 028/141] fix(skip): actually skip neotracker if specified in config (#1995) --- .../@neo-one/cli/fix-skip_2020-03-22-20-52.json | 11 +++++++++++ packages/neo-one-cli/src/build/createTasks.ts | 7 ++----- 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json diff --git a/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json b/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json new file mode 100644 index 0000000000..ddd9ffadae --- /dev/null +++ b/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Minor bug fix. `yarn neo-one build` would start a NEO Tracker instance, even if config specified to skip NEO Tracker.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file 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); }, }, ]); From 6703026744973246ec6f92b51664538761c13fb4 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Wed, 8 Apr 2020 10:49:58 -0700 Subject: [PATCH 029/141] fix(typo): fix typo in website tutorial (#2003) --- packages/neo-one-website/tutorial/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neo-one-website/tutorial/tutorial.md b/packages/neo-one-website/tutorial/tutorial.md index 02ff91af33..4cb018c565 100644 --- a/packages/neo-one-website/tutorial/tutorial.md +++ b/packages/neo-one-website/tutorial/tutorial.md @@ -83,7 +83,7 @@ npm install @neo-one/cli @neo-one/client @neo-one/smart-contract @neo-one/smart- 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. From dfbe70d805ae0fcc5e18b341c27876c4381bb1b5 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 13 Apr 2020 16:19:36 -0700 Subject: [PATCH 030/141] feat(compiler): add support for outputting compiled contracts (#2005) --- .../cli/compiler_2020-04-13-22-53.json | 11 +++++ packages/neo-one-cli/src/cmd/compile.ts | 20 +++++++++ packages/neo-one-cli/src/cmd/index.ts | 2 + .../src/compile/compileContract.ts | 37 +++++++++++++++ .../neo-one-cli/src/compile/createTasks.ts | 45 +++++++++++++++++++ .../neo-one-cli/src/compile/findContracts.ts | 4 ++ packages/neo-one-cli/src/compile/index.ts | 1 + .../neo-one-cli/src/compile/writeContract.ts | 12 +++++ 8 files changed, 132 insertions(+) create mode 100644 common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json create mode 100644 packages/neo-one-cli/src/cmd/compile.ts create mode 100644 packages/neo-one-cli/src/compile/compileContract.ts create mode 100644 packages/neo-one-cli/src/compile/createTasks.ts create mode 100644 packages/neo-one-cli/src/compile/findContracts.ts create mode 100644 packages/neo-one-cli/src/compile/index.ts create mode 100644 packages/neo-one-cli/src/compile/writeContract.ts diff --git a/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json b/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json new file mode 100644 index 0000000000..629f44c0cc --- /dev/null +++ b/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "add 'compile' command to cli", + "type": "minor" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file 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..abc7f4c55d --- /dev/null +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -0,0 +1,20 @@ +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 = 'compile a project and output code to a local directory'; +export const builder = (yargsBuilder: typeof yargs) => + yargsBuilder + .string('outDir') + .describe('outDir', 'output code directory') + .default('outDir', './') + .string('path') + .describe('path', 'contract directory'); + +export const handler = (argv: Yarguments>) => { + start(async (_cmd, config) => { + await createTasks(argv.path ? argv.path : config.contracts.path, argv.outDir).run(); + }); +}; 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/compile/compileContract.ts b/packages/neo-one-cli/src/compile/compileContract.ts new file mode 100644 index 0000000000..5f613c9fb8 --- /dev/null +++ b/packages/neo-one-cli/src/compile/compileContract.ts @@ -0,0 +1,37 @@ +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..84383b96c5 --- /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 { writeContract } from './writeContract'; + +export const createTasks = (path: string, outDir: string) => + 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(result, outDir); + + 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/writeContract.ts b/packages/neo-one-cli/src/compile/writeContract.ts new file mode 100644 index 0000000000..66b8c6702f --- /dev/null +++ b/packages/neo-one-cli/src/compile/writeContract.ts @@ -0,0 +1,12 @@ +import { CompileContractResult } from '@neo-one/smart-contract-compiler'; +import fs from 'fs-extra'; +import path from 'path'; + +export const writeContract = async (contract: CompileContractResult, outDir: string) => { + await fs.ensureDir(outDir); + const outputPath = path.resolve(outDir, `${contract.contract.name}.contract.json`); + + const contractJSON = JSON.stringify(contract, undefined, 2); + + return fs.writeFile(outputPath, contractJSON); +}; From 0865a3b17ead8f44a725752ea67afe656e7e2868 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 13 Apr 2020 16:42:56 -0700 Subject: [PATCH 031/141] chore(publish): update changelogs for cli 2.5 (#2006) --- .../rush_2019-11-06-21-56.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../cli-common/rush_2019-11-06-21-56.json | 11 - .../cli/compiler_2020-04-13-22-53.json | 11 - .../cli/fix-skip_2020-03-22-20-52.json | 11 - .../@neo-one/cli/master_2019-12-04-18-33.json | 11 - .../@neo-one/cli/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../cli/update-deps_2019-12-03-22-14.json | 11 - .../cli/upgrade-ts_2020-02-26-01-16.json | 11 - .../master_2019-12-04-18-33.json | 11 - .../client-common/rush_2019-11-06-21-56.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../client-core/master_2019-12-04-18-33.json | 11 - .../node-restore_2020-03-16-20-14.json | 11 - .../client-core/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../client-full/rush_2019-11-06-21-56.json | 11 - .../node-restore_2020-03-16-20-14.json | 11 - .../client-switch/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../client/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../http-context/rush_2019-11-06-21-56.json | 11 - .../@neo-one/http/rush_2019-11-06-21-56.json | 11 - .../logger-config/rush_2019-11-06-21-56.json | 11 - .../logger/rush_2019-11-06-21-56.json | 11 - .../fix-wallaby_2020-02-10-22-10.json | 11 - .../node-bin/rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../node-consensus/rush_2019-11-06-21-56.json | 11 - .../node-core/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../node-http-rpc/rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../node-network/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../node-offline/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../test-fix_2020-02-10-20-01.json | 11 - .../node-protocol/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../node-restore_2020-03-16-20-14.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../node-vm/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../node-vm/upgrade-ts_2020-02-26-01-16.json | 11 - .../node/node-restore_2020-03-16-20-14.json | 11 - .../@neo-one/node/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../react-common/master_2019-12-04-18-33.json | 11 - .../react-common/rush_2019-11-06-21-56.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../upgrade-ts_2020-02-26-01-35.json | 11 - .../react-core/master_2019-12-04-18-33.json | 11 - .../react-core/rush_2019-11-06-21-56.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../upgrade-ts_2020-02-26-01-35.json | 11 - .../@neo-one/react/rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../new-ts_2020-02-27-21-52.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../smart-contract/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../@neo-one/suite/rush_2019-11-06-21-56.json | 11 - .../ts-utils/rush_2019-11-06-21-56.json | 11 - .../ts-utils/upgrade-ts_2020-02-26-01-16.json | 11 - .../new-ts_2020-02-27-21-52.json | 11 - .../rush_2019-11-06-21-56.json | 11 - .../upgrade-ts_2020-02-26-01-16.json | 11 - .../utils-node/rush_2019-11-06-21-56.json | 11 - .../update-deps_2019-12-03-22-14.json | 11 - .../@neo-one/utils/rush_2019-11-06-21-56.json | 11 - .../switcheocontract_2019-12-04-18-49.json | 11 - .../utils/upgrade-ts_2020-02-26-01-16.json | 11 - packages/neo-one-build-tests/package.json | 2 +- .../neo-one-cli-common-node/CHANGELOG.json | 36 +++ packages/neo-one-cli-common-node/CHANGELOG.md | 93 +------ packages/neo-one-cli-common-node/package.json | 8 +- packages/neo-one-cli-common/CHANGELOG.json | 31 +++ packages/neo-one-cli-common/CHANGELOG.md | 84 +------ packages/neo-one-cli-common/package.json | 10 +- packages/neo-one-cli/CHANGELOG.json | 99 ++++++++ packages/neo-one-cli/CHANGELOG.md | 226 +----------------- packages/neo-one-cli/package.json | 42 ++-- packages/neo-one-client-common/CHANGELOG.json | 30 +++ packages/neo-one-client-common/CHANGELOG.md | 160 +------------ packages/neo-one-client-common/package.json | 4 +- packages/neo-one-client-core/CHANGELOG.json | 33 +++ packages/neo-one-client-core/CHANGELOG.md | 199 +-------------- packages/neo-one-client-core/package.json | 8 +- .../neo-one-client-full-common/CHANGELOG.json | 25 ++ .../neo-one-client-full-common/CHANGELOG.md | 119 +-------- .../neo-one-client-full-common/package.json | 6 +- .../neo-one-client-full-core/CHANGELOG.json | 37 +++ .../neo-one-client-full-core/CHANGELOG.md | 171 +------------ .../neo-one-client-full-core/package.json | 14 +- packages/neo-one-client-full/CHANGELOG.json | 25 ++ packages/neo-one-client-full/CHANGELOG.md | 148 +----------- packages/neo-one-client-full/package.json | 6 +- packages/neo-one-client-switch/CHANGELOG.json | 36 +++ packages/neo-one-client-switch/CHANGELOG.md | 181 +------------- packages/neo-one-client-switch/package.json | 8 +- packages/neo-one-client/CHANGELOG.json | 28 +++ packages/neo-one-client/CHANGELOG.md | 159 +----------- packages/neo-one-client/package.json | 8 +- .../package.json | 10 +- .../neo-one-developer-tools/CHANGELOG.json | 22 ++ packages/neo-one-developer-tools/CHANGELOG.md | 145 +---------- packages/neo-one-developer-tools/package.json | 4 +- packages/neo-one-editor-server/package.json | 8 +- packages/neo-one-editor/package.json | 12 +- packages/neo-one-http-context/CHANGELOG.json | 28 +++ packages/neo-one-http-context/CHANGELOG.md | 60 +---- packages/neo-one-http-context/package.json | 8 +- packages/neo-one-http/CHANGELOG.json | 17 ++ packages/neo-one-http/CHANGELOG.md | 99 +------- packages/neo-one-http/package.json | 2 +- packages/neo-one-local-browser/package.json | 12 +- packages/neo-one-logger-config/CHANGELOG.json | 17 ++ packages/neo-one-logger-config/CHANGELOG.md | 25 +- packages/neo-one-logger-config/package.json | 2 +- packages/neo-one-logger/CHANGELOG.json | 22 ++ packages/neo-one-logger/CHANGELOG.md | 52 +--- packages/neo-one-logger/package.json | 4 +- packages/neo-one-node-bin/CHANGELOG.json | 40 ++++ packages/neo-one-node-bin/CHANGELOG.md | 201 +--------------- packages/neo-one-node-bin/package.json | 16 +- .../neo-one-node-blockchain/CHANGELOG.json | 37 +++ packages/neo-one-node-blockchain/CHANGELOG.md | 157 +----------- packages/neo-one-node-blockchain/package.json | 12 +- packages/neo-one-node-browser/package.json | 20 +- .../neo-one-node-consensus/CHANGELOG.json | 31 +++ packages/neo-one-node-consensus/CHANGELOG.md | 149 +----------- packages/neo-one-node-consensus/package.json | 10 +- packages/neo-one-node-core/CHANGELOG.json | 31 +++ packages/neo-one-node-core/CHANGELOG.md | 147 +----------- packages/neo-one-node-core/package.json | 8 +- packages/neo-one-node-http-rpc/CHANGELOG.json | 40 ++++ packages/neo-one-node-http-rpc/CHANGELOG.md | 196 +-------------- packages/neo-one-node-http-rpc/package.json | 16 +- .../neo-one-node-neo-settings/CHANGELOG.json | 28 +++ .../neo-one-node-neo-settings/CHANGELOG.md | 122 +--------- .../neo-one-node-neo-settings/package.json | 8 +- packages/neo-one-node-network/CHANGELOG.json | 31 +++ packages/neo-one-node-network/CHANGELOG.md | 146 +---------- packages/neo-one-node-network/package.json | 10 +- packages/neo-one-node-offline/CHANGELOG.json | 33 +++ packages/neo-one-node-offline/CHANGELOG.md | 124 +--------- packages/neo-one-node-offline/package.json | 8 +- packages/neo-one-node-protocol/CHANGELOG.json | 37 +++ packages/neo-one-node-protocol/CHANGELOG.md | 160 +------------ packages/neo-one-node-protocol/package.json | 14 +- .../neo-one-node-rpc-handler/CHANGELOG.json | 34 +++ .../neo-one-node-rpc-handler/CHANGELOG.md | 144 +---------- .../neo-one-node-rpc-handler/package.json | 12 +- .../neo-one-node-storage-cache/CHANGELOG.json | 31 +++ .../neo-one-node-storage-cache/CHANGELOG.md | 130 +--------- .../neo-one-node-storage-cache/package.json | 10 +- .../CHANGELOG.json | 28 +++ .../neo-one-node-storage-common/CHANGELOG.md | 122 +--------- .../neo-one-node-storage-common/package.json | 8 +- .../CHANGELOG.json | 31 +++ .../neo-one-node-storage-levelup/CHANGELOG.md | 128 +--------- .../neo-one-node-storage-levelup/package.json | 10 +- packages/neo-one-node-tools/package.json | 4 +- packages/neo-one-node-vm/CHANGELOG.json | 31 +++ packages/neo-one-node-vm/CHANGELOG.md | 162 +------------ packages/neo-one-node-vm/package.json | 10 +- packages/neo-one-node/CHANGELOG.json | 52 ++++ packages/neo-one-node/CHANGELOG.md | 194 +-------------- packages/neo-one-node/package.json | 24 +- packages/neo-one-react-common/CHANGELOG.json | 33 +++ packages/neo-one-react-common/CHANGELOG.md | 163 +------------ packages/neo-one-react-common/package.json | 4 +- packages/neo-one-react-core/CHANGELOG.json | 28 +++ packages/neo-one-react-core/CHANGELOG.md | 138 +---------- packages/neo-one-react-core/package.json | 2 +- packages/neo-one-react/CHANGELOG.json | 17 ++ packages/neo-one-react/CHANGELOG.md | 57 +---- packages/neo-one-react/package.json | 2 +- .../CHANGELOG.json | 34 +++ .../CHANGELOG.md | 203 +--------------- .../package.json | 10 +- .../CHANGELOG.json | 31 +++ .../CHANGELOG.md | 136 +---------- .../package.json | 8 +- .../CHANGELOG.json | 67 ++++++ .../CHANGELOG.md | 197 +-------------- .../package.json | 30 +-- .../neo-one-smart-contract-lib/CHANGELOG.json | 28 +++ .../neo-one-smart-contract-lib/CHANGELOG.md | 204 +--------------- .../neo-one-smart-contract-lib/package.json | 8 +- .../package.json | 6 +- .../CHANGELOG.json | 40 ++++ .../CHANGELOG.md | 171 +------------ .../package.json | 16 +- .../CHANGELOG.json | 46 ++++ .../neo-one-smart-contract-test/CHANGELOG.md | 187 +-------------- .../neo-one-smart-contract-test/package.json | 20 +- .../CHANGELOG.json | 28 +++ .../CHANGELOG.md | 168 +------------ .../package.json | 6 +- .../neo-one-smart-contract/CHANGELOG.json | 17 ++ packages/neo-one-smart-contract/CHANGELOG.md | 65 +---- packages/neo-one-smart-contract/package.json | 4 +- packages/neo-one-suite/CHANGELOG.json | 37 +++ packages/neo-one-suite/CHANGELOG.md | 132 +--------- packages/neo-one-suite/package.json | 14 +- packages/neo-one-ts-utils/CHANGELOG.json | 20 ++ packages/neo-one-ts-utils/CHANGELOG.md | 146 +---------- packages/neo-one-ts-utils/package.json | 2 +- .../CHANGELOG.json | 34 +++ .../CHANGELOG.md | 142 +---------- .../package.json | 8 +- packages/neo-one-utils-node/CHANGELOG.json | 27 +++ packages/neo-one-utils-node/CHANGELOG.md | 103 +------- packages/neo-one-utils-node/package.json | 4 +- packages/neo-one-utils/CHANGELOG.json | 20 ++ packages/neo-one-utils/CHANGELOG.md | 101 +------- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 8 +- 247 files changed, 2091 insertions(+), 7565 deletions(-) delete mode 100644 common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json delete mode 100644 common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json delete mode 100644 common/changes/@neo-one/cli/master_2019-12-04-18-33.json delete mode 100644 common/changes/@neo-one/cli/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/client-common/master_2019-12-04-18-33.json delete mode 100644 common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/client-core/master_2019-12-04-18-33.json delete mode 100644 common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json delete mode 100644 common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json delete mode 100644 common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/client/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/http/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/logger/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json delete mode 100644 common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json delete mode 100644 common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json delete mode 100644 common/changes/@neo-one/node/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/react-common/master_2019-12-04-18-33.json delete mode 100644 common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json delete mode 100644 common/changes/@neo-one/react-core/master_2019-12-04-18-33.json delete mode 100644 common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json delete mode 100644 common/changes/@neo-one/react/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/suite/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json delete mode 100644 common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json delete mode 100644 common/changes/@neo-one/utils/rush_2019-11-06-21-56.json delete mode 100644 common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json delete mode 100644 common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json create mode 100644 packages/neo-one-cli-common-node/CHANGELOG.json create mode 100644 packages/neo-one-cli-common/CHANGELOG.json create mode 100644 packages/neo-one-cli/CHANGELOG.json create mode 100644 packages/neo-one-client-common/CHANGELOG.json create mode 100644 packages/neo-one-client-core/CHANGELOG.json create mode 100644 packages/neo-one-client-full-common/CHANGELOG.json create mode 100644 packages/neo-one-client-full-core/CHANGELOG.json create mode 100644 packages/neo-one-client-full/CHANGELOG.json create mode 100644 packages/neo-one-client-switch/CHANGELOG.json create mode 100644 packages/neo-one-client/CHANGELOG.json create mode 100644 packages/neo-one-developer-tools/CHANGELOG.json create mode 100644 packages/neo-one-http-context/CHANGELOG.json create mode 100644 packages/neo-one-http/CHANGELOG.json create mode 100644 packages/neo-one-logger-config/CHANGELOG.json create mode 100644 packages/neo-one-logger/CHANGELOG.json create mode 100644 packages/neo-one-node-bin/CHANGELOG.json create mode 100644 packages/neo-one-node-blockchain/CHANGELOG.json create mode 100644 packages/neo-one-node-consensus/CHANGELOG.json create mode 100644 packages/neo-one-node-core/CHANGELOG.json create mode 100644 packages/neo-one-node-http-rpc/CHANGELOG.json create mode 100644 packages/neo-one-node-neo-settings/CHANGELOG.json create mode 100644 packages/neo-one-node-network/CHANGELOG.json create mode 100644 packages/neo-one-node-offline/CHANGELOG.json create mode 100644 packages/neo-one-node-protocol/CHANGELOG.json create mode 100644 packages/neo-one-node-rpc-handler/CHANGELOG.json create mode 100644 packages/neo-one-node-storage-cache/CHANGELOG.json create mode 100644 packages/neo-one-node-storage-common/CHANGELOG.json create mode 100644 packages/neo-one-node-storage-levelup/CHANGELOG.json create mode 100644 packages/neo-one-node-vm/CHANGELOG.json create mode 100644 packages/neo-one-node/CHANGELOG.json create mode 100644 packages/neo-one-react-common/CHANGELOG.json create mode 100644 packages/neo-one-react-core/CHANGELOG.json create mode 100644 packages/neo-one-react/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-codegen/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-compiler-node/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-compiler/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-lib/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-test-common/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-test/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json create mode 100644 packages/neo-one-smart-contract/CHANGELOG.json create mode 100644 packages/neo-one-suite/CHANGELOG.json create mode 100644 packages/neo-one-ts-utils/CHANGELOG.json create mode 100644 packages/neo-one-typescript-concatenator/CHANGELOG.json create mode 100644 packages/neo-one-utils-node/CHANGELOG.json create mode 100644 packages/neo-one-utils/CHANGELOG.json diff --git a/common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json deleted file mode 100644 index a022effccb..0000000000 --- a/common/changes/@neo-one/cli-common-node/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/cli-common-node" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 82aafa8273..0000000000 --- a/common/changes/@neo-one/cli-common-node/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "update cosmicconfig to 6.0.0", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 3f0f0f28eb..0000000000 --- a/common/changes/@neo-one/cli-common-node/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json deleted file mode 100644 index 9c6d68dff5..0000000000 --- a/common/changes/@neo-one/cli-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/cli-common" - } - ], - "packageName": "@neo-one/cli-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json b/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json deleted file mode 100644 index 629f44c0cc..0000000000 --- a/common/changes/@neo-one/cli/compiler_2020-04-13-22-53.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "add 'compile' command to cli", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json b/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json deleted file mode 100644 index ddd9ffadae..0000000000 --- a/common/changes/@neo-one/cli/fix-skip_2020-03-22-20-52.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Minor bug fix. `yarn neo-one build` would start a NEO Tracker instance, even if config specified to skip NEO Tracker.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/master_2019-12-04-18-33.json b/common/changes/@neo-one/cli/master_2019-12-04-18-33.json deleted file mode 100644 index ad98b3f8ed..0000000000 --- a/common/changes/@neo-one/cli/master_2019-12-04-18-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update dependencies", - "type": "patch", - "packageName": "@neo-one/cli" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json b/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json deleted file mode 100644 index 288c787a9c..0000000000 --- a/common/changes/@neo-one/cli/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/cli" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 673d56202b..0000000000 --- a/common/changes/@neo-one/cli/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Add e2e exchange test based on switcheo", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json deleted file mode 100644 index f4d9327066..0000000000 --- a/common/changes/@neo-one/cli/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "update @types/react to 16.9.14", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index b17daf8c47..0000000000 --- a/common/changes/@neo-one/cli/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json b/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json deleted file mode 100644 index f5e0b49026..0000000000 --- a/common/changes/@neo-one/client-common/master_2019-12-04-18-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update dependencies", - "type": "patch", - "packageName": "@neo-one/client-common" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json deleted file mode 100644 index 9bd93972bb..0000000000 --- a/common/changes/@neo-one/client-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-common" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 21e0f1d19a..0000000000 --- a/common/changes/@neo-one/client-common/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "update scrypt-js to 3.0.0", - "type": "patch" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json b/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json deleted file mode 100644 index eb7748f6be..0000000000 --- a/common/changes/@neo-one/client-core/master_2019-12-04-18-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update dependencies", - "type": "patch", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json deleted file mode 100644 index 3b3a7db585..0000000000 --- a/common/changes/@neo-one/client-core/node-restore_2020-03-16-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "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/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json deleted file mode 100644 index 80f5eac741..0000000000 --- a/common/changes/@neo-one/client-core/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index d0e55efa35..0000000000 --- a/common/changes/@neo-one/client-core/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-core", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json deleted file mode 100644 index 05b2034a6c..0000000000 --- a/common/changes/@neo-one/client-full-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-full-common" - } - ], - "packageName": "@neo-one/client-full-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json deleted file mode 100644 index d8d3c7b4ed..0000000000 --- a/common/changes/@neo-one/client-full-core/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-full-core" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json deleted file mode 100644 index 9b60df4150..0000000000 --- a/common/changes/@neo-one/client-full/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-full" - } - ], - "packageName": "@neo-one/client-full", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json deleted file mode 100644 index c227bf48e1..0000000000 --- a/common/changes/@neo-one/client-switch/node-restore_2020-03-16-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-switch", - "comment": "wrap opencensus modules with lazy resolving", - "type": "patch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json deleted file mode 100644 index f47f817481..0000000000 --- a/common/changes/@neo-one/client-switch/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index d41aad832a..0000000000 --- a/common/changes/@neo-one/client-switch/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-switch", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-switch", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 76976aa543..0000000000 --- a/common/changes/@neo-one/client-switch/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-switch", - "comment": "update @opencensus packages to 0.0.19", - "type": "patch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/rush_2019-11-06-21-56.json b/common/changes/@neo-one/client/rush_2019-11-06-21-56.json deleted file mode 100644 index 48d4e04aa0..0000000000 --- a/common/changes/@neo-one/client/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/client" - } - ], - "packageName": "@neo-one/client", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index b147b9f089..0000000000 --- a/common/changes/@neo-one/client/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json b/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json deleted file mode 100644 index 02d50597dd..0000000000 --- a/common/changes/@neo-one/developer-tools/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/developer-tools" - } - ], - "packageName": "@neo-one/developer-tools", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json b/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json deleted file mode 100644 index 8cbe73eef8..0000000000 --- a/common/changes/@neo-one/http-context/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/http-context" - } - ], - "packageName": "@neo-one/http-context", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http/rush_2019-11-06-21-56.json b/common/changes/@neo-one/http/rush_2019-11-06-21-56.json deleted file mode 100644 index 01b07d637f..0000000000 --- a/common/changes/@neo-one/http/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/http" - } - ], - "packageName": "@neo-one/http", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json b/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json deleted file mode 100644 index 2164cb21da..0000000000 --- a/common/changes/@neo-one/logger-config/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/logger-config" - } - ], - "packageName": "@neo-one/logger-config", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json b/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json deleted file mode 100644 index a65ac3f00a..0000000000 --- a/common/changes/@neo-one/logger/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/logger" - } - ], - "packageName": "@neo-one/logger", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json b/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json deleted file mode 100644 index a22bfef47c..0000000000 --- a/common/changes/@neo-one/node-bin/fix-wallaby_2020-02-10-22-10.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-bin", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-bin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json deleted file mode 100644 index 649aadc715..0000000000 --- a/common/changes/@neo-one/node-bin/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-bin" - } - ], - "packageName": "@neo-one/node-bin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json deleted file mode 100644 index cc112ffb73..0000000000 --- a/common/changes/@neo-one/node-blockchain/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-blockchain" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 7b3b2e4882..0000000000 --- a/common/changes/@neo-one/node-blockchain/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-blockchain", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index c8496b2488..0000000000 --- a/common/changes/@neo-one/node-blockchain/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-blockchain", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json deleted file mode 100644 index 8f71463a15..0000000000 --- a/common/changes/@neo-one/node-consensus/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-consensus" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json deleted file mode 100644 index 503f8883e2..0000000000 --- a/common/changes/@neo-one/node-core/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-core" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 8e5a6aa3a8..0000000000 --- a/common/changes/@neo-one/node-core/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-core", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index d465034bfd..0000000000 --- a/common/changes/@neo-one/node-core/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/node-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json deleted file mode 100644 index 804c8ef36a..0000000000 --- a/common/changes/@neo-one/node-http-rpc/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-http-rpc" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json deleted file mode 100644 index 2b76db21c9..0000000000 --- a/common/changes/@neo-one/node-neo-settings/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-neo-settings" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index c7b395df34..0000000000 --- a/common/changes/@neo-one/node-neo-settings/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-neo-settings", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json deleted file mode 100644 index 896886d7e8..0000000000 --- a/common/changes/@neo-one/node-network/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-network" - } - ], - "packageName": "@neo-one/node-network", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 262543ad4b..0000000000 --- a/common/changes/@neo-one/node-network/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-network", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-network", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json deleted file mode 100644 index c99d528c3c..0000000000 --- a/common/changes/@neo-one/node-offline/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-offline" - } - ], - "packageName": "@neo-one/node-offline", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index d541d055e9..0000000000 --- a/common/changes/@neo-one/node-offline/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-offline", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-offline", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json b/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json deleted file mode 100644 index 6dd5d07f47..0000000000 --- a/common/changes/@neo-one/node-offline/test-fix_2020-02-10-20-01.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-offline", - "comment": "feat(logs): add better logging to chainfile sync", - "type": "patch" - } - ], - "packageName": "@neo-one/node-offline", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json deleted file mode 100644 index 099f7dc86a..0000000000 --- a/common/changes/@neo-one/node-protocol/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-protocol" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index d5c0a3c665..0000000000 --- a/common/changes/@neo-one/node-protocol/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-protocol", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json deleted file mode 100644 index e6225ce5fe..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/node-restore_2020-03-16-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-rpc-handler", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json deleted file mode 100644 index 18ca224341..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-rpc-handler" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json deleted file mode 100644 index 05d3fc528c..0000000000 --- a/common/changes/@neo-one/node-storage-cache/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-storage-cache" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index b589d4e3fe..0000000000 --- a/common/changes/@neo-one/node-storage-cache/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-cache", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json deleted file mode 100644 index 38685a4f06..0000000000 --- a/common/changes/@neo-one/node-storage-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-storage-common" - } - ], - "packageName": "@neo-one/node-storage-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 80961efbd5..0000000000 --- a/common/changes/@neo-one/node-storage-common/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-common", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-storage-common", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json deleted file mode 100644 index 03c6f9529c..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-storage-levelup" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 8c24c487ee..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-levelup", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json deleted file mode 100644 index 9dac86e55e..0000000000 --- a/common/changes/@neo-one/node-vm/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node-vm" - } - ], - "packageName": "@neo-one/node-vm", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index d97b22fce6..0000000000 --- a/common/changes/@neo-one/node-vm/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-vm", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-vm", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 22f1d17899..0000000000 --- a/common/changes/@neo-one/node-vm/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-vm", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-vm", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json b/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json deleted file mode 100644 index 44c35357d9..0000000000 --- a/common/changes/@neo-one/node/node-restore_2020-03-16-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/node/rush_2019-11-06-21-56.json deleted file mode 100644 index 7755fd63b1..0000000000 --- a/common/changes/@neo-one/node/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/node" - } - ], - "packageName": "@neo-one/node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index a24576a71f..0000000000 --- a/common/changes/@neo-one/node/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json b/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json deleted file mode 100644 index f0cfda6ac4..0000000000 --- a/common/changes/@neo-one/react-common/master_2019-12-04-18-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update dependencies", - "type": "patch", - "packageName": "@neo-one/react-common" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json deleted file mode 100644 index d183a07736..0000000000 --- a/common/changes/@neo-one/react-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/react-common" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 341d6dc345..0000000000 --- a/common/changes/@neo-one/react-common/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-common", - "comment": "update @types/react to 16.9.14 and @types/react-dom to 16.9.4", - "type": "patch" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json b/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json deleted file mode 100644 index 42a0b1321d..0000000000 --- a/common/changes/@neo-one/react-common/upgrade-ts_2020-02-26-01-35.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-common", - "comment": "Upgrade TS to v3.8.1-rc. Fix types.", - "type": "patch" - } - ], - "packageName": "@neo-one/react-common", - "email": "spencercorwin@icloud.com" -} diff --git a/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json b/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json deleted file mode 100644 index 8bd8ed14bc..0000000000 --- a/common/changes/@neo-one/react-core/master_2019-12-04-18-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update dependencies", - "type": "patch", - "packageName": "@neo-one/react-core" - } - ], - "packageName": "@neo-one/react-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json deleted file mode 100644 index d44adfd601..0000000000 --- a/common/changes/@neo-one/react-core/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/react-core" - } - ], - "packageName": "@neo-one/react-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 4ad061a7de..0000000000 --- a/common/changes/@neo-one/react-core/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-core", - "comment": "update @types/react to 16.9.14", - "type": "patch" - } - ], - "packageName": "@neo-one/react-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json b/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json deleted file mode 100644 index 1511600a97..0000000000 --- a/common/changes/@neo-one/react-core/upgrade-ts_2020-02-26-01-35.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-core", - "comment": "Upgrade TS to v3.8.1-rc. Fix types.", - "type": "patch" - } - ], - "packageName": "@neo-one/react-core", - "email": "spencercorwin@icloud.com" -} diff --git a/common/changes/@neo-one/react/rush_2019-11-06-21-56.json b/common/changes/@neo-one/react/rush_2019-11-06-21-56.json deleted file mode 100644 index 630d97bc0c..0000000000 --- a/common/changes/@neo-one/react/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/react" - } - ], - "packageName": "@neo-one/react", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json deleted file mode 100644 index 8d98aa426f..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-codegen" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 55ac48686d..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-codegen", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json deleted file mode 100644 index 2f6de8bcfc..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-compiler-node" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 2a71fefa80..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler-node", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json b/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json deleted file mode 100644 index 7c8fa80516..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/new-ts_2020-02-27-21-52.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Add support for new language features in TS v3.7, v3.8", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json deleted file mode 100644 index be59c9ffbe..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-compiler" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 88e771e54d..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 69b1a7abee..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing.", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} diff --git a/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json deleted file mode 100644 index 5d9fb9ce8c..0000000000 --- a/common/changes/@neo-one/smart-contract-lib/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-lib" - } - ], - "packageName": "@neo-one/smart-contract-lib", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json deleted file mode 100644 index 25bb2ab435..0000000000 --- a/common/changes/@neo-one/smart-contract-test-common/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-test-common" - } - ], - "packageName": "@neo-one/smart-contract-test-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json deleted file mode 100644 index 05e5a055fc..0000000000 --- a/common/changes/@neo-one/smart-contract-test/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-test" - } - ], - "packageName": "@neo-one/smart-contract-test", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json deleted file mode 100644 index 22e6ad4fe4..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract-typescript-plugin" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index 8ae1efda6a..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-typescript-plugin", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json b/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json deleted file mode 100644 index a98538275c..0000000000 --- a/common/changes/@neo-one/smart-contract/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/smart-contract" - } - ], - "packageName": "@neo-one/smart-contract", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index cb67e0f0c9..0000000000 --- a/common/changes/@neo-one/smart-contract/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json b/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json deleted file mode 100644 index ae6416bec8..0000000000 --- a/common/changes/@neo-one/suite/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/suite" - } - ], - "packageName": "@neo-one/suite", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json b/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json deleted file mode 100644 index 2ba07f3141..0000000000 --- a/common/changes/@neo-one/ts-utils/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/ts-utils" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index b74938be34..0000000000 --- a/common/changes/@neo-one/ts-utils/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/ts-utils", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json b/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json deleted file mode 100644 index 9ca3484388..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/new-ts_2020-02-27-21-52.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/typescript-concatenator", - "comment": "Add support for new language features in TS v3.7, v3.8", - "type": "minor" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json b/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json deleted file mode 100644 index 45e3358810..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/typescript-concatenator" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index e26e7190a2..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/typescript-concatenator", - "comment": "Upgrade TS to v3.8.1-rc. Add support for namespace exports.", - "type": "minor" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "spencercorwin@icloud.com" -} diff --git a/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json b/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json deleted file mode 100644 index f1f30b3cb0..0000000000 --- a/common/changes/@neo-one/utils-node/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/utils-node" - } - ], - "packageName": "@neo-one/utils-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json b/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json deleted file mode 100644 index 472750a83f..0000000000 --- a/common/changes/@neo-one/utils-node/update-deps_2019-12-03-22-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils-node", - "comment": "update npm-package-arg to 7.0.0", - "type": "patch" - } - ], - "packageName": "@neo-one/utils-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json b/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json deleted file mode 100644 index 556037f2cd..0000000000 --- a/common/changes/@neo-one/utils/rush_2019-11-06-21-56.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Migrate to Rush", - "type": "minor", - "packageName": "@neo-one/utils" - } - ], - "packageName": "@neo-one/utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json b/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json deleted file mode 100644 index 2d8fd4f5a0..0000000000 --- a/common/changes/@neo-one/utils/switcheocontract_2019-12-04-18-49.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/utils", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json b/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json deleted file mode 100644 index f8e24e4d5f..0000000000 --- a/common/changes/@neo-one/utils/upgrade-ts_2020-02-26-01-16.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils", - "comment": "Upgrade TS to v3.8.1-rc", - "type": "minor" - } - ], - "packageName": "@neo-one/utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index a355088788..08539144d5 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@babel/preset-env": "^7.6.3", "@neo-one/build-tools": "^1.0.0", - "@neo-one/logger": "^2.3.0", + "@neo-one/logger": "^2.4.0", "app-root-dir": "^1.0.2", "babel-jest": "^24.9.0", "bn.js": "^5.0.0", 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..db4b553ebb --- /dev/null +++ b/packages/neo-one-cli-common-node/CHANGELOG.json @@ -0,0 +1,36 @@ +{ + "name": "@neo-one/cli-common-node", + "entries": [ + { + "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..0f49c19ded 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.md +++ b/packages/neo-one-cli-common-node/CHANGELOG.md @@ -1,91 +1,16 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.5.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -### Features +- Migrate to Rush +- Upgrade TS to v3.8.1-rc -* **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)) +### Patches +- update cosmicconfig to 6.0.0 - - - -# [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) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [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/package.json b/packages/neo-one-cli-common-node/package.json index e994fc028f..d911cbd52c 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common-node", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/cli-common": "^2.4.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", + "@neo-one/cli-common": "^2.5.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", diff --git a/packages/neo-one-cli-common/CHANGELOG.json b/packages/neo-one-cli-common/CHANGELOG.json new file mode 100644 index 0000000000..3cb3592682 --- /dev/null +++ b/packages/neo-one-cli-common/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/cli-common", + "entries": [ + { + "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..a17e3d13fd 100644 --- a/packages/neo-one-cli-common/CHANGELOG.md +++ b/packages/neo-one-cli-common/CHANGELOG.md @@ -1,83 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.5.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -### Features +- Migrate to Rush -* **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.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) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [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/package.json b/packages/neo-one-cli-common/package.json index fc97f4a5aa..ff7accd8cd 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE code common to the cli and browser.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-cli/CHANGELOG.json b/packages/neo-one-cli/CHANGELOG.json new file mode 100644 index 0000000000..0f3cd46afa --- /dev/null +++ b/packages/neo-one-cli/CHANGELOG.json @@ -0,0 +1,99 @@ +{ + "name": "@neo-one/cli", + "entries": [ + { + "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..081a7df70a 100644 --- a/packages/neo-one-cli/CHANGELOG.md +++ b/packages/neo-one-cli/CHANGELOG.md @@ -1,220 +1,20 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.5.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -### Features +- add 'compile' command to cli +- Migrate to Rush +- Upgrade TS to v3.8.1-rc -* **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)) +### 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 - - - -# [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) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/cli - - - - - -# [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/package.json b/packages/neo-one-cli/package.json index dd49ce27b3..edd07adbd1 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE CLI for developing NEO dapps.", "main": "./lib/index", "scripts": { @@ -17,24 +17,24 @@ "dependencies": { "@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": "^2.3.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "@neo-one/client-switch": "^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-core": "^2.3.0", - "@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", + "@neo-one/cli-common": "^2.5.0", + "@neo-one/cli-common-node": "^2.5.0", + "@neo-one/client": "^2.4.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/logger-config": "^2.4.0", + "@neo-one/node": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-neo-settings": "^2.4.0", + "@neo-one/smart-contract-codegen": "^2.4.0", + "@neo-one/smart-contract-compiler": "^2.4.0", + "@neo-one/smart-contract-compiler-node": "^2.4.0", + "@neo-one/utils": "^2.4.0", + "@neo-one/utils-node": "^2.4.0", "@neotracker/core": "1.3.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", @@ -56,8 +56,8 @@ "devDependencies": { "@angular/core": "^8.2.7", "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract": "^2.3.0", - "@neo-one/smart-contract-test": "^2.3.1", + "@neo-one/smart-contract": "^2.4.0", + "@neo-one/smart-contract-test": "^2.4.0", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json new file mode 100644 index 0000000000..fbf9a21a5b --- /dev/null +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -0,0 +1,30 @@ +{ + "name": "@neo-one/client-common", + "entries": [ + { + "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..5e6b88f772 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,158 +1,16 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-common +### Minor changes +- Migrate to Rush +### Patches +- update dependencies +- update scrypt-js to 3.0.0 - -## [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) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -# [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/package.json b/packages/neo-one-client-common/package.json index 6448e684a1..69ae9ec623 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-common", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client common code.", "main": "./lib/index", "scripts": { @@ -12,7 +12,7 @@ }, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "bs58": "^4.0.1", diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json new file mode 100644 index 0000000000..b7e8df9d07 --- /dev/null +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -0,0 +1,33 @@ +{ + "name": "@neo-one/client-core", + "entries": [ + { + "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..720ca68d46 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,198 +1,15 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-core +### Minor changes +- Migrate to Rush +### Patches +- update dependencies - -## [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) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [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/package.json b/packages/neo-one-client-core/package.json index e6e65fe4fc..e698fe3cd9 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-core", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client core types implementation.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "bignumber.js": "^9.0.0", 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..941294841a --- /dev/null +++ b/packages/neo-one-client-full-common/CHANGELOG.json @@ -0,0 +1,25 @@ +{ + "name": "@neo-one/client-full-common", + "entries": [ + { + "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..e77b250fb1 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.md +++ b/packages/neo-one-client-full-common/CHANGELOG.md @@ -1,118 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-full-common +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [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/package.json b/packages/neo-one-client-full-common/package.json index e1906de287..6b8bd61eed 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-common", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE full client common code.", "main": "./lib/index", "scripts": { @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/utils": "^2.4.0", "tslib": "^1.10.0" }, "devDependencies": { 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..d44d47b57a --- /dev/null +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -0,0 +1,37 @@ +{ + "name": "@neo-one/client-full-core", + "entries": [ + { + "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..259f2e5712 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,170 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-full-core +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [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) - -**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/package.json b/packages/neo-one-client-full-core/package.json index 4a158bba80..1bbeddadf6 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client-full core types implementation.", "main": "./lib/index", "scripts": { @@ -11,18 +11,18 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full-common": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-core": "^2.3.0", + "@neo-one/node-core": "^2.4.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-full/CHANGELOG.json b/packages/neo-one-client-full/CHANGELOG.json new file mode 100644 index 0000000000..44a366ca86 --- /dev/null +++ b/packages/neo-one-client-full/CHANGELOG.json @@ -0,0 +1,25 @@ +{ + "name": "@neo-one/client-full", + "entries": [ + { + "version": "2.4.0", + "tag": "@neo-one/client-full_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\" 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-client-full/CHANGELOG.md b/packages/neo-one-client-full/CHANGELOG.md index fb928f76e5..519d252b6b 100644 --- a/packages/neo-one-client-full/CHANGELOG.md +++ b/packages/neo-one-client-full/CHANGELOG.md @@ -1,147 +1,11 @@ -# Change Log +# Change Log - @neo-one/client-full -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 Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.12...@neo-one/client-full@2.3.0) (2019-10-23) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-full +### Minor changes +- Migrate to Rush - - - -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.11...@neo-one/client-full@1.1.12) (2019-10-23) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.10...@neo-one/client-full@1.1.11) (2019-10-23) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.9...@neo-one/client-full@1.1.10) (2019-09-04) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.8...@neo-one/client-full@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.7...@neo-one/client-full@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.6...@neo-one/client-full@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.5...@neo-one/client-full@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.4...@neo-one/client-full@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.3...@neo-one/client-full@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.2...@neo-one/client-full@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/client-full@1.1.1...@neo-one/client-full@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.1.0...@neo-one/client-full@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.0.3...@neo-one/client-full@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.0.3-alpha.0...@neo-one/client-full@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.0.2...@neo-one/client-full@1.0.3-alpha.0) (2019-02-15) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.0.1...@neo-one/client-full@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-full - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full@1.0.0...@neo-one/client-full@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-full diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index c0c33913c2..f81584821c 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client extended API.", "main": "./lib/index", "scripts": { @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0" + "@neo-one/client": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.json b/packages/neo-one-client-switch/CHANGELOG.json new file mode 100644 index 0000000000..84f4b56b6b --- /dev/null +++ b/packages/neo-one-client-switch/CHANGELOG.json @@ -0,0 +1,36 @@ +{ + "name": "@neo-one/client-switch", + "entries": [ + { + "version": "2.4.0", + "tag": "@neo-one/client-switch_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "patch": [ + { + "comment": "wrap opencensus modules with lazy resolving" + }, + { + "comment": "update @opencensus packages to 0.0.19" + } + ], + "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-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-client-switch/CHANGELOG.md b/packages/neo-one-client-switch/CHANGELOG.md index 9a417a57c8..f255d3ec2b 100644 --- a/packages/neo-one-client-switch/CHANGELOG.md +++ b/packages/neo-one-client-switch/CHANGELOG.md @@ -1,179 +1,16 @@ -# Change Log +# Change Log - @neo-one/client-switch -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 Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.4.4...@neo-one/client-switch@2.3.0) (2019-10-23) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client-switch +### Minor changes +- Migrate to Rush +### Patches +- wrap opencensus modules with lazy resolving +- update @opencensus packages to 0.0.19 - -## [1.4.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.4.3...@neo-one/client-switch@1.4.4) (2019-10-23) - -**Note:** Version bump only for package @neo-one/client-switch - - - - - -## [1.4.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.4.2...@neo-one/client-switch@1.4.3) (2019-10-23) - - -### Bug Fixes - -* **deps:** update dependency @opencensus/exporter-jaeger to ^0.0.17 ([6faa2f1](https://github.com/neo-one-suite/neo-one/commit/6faa2f10aa7b1a8c2323fc6540188f70ed83ec40)) -* **deps:** update dependency @opencensus/web-propagation-tracecontext to ^0.0.7 ([5194f4f](https://github.com/neo-one-suite/neo-one/commit/5194f4f10e4be3a0f0cfe1a2c7b359966b8702c5)) - - - - - -## [1.4.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.4.1...@neo-one/client-switch@1.4.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/client-switch - - - - - -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.4.0...@neo-one/client-switch@1.4.1) (2019-08-30) - - -### Bug Fixes - -* **deps:** update dependency @opencensus/web-types to ^0.0.6 ([7670360](https://github.com/neo-one-suite/neo-one/commit/7670360)) - - - - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.3.0...@neo-one/client-switch@1.4.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.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.2.2...@neo-one/client-switch@1.3.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)) - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.2.1...@neo-one/client-switch@1.2.2) (2019-07-29) - - -### Bug Fixes - -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.68.2 ([1ac7f9f](https://github.com/neo-one-suite/neo-one/commit/1ac7f9f)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.2.0...@neo-one/client-switch@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)) -* **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-switch@1.1.2...@neo-one/client-switch@1.2.0) (2019-06-04) - - -### Bug Fixes - -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.50.0 ([623a5fe](https://github.com/neo-one-suite/neo-one/commit/623a5fe)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.53.0 ([9d05523](https://github.com/neo-one-suite/neo-one/commit/9d05523)) - - -### Features - -* **client:** Add HDKeyStore ([c09b44f](https://github.com/neo-one-suite/neo-one/commit/c09b44f)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.1.1...@neo-one/client-switch@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-switch - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.1.0...@neo-one/client-switch@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.41.1 ([73cf278](https://github.com/neo-one-suite/neo-one/commit/73cf278)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.43.0 ([446a335](https://github.com/neo-one-suite/neo-one/commit/446a335)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.46.0 ([ab77385](https://github.com/neo-one-suite/neo-one/commit/ab77385)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.47.0 ([58a4242](https://github.com/neo-one-suite/neo-one/commit/58a4242)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.48.0 ([a9ee758](https://github.com/neo-one-suite/neo-one/commit/a9ee758)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.0.2...@neo-one/client-switch@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-switch - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.0.2-alpha.0...@neo-one/client-switch@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-switch - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.0.1...@neo-one/client-switch@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.31.0 ([b7b2141](https://github.com/neo-one-suite/neo-one/commit/b7b2141)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.32.0 ([480c2fd](https://github.com/neo-one-suite/neo-one/commit/480c2fd)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.35.0 ([08e103e](https://github.com/neo-one-suite/neo-one/commit/08e103e)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.38.0 ([33f719d](https://github.com/neo-one-suite/neo-one/commit/33f719d)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.38.6 ([ad7536d](https://github.com/neo-one-suite/neo-one/commit/ad7536d)) -* **deps:** update dependency @ledgerhq/hw-transport-u2f to v4.39.0 ([2311205](https://github.com/neo-one-suite/neo-one/commit/2311205)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-switch@1.0.0...@neo-one/client-switch@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-switch diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 708ae3a80c..674e0e641f 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-switch", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client library for browser/node differences.", "main": "./lib/index", "browser": "./lib/index.browser", @@ -14,9 +14,9 @@ "dependencies": { "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", - "@neo-one/client-common": "^2.3.0", - "@neo-one/node-vm": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/node-vm": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@opencensus/core": "^0.0.19", "@opencensus/exporter-jaeger": "^0.0.19", "@opencensus/exporter-prometheus": "^0.0.19", diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json new file mode 100644 index 0000000000..60eddb7faf --- /dev/null +++ b/packages/neo-one-client/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/client", + "entries": [ + { + "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..b352f30811 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,158 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/client +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/client - - - - - -# [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) - - -### Features - -* **dapi codegen:** setup DapiUserAccountProvider by default during codegen ([6b438db](https://github.com/neo-one-suite/neo-one/commit/6b438dba827b47272d5fc11f390f6912eb0303bc)) - - - - - -## [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/package.json b/packages/neo-one-client/package.json index 8661dc78a2..a51d742fbd 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE client API.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/developer-tools": "^2.4.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index aa70fce98d..df52e54017 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -14,11 +14,11 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", - "@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", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/react": "^2.4.0", + "@neo-one/react-common": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@reactivex/ix-esnext-esm": "^2.5.3", "@render-props/size-observer": "^0.1.18", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-developer-tools/CHANGELOG.json b/packages/neo-one-developer-tools/CHANGELOG.json new file mode 100644 index 0000000000..a2fcd908ad --- /dev/null +++ b/packages/neo-one-developer-tools/CHANGELOG.json @@ -0,0 +1,22 @@ +{ + "name": "@neo-one/developer-tools", + "entries": [ + { + "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..6a5bf7fb36 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.md +++ b/packages/neo-one-developer-tools/CHANGELOG.md @@ -1,144 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/developer-tools +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [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/package.json b/packages/neo-one-developer-tools/package.json index 8061c1a353..c4d0357218 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/developer-tools", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE developer tools.", "main": "./lib/index", "scripts": { @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.3.0", + "@neo-one/client-core": "^2.4.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index 9794204d1a..3d88216253 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -10,10 +10,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/utils": "^2.4.0", + "@neo-one/utils-node": "^2.4.0", "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index dd8c02b877..f2b0edd3e5 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -28,17 +28,17 @@ "@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": "^2.4.0", + "@neo-one/client-switch": "^2.4.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/smart-contract-compiler": "^2.3.0", + "@neo-one/react": "^2.4.0", + "@neo-one/react-common": "^2.4.0", + "@neo-one/smart-contract-compiler": "^2.4.0", "@neo-one/smart-contract-test-browser": "^2.3.1", - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^2.4.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", diff --git a/packages/neo-one-http-context/CHANGELOG.json b/packages/neo-one-http-context/CHANGELOG.json new file mode 100644 index 0000000000..3dd3a6bddd --- /dev/null +++ b/packages/neo-one-http-context/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/http-context", + "entries": [ + { + "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..1303184702 100644 --- a/packages/neo-one-http-context/CHANGELOG.md +++ b/packages/neo-one-http-context/CHANGELOG.md @@ -1,59 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/http-context +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/http-context - - - - - -## [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) - -**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/package.json b/packages/neo-one-http-context/package.json index 8efec6a510..b05628168b 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http-context", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE http context utilities.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-http/CHANGELOG.json b/packages/neo-one-http/CHANGELOG.json new file mode 100644 index 0000000000..18c0c7f3e1 --- /dev/null +++ b/packages/neo-one-http/CHANGELOG.json @@ -0,0 +1,17 @@ +{ + "name": "@neo-one/http", + "entries": [ + { + "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..d96b7743af 100644 --- a/packages/neo-one-http/CHANGELOG.md +++ b/packages/neo-one-http/CHANGELOG.md @@ -1,98 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/http +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/http - - - - - -# [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/package.json b/packages/neo-one-http/package.json index 545f9bc5d7..cf93c0ada5 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE http utilities.", "main": "./lib/index", "scripts": { diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 4708ce4066..301322ccb4 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -11,13 +11,13 @@ }, "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": "^2.5.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.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.4.0", + "@neo-one/smart-contract-compiler": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "lodash": "^4.17.15", diff --git a/packages/neo-one-logger-config/CHANGELOG.json b/packages/neo-one-logger-config/CHANGELOG.json new file mode 100644 index 0000000000..a620fc4be3 --- /dev/null +++ b/packages/neo-one-logger-config/CHANGELOG.json @@ -0,0 +1,17 @@ +{ + "name": "@neo-one/logger-config", + "entries": [ + { + "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..15fb01788b 100644 --- a/packages/neo-one-logger-config/CHANGELOG.md +++ b/packages/neo-one-logger-config/CHANGELOG.md @@ -1,24 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.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.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) - -**Note:** Version bump only for package @neo-one/logger-config - - - - - -## 1.0.1 (2019-08-22) - -**Note:** Version bump only for package @neo-one/logger-config diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index 3006fbfaf3..4bbbfc6b54 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger-config", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE logging utility config", "main": "./lib/index", "scripts": { diff --git a/packages/neo-one-logger/CHANGELOG.json b/packages/neo-one-logger/CHANGELOG.json new file mode 100644 index 0000000000..47c42b21c0 --- /dev/null +++ b/packages/neo-one-logger/CHANGELOG.json @@ -0,0 +1,22 @@ +{ + "name": "@neo-one/logger", + "entries": [ + { + "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..1ae428b144 100644 --- a/packages/neo-one-logger/CHANGELOG.md +++ b/packages/neo-one-logger/CHANGELOG.md @@ -1,51 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.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.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) - -**Note:** Version bump only for package @neo-one/logger - - - - - -## [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/package.json b/packages/neo-one-logger/package.json index d02c7435fe..82b959f347 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE logging utility", "main": "./lib/index", "scripts": { @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/logger-config": "^2.3.0", + "@neo-one/logger-config": "^2.4.0", "pino": "^5.12.6", "pino-pretty": "^3.2.1", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-bin/CHANGELOG.json b/packages/neo-one-node-bin/CHANGELOG.json new file mode 100644 index 0000000000..3e8aecec34 --- /dev/null +++ b/packages/neo-one-node-bin/CHANGELOG.json @@ -0,0 +1,40 @@ +{ + "name": "@neo-one/node-bin", + "entries": [ + { + "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..cd99d221bd 100644 --- a/packages/neo-one-node-bin/CHANGELOG.md +++ b/packages/neo-one-node-bin/CHANGELOG.md @@ -1,200 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-bin +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [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/package.json b/packages/neo-one-node-bin/package.json index d7a08c2ca5..99f8ec719f 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-bin", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE NEO executable full node.", "bin": { "neo-one-node": "bin/neo-one-node.js" @@ -13,11 +13,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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.4.0", + "@neo-one/node": "^2.4.0", + "@neo-one/node-neo-settings": "^2.4.0", + "@neo-one/utils": "^2.4.0", + "@neo-one/utils-node": "^2.4.0", "env-paths": "^2.2.0", "execa": "^3.2.0", "import-local": "^3.0.2", @@ -29,8 +29,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.3.0", - "@neo-one/client-common": "^2.3.0", + "@neo-one/client": "^2.4.0", + "@neo-one/client-common": "^2.4.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", "@types/rc": "^1.1.0", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.json b/packages/neo-one-node-blockchain/CHANGELOG.json new file mode 100644 index 0000000000..7696cd88b7 --- /dev/null +++ b/packages/neo-one-node-blockchain/CHANGELOG.json @@ -0,0 +1,37 @@ +{ + "name": "@neo-one/node-blockchain", + "entries": [ + { + "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..d9f394a095 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.md +++ b/packages/neo-one-node-blockchain/CHANGELOG.md @@ -1,155 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-blockchain +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [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/package.json b/packages/neo-one-node-blockchain/package.json index d10439e32d..f85f6475f8 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-blockchain", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE NEO blockchain implementation.", "main": "./lib/index", "scripts": { @@ -11,11 +11,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index b273cc193c..9ed7d37c14 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -10,16 +10,16 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/node-blockchain": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-neo-settings": "^2.4.0", + "@neo-one/node-protocol": "^2.4.0", + "@neo-one/node-rpc-handler": "^2.4.0", + "@neo-one/node-storage-levelup": "^2.4.0", + "@neo-one/node-vm": "^2.4.0", + "@neo-one/utils": "^2.4.0", "core-js": "^3.2.1", "level-js": "^5.0.0", "levelup": "^4.1.0", diff --git a/packages/neo-one-node-consensus/CHANGELOG.json b/packages/neo-one-node-consensus/CHANGELOG.json new file mode 100644 index 0000000000..f287c29c98 --- /dev/null +++ b/packages/neo-one-node-consensus/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-consensus", + "entries": [ + { + "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..0b991f80e7 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.md +++ b/packages/neo-one-node-consensus/CHANGELOG.md @@ -1,148 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-consensus +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [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) - -**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/package.json b/packages/neo-one-node-consensus/package.json index 3130f799fe..fa4dad4376 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-consensus", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE NEO consensus protocol.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-node-core/CHANGELOG.json b/packages/neo-one-node-core/CHANGELOG.json new file mode 100644 index 0000000000..86b6ec409e --- /dev/null +++ b/packages/neo-one-node-core/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-core", + "entries": [ + { + "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..81ab78f5b9 100644 --- a/packages/neo-one-node-core/CHANGELOG.md +++ b/packages/neo-one-node-core/CHANGELOG.md @@ -1,145 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-core +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [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/package.json b/packages/neo-one-node-core/package.json index 7eef5f8d1b..155d2bc925 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-core", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE core node types.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-full-common": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", 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..e8a6dd37aa --- /dev/null +++ b/packages/neo-one-node-http-rpc/CHANGELOG.json @@ -0,0 +1,40 @@ +{ + "name": "@neo-one/node-http-rpc", + "entries": [ + { + "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..cb6fc6966d 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.md +++ b/packages/neo-one-node-http-rpc/CHANGELOG.md @@ -1,195 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-http-rpc +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [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/package.json b/packages/neo-one-node-http-rpc/package.json index 29fceab52f..9d5d65c902 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE RPC server.", "main": "./lib/index", "scripts": { @@ -11,13 +11,13 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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.5.0", + "@neo-one/http": "^2.4.0", + "@neo-one/http-context": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-rpc-handler": "^2.4.0", + "@neo-one/utils": "^2.4.0", "cross-fetch": "^3.0.4", "execa": "^3.2.0", "koa": "^2.7.0", 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..f130e4b97d --- /dev/null +++ b/packages/neo-one-node-neo-settings/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/node-neo-settings", + "entries": [ + { + "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..a7fc0e9970 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.md +++ b/packages/neo-one-node-neo-settings/CHANGELOG.md @@ -1,121 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-neo-settings +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [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/package.json b/packages/neo-one-node-neo-settings/package.json index d1307dc853..9017907f07 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-network/CHANGELOG.json b/packages/neo-one-node-network/CHANGELOG.json new file mode 100644 index 0000000000..124890a50a --- /dev/null +++ b/packages/neo-one-node-network/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-network", + "entries": [ + { + "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..ef697c2d1c 100644 --- a/packages/neo-one-node-network/CHANGELOG.md +++ b/packages/neo-one-node-network/CHANGELOG.md @@ -1,145 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-network +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [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/package.json b/packages/neo-one-node-network/package.json index e5fc7e7e68..37b1ecc1f0 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-network", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE NEO network protocol.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-offline/CHANGELOG.json b/packages/neo-one-node-offline/CHANGELOG.json new file mode 100644 index 0000000000..7fdac0d608 --- /dev/null +++ b/packages/neo-one-node-offline/CHANGELOG.json @@ -0,0 +1,33 @@ +{ + "name": "@neo-one/node-offline", + "entries": [ + { + "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..09570f3edc 100644 --- a/packages/neo-one-node-offline/CHANGELOG.md +++ b/packages/neo-one-node-offline/CHANGELOG.md @@ -1,123 +1,15 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-offline +### Minor changes +- Migrate to Rush +### Patches +- feat(logs): add better logging to chainfile sync - -## [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) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [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/package.json b/packages/neo-one-node-offline/package.json index 82c6b67355..9ea7a92ad2 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-offline", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-protocol/CHANGELOG.json b/packages/neo-one-node-protocol/CHANGELOG.json new file mode 100644 index 0000000000..a9965757b6 --- /dev/null +++ b/packages/neo-one-node-protocol/CHANGELOG.json @@ -0,0 +1,37 @@ +{ + "name": "@neo-one/node-protocol", + "entries": [ + { + "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..7f58f4b153 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.md +++ b/packages/neo-one-node-protocol/CHANGELOG.md @@ -1,159 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-protocol +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [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/package.json b/packages/neo-one-node-protocol/package.json index d55706d3c4..22ba504cda 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-protocol", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE NEO node and consensus protocol.", "main": "./lib/index", "scripts": { @@ -11,12 +11,12 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-consensus": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bloem": "^0.2.4", "bloom-filter": "^0.2.0", "bn.js": "^5.0.0", 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..fd04733821 --- /dev/null +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.json @@ -0,0 +1,34 @@ +{ + "name": "@neo-one/node-rpc-handler", + "entries": [ + { + "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..150f3e3dea 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.md +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.md @@ -1,143 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-rpc-handler +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [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/package.json b/packages/neo-one-node-rpc-handler/package.json index 2074eb6701..a050d7e67a 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE RPC handler.", "main": "./lib/index", "scripts": { @@ -11,11 +11,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-switch": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, 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..972c14e227 --- /dev/null +++ b/packages/neo-one-node-storage-cache/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-storage-cache", + "entries": [ + { + "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..22ee385f48 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.md +++ b/packages/neo-one-node-storage-cache/CHANGELOG.md @@ -1,129 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-storage-cache +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [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/package.json b/packages/neo-one-node-storage-cache/package.json index e55dc51e6f..7317844823 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE node storage cache.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-storage-common": "^2.4.0", + "@neo-one/utils": "^2.4.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" }, 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..b11a40c33e --- /dev/null +++ b/packages/neo-one-node-storage-common/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/node-storage-common", + "entries": [ + { + "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..58b600121b 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.md +++ b/packages/neo-one-node-storage-common/CHANGELOG.md @@ -1,121 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-storage-common +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [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/package.json b/packages/neo-one-node-storage-common/package.json index 1c22f20e7d..cb471fea40 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-common", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE node storage common.", "main": "./lib/index", "scripts": { @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "tslib": "^1.10.0" }, "devDependencies": { 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..06cadde2b4 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-storage-levelup", + "entries": [ + { + "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..677d6bd6aa 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.md +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.md @@ -1,127 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-storage-levelup +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [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/package.json b/packages/neo-one-node-storage-levelup/package.json index 48d1f1d366..63a653eb3b 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE levelup node storage.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-storage-common": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@types/levelup": "^3.1.1", "levelup": "^4.1.0", "rxjs": "^6.5.3", diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 5b6bd45300..08bab39b48 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@google-cloud/storage": "^4.3.2", - "@neo-one/logger": "^2.3.0", - "@neo-one/utils-node": "^2.3.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/utils-node": "^2.4.0", "execa": "^3.2.0", "import-local": "^3.0.2", "rc": "^1.2.8", diff --git a/packages/neo-one-node-vm/CHANGELOG.json b/packages/neo-one-node-vm/CHANGELOG.json new file mode 100644 index 0000000000..a81db314e7 --- /dev/null +++ b/packages/neo-one-node-vm/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-vm", + "entries": [ + { + "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..85ba42959d 100644 --- a/packages/neo-one-node-vm/CHANGELOG.md +++ b/packages/neo-one-node-vm/CHANGELOG.md @@ -1,161 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node-vm +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -## [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/package.json b/packages/neo-one-node-vm/package.json index 8414d59baf..57aedaabc2 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-vm", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE NEO VM.", "main": "./lib/index", "scripts": { @@ -11,10 +11,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-full-common": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "bitwise": "^2.0.3", diff --git a/packages/neo-one-node/CHANGELOG.json b/packages/neo-one-node/CHANGELOG.json new file mode 100644 index 0000000000..dd8c989317 --- /dev/null +++ b/packages/neo-one-node/CHANGELOG.json @@ -0,0 +1,52 @@ +{ + "name": "@neo-one/node", + "entries": [ + { + "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..0a03bd58f3 100644 --- a/packages/neo-one-node/CHANGELOG.md +++ b/packages/neo-one-node/CHANGELOG.md @@ -1,193 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/node +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [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) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [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/package.json b/packages/neo-one-node/package.json index 5cb024fa11..7a95160a94 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE NEO full node.", "main": "./lib/index", "scripts": { @@ -11,17 +11,17 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/node-blockchain": "^2.4.0", + "@neo-one/node-core": "^2.4.0", + "@neo-one/node-http-rpc": "^2.4.0", + "@neo-one/node-network": "^2.4.0", + "@neo-one/node-offline": "^2.4.0", + "@neo-one/node-protocol": "^2.4.0", + "@neo-one/node-storage-levelup": "^2.4.0", + "@neo-one/node-vm": "^2.4.0", + "@neo-one/utils": "^2.4.0", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", "leveldown": "^5.1.1", diff --git a/packages/neo-one-react-common/CHANGELOG.json b/packages/neo-one-react-common/CHANGELOG.json new file mode 100644 index 0000000000..ef09ee21ce --- /dev/null +++ b/packages/neo-one-react-common/CHANGELOG.json @@ -0,0 +1,33 @@ +{ + "name": "@neo-one/react-common", + "entries": [ + { + "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..4e4b543e07 100644 --- a/packages/neo-one-react-common/CHANGELOG.md +++ b/packages/neo-one-react-common/CHANGELOG.md @@ -1,160 +1,17 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/react-common +### Minor changes +- Migrate to Rush +### Patches +- 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. - -## [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) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -# [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) - - -### Bug Fixes - -* **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)) - - -### 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/package.json b/packages/neo-one-react-common/package.json index b28ef3c955..37fee2208b 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-common", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE shared react.", "main": "./lib/index", "scripts": { @@ -16,7 +16,7 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@neo-one/react-core": "^2.3.0", + "@neo-one/react-core": "^2.4.0", "popper.js": "^1.15.0", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/packages/neo-one-react-core/CHANGELOG.json b/packages/neo-one-react-core/CHANGELOG.json new file mode 100644 index 0000000000..bd3666056c --- /dev/null +++ b/packages/neo-one-react-core/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/react-core", + "entries": [ + { + "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..fd012c7bd5 100644 --- a/packages/neo-one-react-core/CHANGELOG.md +++ b/packages/neo-one-react-core/CHANGELOG.md @@ -1,135 +1,17 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/react-core +### Minor changes +- Migrate to Rush +### Patches +- update dependencies +- update @types/react to 16.9.14 +- Upgrade TS to v3.8.1-rc. Fix types. - -## [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) - -**Note:** Version bump only for package @neo-one/react-core - - - - - -## [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) - -**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/package.json b/packages/neo-one-react-core/package.json index 57bb2df42f..98adf26061 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-core", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE shared react.", "main": "./lib/index", "scripts": { diff --git a/packages/neo-one-react/CHANGELOG.json b/packages/neo-one-react/CHANGELOG.json new file mode 100644 index 0000000000..74be12bf50 --- /dev/null +++ b/packages/neo-one-react/CHANGELOG.json @@ -0,0 +1,17 @@ +{ + "name": "@neo-one/react", + "entries": [ + { + "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..5470502d89 100644 --- a/packages/neo-one-react/CHANGELOG.md +++ b/packages/neo-one-react/CHANGELOG.md @@ -1,56 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/react +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/react - - - - - -## [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/package.json b/packages/neo-one-react/package.json index 93bac8dc64..77cf09937a 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE React utilities.", "main": "./lib/index", "scripts": { 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..54e8147ca9 --- /dev/null +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.json @@ -0,0 +1,34 @@ +{ + "name": "@neo-one/smart-contract-codegen", + "entries": [ + { + "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..567d402101 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.md +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.md @@ -1,201 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-codegen +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - -# [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) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [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) - -**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/package.json b/packages/neo-one-smart-contract-codegen/package.json index 51ac95b374..7c345febd4 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract codegen.", "main": "./lib/index", "scripts": { @@ -12,10 +12,10 @@ }, "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": "^2.5.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", "prettier": "^1.18.2", "safe-stable-stringify": "^1.1.0", 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..3005b2aabc --- /dev/null +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/smart-contract-compiler-node", + "entries": [ + { + "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..22c454de53 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md @@ -1,134 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node +### 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/smart-contract-compiler-node@1.2.0...@neo-one/smart-contract-compiler-node@1.2.1) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -# [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) - - -### 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/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 85796d48a5..9ba324142b 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", "main": "./lib/index", "scripts": { @@ -12,9 +12,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.3.0", - "@neo-one/smart-contract-lib": "^2.3.1", - "@neo-one/utils": "^2.3.0", + "@neo-one/smart-contract": "^2.4.0", + "@neo-one/smart-contract-lib": "^2.4.0", + "@neo-one/utils": "^2.4.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", 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..3d7912738c --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.json @@ -0,0 +1,67 @@ +{ + "name": "@neo-one/smart-contract-compiler", + "entries": [ + { + "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..946e38fe76 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.md @@ -1,194 +1,13 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-compiler +### 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 Nullish Coalescing. - - - -## [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) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -# [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) - - -### 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.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/package.json b/packages/neo-one-smart-contract-compiler/package.json index 0ef1cc0543..f622415649 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract compiler.", "main": "./lib/index", "scripts": { @@ -13,14 +13,14 @@ "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": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full-common": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0", + "@neo-one/smart-contract": "^2.4.0", + "@neo-one/ts-utils": "^2.4.0", + "@neo-one/typescript-concatenator": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", "safe-stable-stringify": "^1.1.0", @@ -30,12 +30,12 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@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/client-switch": "^2.4.0", + "@neo-one/node-blockchain": "^2.4.0", + "@neo-one/node-neo-settings": "^2.4.0", + "@neo-one/node-storage-levelup": "^2.4.0", + "@neo-one/node-vm": "^2.4.0", + "@neo-one/smart-contract-compiler-node": "^2.4.0", "@types/app-root-dir": "^0.1.0", "@types/babel__code-frame": "^7.0.1", "@types/bn.js": "^4.11.5", 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..17e6e9bc4c --- /dev/null +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/smart-contract-lib", + "entries": [ + { + "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..0b26ae8ef2 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.md +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.md @@ -1,203 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-lib +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [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) - -**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 a4f091361b..2544df0285 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE TypeScript common smart contracts.", "main": "./lib/index.ts", "smartContract": true, @@ -10,12 +10,12 @@ "pack": "gulp pack" }, "dependencies": { - "@neo-one/smart-contract": "^2.3.0" + "@neo-one/smart-contract": "^2.4.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "gulp": "~4.0.2", diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 054685def5..8c57bef651 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -10,12 +10,12 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.3.0", + "@neo-one/client-core": "^2.4.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.4.0", + "@neo-one/utils": "^2.4.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "tslib": "^1.10.0" 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..3e0bb5fdfe --- /dev/null +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.json @@ -0,0 +1,40 @@ +{ + "name": "@neo-one/smart-contract-test-common", + "entries": [ + { + "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..5f6f1be0d3 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.md @@ -1,170 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-test-common +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [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) - -**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/package.json b/packages/neo-one-smart-contract-test-common/package.json index 4712010732..3cf7b40968 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract test harness common code.", "main": "./lib/index", "scripts": { @@ -11,13 +11,13 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.5.0", + "@neo-one/client-common": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/client-full-core": "^2.4.0", + "@neo-one/logger": "^2.4.0", + "@neo-one/smart-contract-compiler": "^2.4.0", + "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, 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..bdae2777bd --- /dev/null +++ b/packages/neo-one-smart-contract-test/CHANGELOG.json @@ -0,0 +1,46 @@ +{ + "name": "@neo-one/smart-contract-test", + "entries": [ + { + "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..3818b93186 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test/CHANGELOG.md @@ -1,186 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-test +### Minor changes +- Migrate to Rush - - - -# [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) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [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) - -**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/package.json b/packages/neo-one-smart-contract-test/package.json index cbf2a55813..b7d8afe0d8 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract test harness.", "main": "./lib/index", "scripts": { @@ -11,21 +11,21 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "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": "^2.4.0", + "@neo-one/client-core": "^2.4.0", + "@neo-one/node": "^2.4.0", + "@neo-one/node-neo-settings": "^2.4.0", + "@neo-one/smart-contract-compiler-node": "^2.4.0", + "@neo-one/smart-contract-test-common": "^2.4.0", + "@neo-one/utils": "^2.4.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.3.0", - "@neo-one/smart-contract-lib": "^2.3.1", + "@neo-one/smart-contract": "^2.4.0", + "@neo-one/smart-contract-lib": "^2.4.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/memdown": "^3.0.0", 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..8881718102 --- /dev/null +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/smart-contract-typescript-plugin", + "entries": [ + { + "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..65046a92f7 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md @@ -1,166 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin +### 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/smart-contract-typescript-plugin@1.2.0...@neo-one/smart-contract-typescript-plugin@1.2.1) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -# [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) - - -### 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/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index e1baae16d4..2c90149d3e 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE TypeScript typescript plugin.", "main": "./lib/index", "scripts": { @@ -12,8 +12,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", + "@neo-one/smart-contract-compiler": "^2.4.0", + "@neo-one/smart-contract-compiler-node": "^2.4.0", "typescript": "3.8.1-rc" }, "devDependencies": { diff --git a/packages/neo-one-smart-contract/CHANGELOG.json b/packages/neo-one-smart-contract/CHANGELOG.json new file mode 100644 index 0000000000..6d5e72d4ba --- /dev/null +++ b/packages/neo-one-smart-contract/CHANGELOG.json @@ -0,0 +1,17 @@ +{ + "name": "@neo-one/smart-contract", + "entries": [ + { + "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..a16c26a9f8 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.md +++ b/packages/neo-one-smart-contract/CHANGELOG.md @@ -1,64 +1,11 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/smart-contract +### Minor changes +- Migrate to Rush - - - -## [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) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -## [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 5ea5ac8655..bd3cf9d25e 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE smart contract apis.", "main": "./lib/index.d.ts", "scripts": { @@ -14,4 +14,4 @@ }, "smartContract": true, "sideEffects": false -} \ No newline at end of file +} diff --git a/packages/neo-one-suite/CHANGELOG.json b/packages/neo-one-suite/CHANGELOG.json new file mode 100644 index 0000000000..27508d97c7 --- /dev/null +++ b/packages/neo-one-suite/CHANGELOG.json @@ -0,0 +1,37 @@ +{ + "name": "@neo-one/suite", + "entries": [ + { + "version": "2.4.0", + "tag": "@neo-one/suite_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\" 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/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/smart-contract-test\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-typescript-plugin\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-suite/CHANGELOG.md b/packages/neo-one-suite/CHANGELOG.md index 964b942f19..6fe8164d81 100644 --- a/packages/neo-one-suite/CHANGELOG.md +++ b/packages/neo-one-suite/CHANGELOG.md @@ -1,131 +1,11 @@ -# Change Log +# Change Log - @neo-one/suite -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 Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. -## [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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/suite +### Minor changes +- Migrate to Rush - - - -# [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 index 3bdae7075a..f3da3e54d8 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/suite", - "version": "2.3.1", + "version": "2.4.0", "description": "NEO•ONE core dependencies for easy installation", "scripts": { "build": "", @@ -9,12 +9,12 @@ "pack": "gulp pack" }, "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" + "@neo-one/cli": "^2.5.0", + "@neo-one/client": "^2.4.0", + "@neo-one/smart-contract": "^2.4.0", + "@neo-one/smart-contract-lib": "^2.4.0", + "@neo-one/smart-contract-test": "^2.4.0", + "@neo-one/smart-contract-typescript-plugin": "^2.4.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-ts-utils/CHANGELOG.json b/packages/neo-one-ts-utils/CHANGELOG.json new file mode 100644 index 0000000000..362b90ab98 --- /dev/null +++ b/packages/neo-one-ts-utils/CHANGELOG.json @@ -0,0 +1,20 @@ +{ + "name": "@neo-one/ts-utils", + "entries": [ + { + "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..04b097ba56 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.md +++ b/packages/neo-one-ts-utils/CHANGELOG.md @@ -1,144 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.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.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) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -# [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/package.json b/packages/neo-one-ts-utils/package.json index 4a4c5f4795..d422e41398 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/ts-utils", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE TypeScript utils.", "main": "./lib/index", "scripts": { diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.json b/packages/neo-one-typescript-concatenator/CHANGELOG.json new file mode 100644 index 0000000000..6abb6b8ae5 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.json @@ -0,0 +1,34 @@ +{ + "name": "@neo-one/typescript-concatenator", + "entries": [ + { + "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..fa626bfdb9 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.md +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.md @@ -1,139 +1,13 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/typescript-concatenator +### 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.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) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -# [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/package.json b/packages/neo-one-typescript-concatenator/package.json index 8645039f70..b01fa0cc26 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE TypeScript Concatenator", "main": "./lib/index", "scripts": { @@ -12,8 +12,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/ts-utils": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/ts-utils": "^2.4.0", + "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", @@ -21,7 +21,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", + "@neo-one/smart-contract-compiler-node": "^2.4.0", "@types/app-root-dir": "^0.1.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-utils-node/CHANGELOG.json b/packages/neo-one-utils-node/CHANGELOG.json new file mode 100644 index 0000000000..92c57211c1 --- /dev/null +++ b/packages/neo-one-utils-node/CHANGELOG.json @@ -0,0 +1,27 @@ +{ + "name": "@neo-one/utils-node", + "entries": [ + { + "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..3dc57a0af3 100644 --- a/packages/neo-one-utils-node/CHANGELOG.md +++ b/packages/neo-one-utils-node/CHANGELOG.md @@ -1,102 +1,15 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/utils-node +### Minor changes +- Migrate to Rush +### Patches +- update npm-package-arg to 7.0.0 - -## [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) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [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) - -**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/package.json b/packages/neo-one-utils-node/package.json index ec54d52507..fd41534bef 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils-node", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE shared Nodejs utils.", "main": "./lib/index", "scripts": { @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^2.4.0", "execa": "^3.2.0", "npm-package-arg": "^7.0.0", "pino": "^5.12.6", diff --git a/packages/neo-one-utils/CHANGELOG.json b/packages/neo-one-utils/CHANGELOG.json new file mode 100644 index 0000000000..ae37452517 --- /dev/null +++ b/packages/neo-one-utils/CHANGELOG.json @@ -0,0 +1,20 @@ +{ + "name": "@neo-one/utils", + "entries": [ + { + "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..24ac284480 100644 --- a/packages/neo-one-utils/CHANGELOG.md +++ b/packages/neo-one-utils/CHANGELOG.md @@ -1,99 +1,12 @@ -# 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 Mon, 13 Apr 2020 23:20:32 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) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/utils +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - -## [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) - -**Note:** Version bump only for package @neo-one/utils - - - - - -## [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/package.json b/packages/neo-one-utils/package.json index 5638a59754..4e692d693b 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils", - "version": "2.3.0", + "version": "2.4.0", "description": "NEO•ONE shared utils.", "main": "./lib/index", "license": "MIT", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 06bc180b16..ebd7626567 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -20,8 +20,8 @@ "@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.4.0", + "@neo-one/react-common": "^2.4.0", "@reach/router": "^1.2.1", "@render-props/viewport": "^0.3.1", "babel-plugin-emotion": "^10.0.21", @@ -70,8 +70,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.3.0", - "@neo-one/react-core": "^2.3.0", + "@neo-one/client": "^2.4.0", + "@neo-one/react-core": "^2.4.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", From e931424966841d4c46775728f7e4b97d96b8ac5b Mon Sep 17 00:00:00 2001 From: Alex Fragapane <34611820+afragapane@users.noreply.github.com> Date: Wed, 22 Apr 2020 14:22:57 -0700 Subject: [PATCH 032/141] feat(client): Add NEODataProvider to work with C# node (#2004) --- .../addnodeoption_2020-04-10-20-33.json | 11 + .../addnodeoption_2020-04-10-20-33.json | 11 + .../addnodeoption_2020-04-15-22-26.json | 11 + .../addnodeoption_2020-04-10-20-33.json | 11 + .../environments/test/jestSetup.js | 2 + .../transaction/transactionModels.test.ts | 65 +- packages/neo-one-client-common/src/common.ts | 4 +- .../transaction/InvocationTransactionModel.ts | 53 +- .../neo-one-client-common/src/models/types.ts | 50 + packages/neo-one-client-common/src/types.ts | 5 + packages/neo-one-client-common/src/utils.ts | 1 + .../src/__data__/factory.ts | 149 + .../neo-one-client-core/src/__data__/index.ts | 1 + .../src/__data__/verifyDataProvider.ts | 271 + .../__tests__/provider/JSONRPCClient.test.ts | 40 + .../provider/NEODataProvider.test.ts | 371 + .../provider/NEOONEDataProvider.test.ts | 324 +- .../__tests__/provider/NEOONEProvider.test.ts | 6 +- .../__tests__/provider/NEOProvider.test.ts | 195 + .../__snapshots__/JSONRPCClient.test.ts.snap | 52 + .../__snapshots__/NEOProvider.test.ts.snap | 3 + packages/neo-one-client-core/src/args.ts | 6 + packages/neo-one-client-core/src/errors.ts | 9 +- .../src/provider/DataProviderBase.ts | 280 + .../src/provider/JSONRPCClient.ts | 56 +- .../src/provider/JSONRPCHTTPProvider.ts | 1 + .../src/provider/NEODataProvider.ts | 298 + .../src/provider/NEOONEDataProvider.ts | 656 +- .../src/provider/NEOONEProvider.ts | 142 +- .../src/provider/NEOProvider.ts | 24 + .../src/provider/ProviderBase.ts | 148 + .../src/provider/convert.ts | 429 + .../neo-one-client-core/src/provider/index.ts | 4 + packages/neo-one-client-core/src/sc/common.ts | 3 +- .../src/user/LocalUserAccountProvider.ts | 15 +- .../src/user/UserAccountProviderBase.ts | 34 +- .../user/LocalUserAccountProvider.test.ts | 24 +- .../LocalUserAccountProvider.test.ts.snap | 51162 +++++++++++++++- packages/neo-one-client/src/index.ts | 4 +- 39 files changed, 51213 insertions(+), 3718 deletions(-) create mode 100644 common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json create mode 100644 common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json create mode 100644 common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json create mode 100644 common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json create mode 100644 packages/neo-one-client-core/src/__data__/verifyDataProvider.ts create mode 100644 packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts create mode 100644 packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts create mode 100644 packages/neo-one-client-core/src/__tests__/provider/__snapshots__/NEOProvider.test.ts.snap create mode 100644 packages/neo-one-client-core/src/provider/DataProviderBase.ts create mode 100644 packages/neo-one-client-core/src/provider/NEODataProvider.ts create mode 100644 packages/neo-one-client-core/src/provider/NEOProvider.ts create mode 100644 packages/neo-one-client-core/src/provider/ProviderBase.ts diff --git a/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json new file mode 100644 index 0000000000..ba4a91bf03 --- /dev/null +++ b/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "Added types to support NEODataProvider & C# node", + "type": "minor" + } + ], + "packageName": "@neo-one/client-common", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json new file mode 100644 index 0000000000..ba04f0f8ad --- /dev/null +++ b/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase.", + "type": "minor" + } + ], + "packageName": "@neo-one/client-core", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json b/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json new file mode 100644 index 0000000000..a9c5c9e98e --- /dev/null +++ b/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-full-core", + "comment": "Update LocalUserAccountProvider test", + "type": "patch" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json new file mode 100644 index 0000000000..4af6933fc2 --- /dev/null +++ b/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client", + "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase.", + "type": "minor" + } + ], + "packageName": "@neo-one/client", + "email": "ahfragapane@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-build-tests/environments/test/jestSetup.js b/packages/neo-one-build-tests/environments/test/jestSetup.js index 80a62ff571..c95b47be51 100644 --- a/packages/neo-one-build-tests/environments/test/jestSetup.js +++ b/packages/neo-one-build-tests/environments/test/jestSetup.js @@ -11,6 +11,8 @@ jest.setTimeout(120 * 1000); const tempConsole = global.console; global.console = { log: jest.fn(), + // uncomment to allow console.log in tests + // log: console.log, error: console.error, warn: console.warn, info: jest.fn(), 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 index a81b7fbcdf..a146a921c1 100644 --- 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 @@ -1,8 +1,11 @@ +import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import _ from 'lodash'; +import { data, keys } from '../../../__data__'; import { BinaryWriter } from '../../../BinaryWriter'; import { common, UInt256 } from '../../../common'; -import { AttributeModel, WitnessModel } from '../../../models'; +import { addressToScriptHash } from '../../../helpers'; +import { AttributeModel, BufferAttributeModel, UInt160AttributeModel, WitnessModel } from '../../../models'; import { assertTransactionType, ClaimTransactionModel, @@ -37,6 +40,13 @@ const optionsBuilder = ({ }); const defaultInput = new InputModel({ hash: common.ZERO_UINT256, index: 1 }); +const options = { + asset: common.ZERO_UINT256, + value: new BN(1), + address: common.ZERO_UINT160, +}; + +const outputModel = new OutputModel(options); // tslint:disable-next-line:no-let let testWriter: BinaryWriter = new BinaryWriter(); @@ -121,19 +131,56 @@ describe('Invocation Transaction Model', () => { new InvocationTransactionModel({ ...optionsBuilder({}), version: badVersion, gas, script }); expect(versionThrow).toThrowError(`expected version <= 1, found: ${badVersion}`); }); + + test('getScriptHashesForVerifying', async () => { + const model = new InvocationTransactionModel({ + ...optionsBuilder({ + inputs: [defaultInput], + outputs: [outputModel], + attributes: [ + new UInt160AttributeModel({ + usage: 0x20, + value: common.hexToUInt160(addressToScriptHash(data.attributes.script.data)), + }), + new BufferAttributeModel({ + usage: 0x90, + value: Buffer.from(data.attributes.description.data, 'hex'), + }), + ], + }), + gas, + script, + }); + const result = await model.getScriptHashesForVerifying({ + getOutput: jest.fn(async () => + Promise.resolve({ + asset: common.uInt256ToHex(options.asset), + value: new BigNumber(1), + address: keys[0].address, + }), + ), + getAsset: jest.fn(async () => + Promise.resolve({ + hash: data.hash256s.a, + available: new BigNumber(10000), + expiration: 6000000, + frozen: false, + ...data.assetRegisters.duty, + }), + ), + }); + + expect(result).toEqual([ + addressToScriptHash(keys[0].address), + common.uInt160ToHex(options.address), + addressToScriptHash(data.attributes.script.data), + ]); + }); }); 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( diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 90ef74fde9..daeae70a8a 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -8,7 +8,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); @@ -239,6 +239,8 @@ export const common = { NEO_ASSET_HASH: '0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b', GAS_ASSET_HASH: '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7', uInt160ToBuffer, + add0x, + strip0x, asUInt160, uInt160ToHex, hexToUInt160, diff --git a/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts index 92f4cafb44..91adafe7fb 100644 --- a/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts @@ -1,14 +1,22 @@ +import { utils as commonUtils } from '@neo-one/utils'; import { BN } from 'bn.js'; import { BinaryWriter } from '../../BinaryWriter'; -import { InvalidFormatError } from '../../common'; +import { common, InvalidFormatError } from '../../common'; +import { addressToScriptHash } from '../../helpers'; +import { Asset, Input, Output } from '../../types'; import { utils } from '../../utils'; import { WitnessModel } from '../WitnessModel'; -import { AttributeModel } from './attribute'; +import { AttributeModel, AttributeUsageModel, UInt160AttributeModel } from './attribute'; import { InputModel } from './InputModel'; import { OutputModel } from './OutputModel'; import { TransactionBaseModel, TransactionBaseModelAdd } from './TransactionBaseModel'; import { TransactionTypeModel } from './TransactionTypeModel'; +export interface TransactionGetScriptHashesForVerifyingOptions { + readonly getOutput: (input: Input) => Promise; + readonly getAsset: (hash: string) => Promise; +} + export interface InvocationTransactionModelAdd< TAttribute extends AttributeModel = AttributeModel, TInput extends InputModel = InputModel, @@ -94,4 +102,45 @@ export class InvocationTransactionModel< writer.writeFixed8(this.gas); } } + + public async getScriptHashesForVerifying({ + getOutput, + getAsset, + }: TransactionGetScriptHashesForVerifyingOptions): Promise { + const [inputHashes, outputHashes] = await Promise.all([ + Promise.all( + this.inputs.map(async (input) => { + const output = await getOutput({ hash: common.uInt256ToHex(input.hash), index: input.index }); + + return addressToScriptHash(output.address); + }), + ), + + Promise.all( + this.outputs.map(async (output) => { + const assetHash = common.uInt256ToHex(output.asset); + if (assetHash === common.NEO_ASSET_HASH || assetHash === common.GAS_ASSET_HASH) { + return undefined; + } + + const asset = await getAsset(assetHash); + if (asset.type === 'Duty') { + return common.uInt160ToHex(output.address); + } + + return undefined; + }), + ).then((hashes) => hashes.filter(commonUtils.notNull)), + ]); + + const attributeHashes = this.attributes + .map((attribute) => + attribute instanceof UInt160AttributeModel && attribute.usage === AttributeUsageModel.Script + ? common.uInt160ToHex(attribute.value) + : undefined, + ) + .filter(commonUtils.notNull); + + return [...inputHashes, ...outputHashes, ...attributeHashes]; + } } diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index fff5999d14..4bbc8359f9 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -106,6 +106,20 @@ export interface InvocationResultSuccessJSON { export type InvocationResultJSON = InvocationResultSuccessJSON | InvocationResultErrorJSON; +export interface RawInvocationResultErrorJSON { + readonly state: 'FAULT'; + readonly gas_consumed: string; + readonly stack: readonly ContractParameterJSON[]; +} + +export interface RawInvocationResultSuccessJSON { + readonly state: 'HALT'; + readonly gas_consumed: string; + readonly stack: readonly ContractParameterJSON[]; +} + +export type RawInvocationResultJSON = RawInvocationResultSuccessJSON | RawInvocationResultErrorJSON; + export interface StorageChangeAddJSON { readonly type: 'Add'; readonly hash: string; @@ -378,3 +392,39 @@ export interface ValidatorJSON { readonly registered: boolean; readonly votes: string; } + +export interface NeoClaimableJSON { + readonly claimable: readonly NeoInputClaimableJSON[]; + readonly unclaimed: string; + readonly address: string; +} + +export interface NeoInputClaimableJSON { + readonly txid: string; + readonly n: number; + readonly value: string; + readonly start_height: number; + readonly end_height: number; + readonly generated: string; + readonly sys_fee: string; + readonly unclaimed: string; +} + +export interface NeoUnspentOutputJSON { + readonly txid: string; + readonly n: number; + readonly value: string; +} + +export interface NeoBalanceJSON { + readonly unspent: readonly NeoUnspentOutputJSON[]; + readonly asset_hash: string; + readonly asset: string; + readonly asset_symbol: string; + readonly amount: string; +} + +export interface NeoUnspentJSON { + readonly balance: readonly NeoBalanceJSON[]; + readonly address: string; +} diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 36dbaa3e5a..e06e6bcc30 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1117,6 +1117,11 @@ 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; + /** + * boolean which determines whether or not to skip the sysFee check before submitting an invocation transaction. Used for working with contracts where the sysFee is known to be less + * than the 10 free GAS. e.g. nep5 + */ + skipSysFeeCheck?: boolean; // tslint:enable readonly-keyword } diff --git a/packages/neo-one-client-common/src/utils.ts b/packages/neo-one-client-common/src/utils.ts index 69cc57ff19..1714e7bebc 100644 --- a/packages/neo-one-client-common/src/utils.ts +++ b/packages/neo-one-client-common/src/utils.ts @@ -79,6 +79,7 @@ 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, diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index f2a8accf91..5bdaa74bfc 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -9,19 +9,23 @@ import { AddressABIParameter, AddressAttribute, AddressContractParameter, + addressToScriptHash, ArrayContractParameterJSON, Asset, AssetJSON, AttributeJSON, + AttributeUsageModel, Block, BlockJSON, BooleanContractParameter, BooleanContractParameterJSON, BufferAttribute, + BufferAttributeModel, ByteArrayContractParameterJSON, CallReceiptJSON, ClaimTransaction, ClaimTransactionJSON, + common, ConfirmedClaimTransaction, ConfirmedContractTransaction, ConfirmedEnrollmentTransaction, @@ -36,6 +40,7 @@ import { ContractJSON, ContractTransaction, ContractTransactionJSON, + ECPointAttributeModel, EnrollmentTransaction, EnrollmentTransactionJSON, ForwardValue, @@ -46,6 +51,7 @@ import { HeaderJSON, Input, InputJSON, + InputModel, InputOutput, IntegerABIParameter, IntegerABIReturn, @@ -59,17 +65,25 @@ import { InvocationResultSuccessJSON, InvocationTransaction, InvocationTransactionJSON, + InvocationTransactionModel, + InvocationTransactionModelAdd, IssueTransaction, IssueTransactionJSON, LogActionJSON, MapContractParameterJSON, MinerTransaction, MinerTransactionJSON, + NeoBalanceJSON, + NeoClaimableJSON, + NeoInputClaimableJSON, + NeoUnspentJSON, + NeoUnspentOutputJSON, NetworkSettings, NetworkSettingsJSON, NotificationActionJSON, Output, OutputJSON, + OutputModel, Peer, PublicKeyAttribute, PublicKeyContractParameterJSON, @@ -79,7 +93,9 @@ import { RawCallReceipt, RawInvocationData, RawInvocationResultError, + RawInvocationResultErrorJSON, RawInvocationResultSuccess, + RawInvocationResultSuccessJSON, RawInvokeReceipt, RawLog, RawNotification, @@ -99,6 +115,8 @@ import { TransactionReceipt, TransactionResult, Transfer, + UInt160AttributeModel, + UInt256AttributeModel, UserAccount, UserAccountID, VerifyScriptResultJSON, @@ -107,6 +125,7 @@ import { VoidContractParameterJSON, Witness, WitnessJSON, + WitnessModel, } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; @@ -298,6 +317,27 @@ const createInvocationResultErrorJSON = ( ...options, }); +const createRawInvocationResultSuccessJSON = ( + options: Partial = {}, +): RawInvocationResultSuccessJSON => ({ + state: 'HALT', + gas_consumed: '20', + gas_cost: '10', + stack: [createIntegerContractParameterJSON()], + ...options, +}); + +const createRawInvocationResultErrorJSON = ( + options: Partial = {}, +): RawInvocationResultErrorJSON => ({ + state: 'FAULT', + gas_consumed: '20', + gas_cost: '10', + stack: [createIntegerContractParameterJSON()], + message: '', + ...options, +}); + const createInvocationDataJSON = (options: Partial = {}): InvocationDataJSON => ({ result: createInvocationResultSuccessJSON(), asset: createAssetJSON(), @@ -370,6 +410,58 @@ const createInvocationTransactionJSON = ( ...options, }); +const createInvocationTransactionModel = ( + options: Partial = {}, +): InvocationTransactionModel => { + const invocation = createInvocationTransactionJSON(); + const uInt160Attribute = createUInt160AttributeJSON(); + const uInt256Attribute = createUInt256AttributeJSON(); + const bufferAttribute = createBufferAttributeJSON(); + const ecPointAttribute = createECPointAttributeJSON(); + + return new InvocationTransactionModel({ + gas: new BN(invocation.gas), + script: Buffer.from(invocation.script, 'hex'), + version: invocation.version, + attributes: [ + new UInt160AttributeModel({ + usage: AttributeUsageModel[uInt160Attribute.usage] as 0x20, + value: common.hexToUInt160(uInt160Attribute.data), + }), + new UInt256AttributeModel({ + usage: AttributeUsageModel[uInt256Attribute.usage] as 0xa1, + value: common.hexToUInt256(uInt256Attribute.data), + }), + new BufferAttributeModel({ + usage: AttributeUsageModel[bufferAttribute.usage] as 0x90, + value: Buffer.from(bufferAttribute.data, 'hex'), + }), + new ECPointAttributeModel({ + usage: AttributeUsageModel[ecPointAttribute.usage] as 0x02, + value: common.hexToECPoint(ecPointAttribute.data), + }), + ], + inputs: invocation.vin.map((input) => new InputModel({ hash: common.hexToUInt256(input.txid), index: input.vout })), + outputs: invocation.vout.map( + (output) => + new OutputModel({ + asset: common.hexToUInt256(output.asset), + value: new BN(output.value), + address: common.hexToUInt160(addressToScriptHash(output.address)), + }), + ), + scripts: invocation.scripts.map( + (script) => + new WitnessModel({ + invocation: Buffer.from(script.invocation, 'hex'), + verification: Buffer.from(script.verification, 'hex'), + }), + ), + hash: common.hexToUInt256(invocation.txid), + ...options, + }); +}; + const createMinerTransactionJSON = (options: Partial = {}): MinerTransactionJSON => ({ ...createTransactionBaseJSON(), type: 'MinerTransaction', @@ -1085,6 +1177,47 @@ const createBlock = (options: Partial = {}): Block => ({ ...options, }); +const createNeoClaimableInputJSON = (options: Partial = {}): NeoInputClaimableJSON => ({ + txid: data.hash256s.a, + n: 3, + value: '23', + start_height: 2000000, + end_height: 3000000, + generated: '1.23', + sys_fee: '.01', + unclaimed: '1.23', + ...options, +}); + +const createNeoClaimableJSON = (options: Partial = {}): NeoClaimableJSON => ({ + claimable: [createNeoClaimableInputJSON()], + unclaimed: '1.23', + address: keys[0].address, + ...options, +}); + +const createNeoUnspentOutputJSON = (options: Partial = {}): NeoUnspentOutputJSON => ({ + txid: data.hash256s.b, + n: 0, + value: '.034', + ...options, +}); + +const createNeoBalanceJSON = (options: Partial = {}): NeoBalanceJSON => ({ + unspent: [createNeoUnspentOutputJSON()], + asset_hash: data.hash256s.c, + asset: 'Gas', + asset_symbol: 'GAS', + amount: '.034', + ...options, +}); + +const createNeoUnspentJSON = (options: Partial = {}): NeoUnspentJSON => ({ + balance: [createNeoBalanceJSON()], + address: keys[0].address, + ...options, +}); + export const factory = { createAccountJSON, createAssetJSON, @@ -1107,6 +1240,14 @@ export const factory = { createInvocationResultSuccessJSON, createInvocationResultErrorJSON, createInvocationTransactionJSON, + createMinerTransactionJSON, + createClaimTransactionJSON, + createContractTransactionJSON, + createEnrollmentTransactionJSON, + createIssueTransactionJSON, + createPublishTransactionJSON, + createRegisterTransactionJSON, + createStateTransactionJSON, createTransactionReceipt, createCallReceiptJSON, createLogActionJSON, @@ -1170,4 +1311,12 @@ export const factory = { createStateTransaction, createAccount, createBlock, + createInvocationTransactionModel, + createNeoClaimableInputJSON, + createNeoClaimableJSON, + createNeoUnspentOutputJSON, + createNeoBalanceJSON, + createNeoUnspentJSON, + 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..603a3819dc --- /dev/null +++ b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts @@ -0,0 +1,271 @@ +import { + ActionJSON, + AddressString, + Asset, + AssetJSON, + AssetNameJSON, + AssetType, + AssetTypeJSON, + CallReceiptJSON, + ConfirmedTransaction, + Contract, + ContractJSON, + InvocationResultJSON, + Output, + OutputJSON, + PublicKeyString, + RawAction, + RawCallReceipt, + RawInvocationResult, + RawInvocationResultJSON, + scriptHashToAddress, + Transaction, + TransactionJSON, + VMState, +} from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; + +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; +} + +const verifyInvocationResultSuccess = ( + invocationResult: RawInvocationResult, + invocationResultJSON: InvocationResultJSON | RawInvocationResultJSON, +) => { + if ( + invocationResult.state !== 'HALT' || + (invocationResultJSON.state !== VMState.Halt && invocationResultJSON.state !== '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​​​​​', + ); +}; + +export const verifyDataProvider = { + verifyInvocationResultSuccess, + verifyDefaultActions, + verifyAssetBase, + verifyAsset, + verifyContract, + verifyOutput, + verifyTransactionBase, + verifyClaimTransaction, + verifyContractTransaction, + verifyEnrollmentTransaction, + verifyInvocationTransaction, + verifyIssueTransaction, + verifyMinerTransaction, + verifyPublishTransaction, + verifyRegisterTransaction, + verifyStateTransaction, + verifyConfirmedTransaction, + verifyCallReceipt, +}; 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..1670833d73 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 @@ -147,6 +147,16 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); + test('sendRawTransaction', async () => { + const value = true; + mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); + + const result = await client.sendRawTransaction(data.buffers.a); + + expect(result).toEqual(value); + expect(mockRequest.mock.calls).toMatchSnapshot(); + }); + test('relayTransaction', async () => { const value = factory.createInvocationTransactionJSON(); mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); @@ -258,6 +268,36 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); + test('getClaimable', async () => { + const value = factory.createNeoClaimableJSON(); + mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); + + const result = await client.getClaimable(keys[0].address); + + expect(result).toEqual(value); + expect(mockRequest.mock.calls).toMatchSnapshot(); + }); + + test('getUnspents', async () => { + const value = factory.createNeoUnspentJSON(); + mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); + + const result = await client.getUnspents(keys[0].address); + + expect(result).toEqual(value); + 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/NEODataProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts new file mode 100644 index 0000000000..865a35fa51 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts @@ -0,0 +1,371 @@ +// tslint:disable no-object-mutation +import { CallReceiptJSON, RawCallReceipt, scriptHashToAddress } 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, verifyDataProvider as verify } from '../../__data__'; +import { Hash256 } from '../../Hash256'; +import { JSONRPCClient, JSONRPCHTTPProvider, NEODataProvider } from '../../provider'; + +jest.mock('../../provider/JSONRPCClient'); + +describe('NEODataProvider', () => { + const network = 'local'; + const rpcURL = 'https://neotracker.io/rpc'; + + let client: Modifiable; + let provider: NEODataProvider; + beforeEach(() => { + provider = new NEODataProvider({ network, rpcURL }); + // tslint:disable-next-line no-any + client = (provider as any).mutableClient; + }); + + const neoNotImplementedError = (name: string) => + `${name} not implemented for the NEODataProvider. Use a NEOONEDataProvider to use this method.`; + + const verifyCallReceipt = (receipt: RawCallReceipt, receiptJSON: CallReceiptJSON) => { + verify.verifyInvocationResultSuccess(receipt.result, receiptJSON.result); + }; + + test('setRPCURL', () => { + const currentClient = client; + + provider.setRPCURL('http://localhost:1340'); + + // tslint:disable-next-line no-any + expect(currentClient).not.toBe((provider as any).mutableClient); + }); + + test('getUnclaimed', async () => { + const unclaimedJSON = factory.createNeoClaimableJSON(); + client.getClaimable = jest.fn(async () => Promise.resolve(unclaimedJSON)); + + const result = await provider.getUnclaimed(keys[0].address); + + expect(result.amount).toEqual(new BigNumber(unclaimedJSON.unclaimed)); + expect(result.unclaimed[0].hash).toEqual(unclaimedJSON.claimable[0].txid); + expect(result.unclaimed[0].index).toEqual(unclaimedJSON.claimable[0].n); + }); + + test('getUnspent', async () => { + const unspentJSON = factory.createNeoUnspentJSON(); + client.getUnspents = jest.fn(async () => Promise.resolve(unspentJSON)); + + const result = await provider.getUnspentOutputs(keys[0].address); + + expect(result).toHaveLength(1); + expect(result[0].asset).toEqual(unspentJSON.balance[0].asset_hash); + expect(result[0].value.toString(10)).toEqual(`0${unspentJSON.balance[0].unspent[0].value}`); + expect(result[0].address).toEqual(unspentJSON.address); + expect(result[0].hash).toEqual(unspentJSON.balance[0].unspent[0].txid); + expect(result[0].index).toEqual(unspentJSON.balance[0].unspent[0].n); + }); + + test('relayTransaction', async () => { + const transactionJSON = factory.createInvocationTransactionJSON({ sys_fee: '0', net_fee: '0.05' }); + client.relayTransaction = jest.fn(async () => + Promise.resolve({ + transaction: transactionJSON, + }), + ); + + const result = await provider.relayTransaction(factory.createInvocationTransactionModel(), new BigNumber(0.05)); + + verify.verifyInvocationTransaction(result.transaction, { ...transactionJSON, size: 201 }); + }); + + test('getTransactionReceipt', async () => { + const transactionReceipt = factory.createTransactionReceipt({ + globalIndex: new BigNumber(-1), + blockIndex: 10, + transactionIndex: 0, + }); + const blockJSON = factory.createBlockJSON(); + client.getTransactionHeight = jest.fn(async () => Promise.resolve(10)); + client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); + const result = await provider.getTransactionReceipt(data.hash256s.a); + + expect(result).toEqual(transactionReceipt); + }); + + test('getInvocationData', async () => { + const result = provider.getInvocationData(data.hash256s.a); + + await expect(result).rejects.toThrowError(neoNotImplementedError('getInvocationData')); + }); + + test('testInvoke', async () => { + const callReceiptJSON = factory.createRawInvocationResultSuccessJSON(); + client.testInvokeRaw = jest.fn(async () => Promise.resolve(callReceiptJSON)); + provider.getOutput = jest.fn(async () => Promise.resolve(factory.createOutput())); + provider.getAsset = jest.fn(async () => Promise.resolve(factory.createAsset())); + const result = await provider.testInvoke(factory.createInvocationTransactionModel()); + + verifyCallReceipt(result, { + // tslint:disable-next-line no-any + result: { ...callReceiptJSON, gas_consumed: '10', gas_cost: '20' } as any, + actions: [], + }); + }); + + test('getAccount', async () => { + const accountJSON = factory.createAccountJSON(); + const claimableJSON = factory.createNeoClaimableJSON(); + const unspentsJSON = factory.createNeoUnspentJSON(); + client.getAccount = jest.fn(async () => Promise.resolve(accountJSON)); + client.getClaimable = jest.fn(async () => Promise.resolve(claimableJSON)); + client.getUnspents = jest.fn(async () => Promise.resolve(unspentsJSON)); + + const result = await provider.getAccount(keys[0].address); + + 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); + verify.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); + verify.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); + verify.verifyAsset(result, assetJSON, assetJSON.type, 'bar'); + }); + + test('getBlock', async () => { + const receiptData = { + blockHash: data.hash256s.a, + blockIndex: 10, + transactionIndex: 0, + globalIndex: '-1', + }; + const blockJSON = factory.createBlockJSON({ + tx: [ + factory.createMinerTransactionJSON({ data: receiptData }), + factory.createClaimTransactionJSON({ data: receiptData }), + factory.createContractTransactionJSON({ data: receiptData }), + factory.createEnrollmentTransactionJSON({ data: receiptData }), + factory.createInvocationTransactionJSON({ data: receiptData, invocationData: undefined }), + factory.createIssueTransactionJSON({ data: receiptData }), + factory.createPublishTransactionJSON({ data: receiptData }), + factory.createRegisterTransactionJSON({ data: receiptData }), + factory.createStateTransactionJSON({ data: receiptData }), + ], + }); + client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); + + 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.size).toEqual(blockJSON.size); + expect(result.transactions.length).toEqual(blockJSON.tx.length); + verify.verifyMinerTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyClaimTransaction(result.transactions[1], blockJSON.tx[1]); + verify.verifyConfirmedTransaction(result.transactions[1], blockJSON.tx[1]); + verify.verifyContractTransaction(result.transactions[2], blockJSON.tx[2]); + verify.verifyConfirmedTransaction(result.transactions[2], blockJSON.tx[2]); + verify.verifyEnrollmentTransaction(result.transactions[3], blockJSON.tx[3]); + verify.verifyConfirmedTransaction(result.transactions[3], blockJSON.tx[3]); + verify.verifyInvocationTransaction(result.transactions[4], blockJSON.tx[4]); + verify.verifyConfirmedTransaction(result.transactions[4], blockJSON.tx[4]); + verify.verifyIssueTransaction(result.transactions[5], blockJSON.tx[5]); + verify.verifyConfirmedTransaction(result.transactions[5], blockJSON.tx[5]); + verify.verifyPublishTransaction(result.transactions[6], blockJSON.tx[6]); + verify.verifyConfirmedTransaction(result.transactions[6], blockJSON.tx[6]); + verify.verifyRegisterTransaction(result.transactions[7], blockJSON.tx[7]); + verify.verifyConfirmedTransaction(result.transactions[7], blockJSON.tx[7]); + verify.verifyStateTransaction(result.transactions[8], blockJSON.tx[8]); + verify.verifyConfirmedTransaction(result.transactions[8], blockJSON.tx[8]); + }); + + test('iterBlocks', async () => { + const blockJSON = factory.createBlockJSON(); + client.getBlockCount = jest.fn(async () => Promise.resolve(2)); + client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); + + const result = await toArray(provider.iterBlocks({ indexStart: 1, indexStop: 2 })); + + expect(result.length).toEqual(1); + }); + + test('getBestBlockHash', async () => { + const hash = data.hash256s.a; + client.getBestBlockHash = jest.fn(async () => Promise.resolve(hash)); + + const result = await provider.getBestBlockHash(); + + expect(result).toEqual(hash); + }); + + test('getBlockCount', async () => { + const count = 2; + client.getBlockCount = jest.fn(async () => Promise.resolve(count)); + + const result = await provider.getBlockCount(); + + expect(result).toEqual(count); + }); + + test('getContract', async () => { + const contractJSON = factory.createContractJSON(); + client.getContract = jest.fn(async () => Promise.resolve(contractJSON)); + + const result = await provider.getContract(keys[0].address); + + 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, + ]; + + convertedContractParameterTypes.forEach(([from, to]) => { + test(`getContract - ${from} -> ${to}`, async () => { + const contractJSON = factory.createContractJSON({ returntype: from }); + client.getContract = jest.fn(async () => Promise.resolve(contractJSON)); + + const result = await provider.getContract(keys[0].address); + verify.verifyContract(result, contractJSON, to); + }); + }); + + test('getMemPool', async () => { + const memPool = [data.hash256s.a]; + client.getMemPool = jest.fn(async () => Promise.resolve(memPool)); + + const result = await provider.getMemPool(); + + expect(result).toEqual(memPool); + }); + + test('getTransaction', async () => { + const transactionJSON = factory.createInvocationTransactionJSON({ invocationData: undefined }); + client.getTransaction = jest.fn(async () => Promise.resolve(transactionJSON)); + + const result = await provider.getTransaction(transactionJSON.txid); + + verify.verifyInvocationTransaction(result, transactionJSON); + }); + + test('getOutput', async () => { + const outputJSON = factory.createOutputJSON(); + const transactionJSON = factory.createInvocationTransactionJSON({ invocationData: undefined, vout: [outputJSON] }); + client.getTransaction = jest.fn(async () => Promise.resolve(transactionJSON)); + + const result = await provider.getOutput({ hash: data.hash256s.a, index: 0 }); + + verify.verifyOutput(result, outputJSON); + }); + + test('getConnectedPeers', async () => { + const peersJSON = [factory.createPeerJSON()]; + client.getConnectedPeers = jest.fn(async () => Promise.resolve(peersJSON)); + + const result = await provider.getConnectedPeers(); + + expect(result).toEqual(peersJSON); + }); + + test('getNetworkSettings', async () => { + const result = provider.getNetworkSettings(); + + await expect(result).rejects.toThrowError(neoNotImplementedError('getNetworkSettings')); + }); + + test('iterStorage', async () => { + const result = () => provider.iterStorage(keys[0].address); + + expect(result).toThrowError(neoNotImplementedError('iterStorage')); + }); + + test('iterActionsRaw', async () => { + const result = () => provider.iterActionsRaw({ indexStart: 1, indexStop: 2 }); + + expect(result).toThrowError(neoNotImplementedError('iterActionsRaw')); + }); + + test('call', async () => { + const callReceiptJSON = factory.createRawInvocationResultSuccessJSON(); + client.testInvokeRaw = jest.fn(async () => Promise.resolve(callReceiptJSON)); + + const result = await provider.call(keys[0].address, 'foo', []); + + verifyCallReceipt(result, { + // tslint:disable-next-line no-any + result: { ...callReceiptJSON, gas_consumed: '10', gas_cost: '20' } as any, + actions: [], + }); + }); + + 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 NEODataProvider({ network, rpcURL: new JSONRPCHTTPProvider(rpcURL) }); + expect(provider).toBeDefined(); + }); +}); 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 e4469e58b8..e6877395ee 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,13 @@ // 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, - scriptHashToAddress, - StorageItem, - StorageItemJSON, - Transaction, - TransactionJSON, - VMState, -} from '@neo-one/client-common'; +import { common, scriptHashToAddress, StorageItem, StorageItemJSON } 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 { data, factory, keys, verifyDataProvider as verify } from '../../__data__'; import { Hash256 } from '../../Hash256'; 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 +20,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; @@ -317,9 +69,9 @@ describe('NEOONEDataProvider', () => { }), ); - const result = await provider.relayTransaction(data.serializedTransaction.valid); + const result = await provider.relayTransaction(factory.createInvocationTransactionModel()); - verifyInvocationTransaction(result.transaction, transactionJSON); + verify.verifyInvocationTransaction(result.transaction, transactionJSON); }); test('verifyConvertTransaction', async () => { @@ -341,7 +93,7 @@ describe('NEOONEDataProvider', () => { }), ); - const result = await provider.relayTransaction(data.serializedTransaction.valid); + const result = await provider.relayTransaction(factory.createInvocationTransactionModel()); if (result.verifyResult === undefined) { throw new Error('for TS'); @@ -382,7 +134,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.getInvocationData(data.hash256s.a); - verifyDefaultActions( + verify.verifyDefaultActions( result.actions, invocationData.actions, transactionData.blockIndex, @@ -416,10 +168,10 @@ describe('NEOONEDataProvider', () => { if (asset === undefined || assetJSON === undefined) { throw new Error('For TS'); } - verifyAsset(asset, assetJSON); + verify.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,7 +183,7 @@ describe('NEOONEDataProvider', () => { scriptHashToAddress(invocationData.migratedContractHashes[0][1]), ); - verifyInvocationResultSuccess(result.result, invocationData.result); + verify.verifyInvocationResultSuccess(result.result, invocationData.result); }); test('getInvocationData - missing transaction data', async () => { @@ -449,9 +201,9 @@ describe('NEOONEDataProvider', () => { const callReceiptJSON = factory.createCallReceiptJSON(); client.testInvocation = jest.fn(async () => Promise.resolve(callReceiptJSON)); - const result = await provider.testInvoke(data.serializedTransaction.valid); + const result = await provider.testInvoke(factory.createInvocationTransactionModel()); - verifyCallReceipt(result, callReceiptJSON); + verify.verifyCallReceipt(result, callReceiptJSON); }); test('getAccount', async () => { @@ -482,7 +234,7 @@ describe('NEOONEDataProvider', () => { client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, to); + verify.verifyAsset(result, assetJSON, to); }); }); @@ -496,7 +248,7 @@ describe('NEOONEDataProvider', () => { client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, assetJSON.type, 'baz'); + verify.verifyAsset(result, assetJSON, assetJSON.type, 'baz'); }); test(`getAsset - otherwise, first name`, async () => { @@ -509,7 +261,7 @@ describe('NEOONEDataProvider', () => { client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, assetJSON.type, 'bar'); + verify.verifyAsset(result, assetJSON, assetJSON.type, 'bar'); }); test('getBlock', async () => { @@ -529,24 +281,24 @@ describe('NEOONEDataProvider', () => { expect(result.script).toEqual(blockJSON.script); 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.verifyMinerTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyClaimTransaction(result.transactions[1], blockJSON.tx[1]); + verify.verifyConfirmedTransaction(result.transactions[1], blockJSON.tx[1]); + verify.verifyContractTransaction(result.transactions[2], blockJSON.tx[2]); + verify.verifyConfirmedTransaction(result.transactions[2], blockJSON.tx[2]); + verify.verifyEnrollmentTransaction(result.transactions[3], blockJSON.tx[3]); + verify.verifyConfirmedTransaction(result.transactions[3], blockJSON.tx[3]); + verify.verifyInvocationTransaction(result.transactions[4], blockJSON.tx[4]); + verify.verifyConfirmedTransaction(result.transactions[4], blockJSON.tx[4]); + verify.verifyIssueTransaction(result.transactions[5], blockJSON.tx[5]); + verify.verifyConfirmedTransaction(result.transactions[5], blockJSON.tx[5]); + verify.verifyPublishTransaction(result.transactions[6], blockJSON.tx[6]); + verify.verifyConfirmedTransaction(result.transactions[6], blockJSON.tx[6]); + verify.verifyRegisterTransaction(result.transactions[7], blockJSON.tx[7]); + verify.verifyConfirmedTransaction(result.transactions[7], blockJSON.tx[7]); + verify.verifyStateTransaction(result.transactions[8], blockJSON.tx[8]); + verify.verifyConfirmedTransaction(result.transactions[8], blockJSON.tx[8]); }); test('iterBlocks', async () => { @@ -583,7 +335,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.getContract(keys[0].address); - verifyContract(result, contractJSON); + verify.verifyContract(result, contractJSON); }); const convertedContractParameterTypes = [ @@ -606,7 +358,7 @@ describe('NEOONEDataProvider', () => { 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); }); }); @@ -625,7 +377,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.getTransaction(transactionJSON.txid); - verifyInvocationTransaction(result, transactionJSON); + verify.verifyInvocationTransaction(result, transactionJSON); }); test('getOutput', async () => { @@ -634,7 +386,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.getOutput({ hash: data.hash256s.a, index: 0 }); - verifyOutput(result, outputJSON); + verify.verifyOutput(result, outputJSON); }); test('getConnectedPeers', async () => { @@ -688,7 +440,7 @@ describe('NEOONEDataProvider', () => { throw new Error('For TS'); } - verifyDefaultActions( + verify.verifyDefaultActions( result, transactionJSON.invocationData.actions, transactionJSON.data.blockIndex, @@ -704,7 +456,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.call(keys[0].address, 'foo', []); - verifyCallReceipt(result, callReceiptJSON); + verify.verifyCallReceipt(result, callReceiptJSON); }); test('runConsensusNow', async () => { 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..2c8ab39b18 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 @@ -83,11 +83,11 @@ describe('NEOONEProvider', () => { }); test('relayTransaction', async () => { - const expected = factory.createMinerTransaction(); + const expected = factory.createInvocationTransaction(); // 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.createInvocationTransactionModel()); expect(result).toBe(expected); }); @@ -114,7 +114,7 @@ describe('NEOONEProvider', () => { const expected = factory.createRawCallReceipt(); dataProvider.testInvoke = jest.fn(async () => Promise.resolve(expected)); - const result = await provider.testInvoke(network, data.buffers.a); + const result = await provider.testInvoke(network, factory.createInvocationTransactionModel()); expect(result).toBe(expected); }); diff --git a/packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts new file mode 100644 index 0000000000..7f319c0e7b --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts @@ -0,0 +1,195 @@ +// 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 { NEODataProvider, NEOProvider } from '../../provider'; + +jest.mock('../../provider/NEODataProvider'); + +describe('NEOONEProvider', () => { + const network = 'main'; + const rpcURL = 'https://neotracker.io/rpc'; + + let provider: NEOProvider; + let dataProvider: Modifiable; + beforeEach(() => { + provider = new NEOProvider([{ network, rpcURL }]); + // tslint:disable-next-line no-any + dataProvider = (provider as any).mutableProviders[network]; + }); + + test('networks$', async () => { + const result = await provider.networks$.pipe(take(1)).toPromise(); + + expect(result).toEqual([network]); + }); + + test('networks$ - no networks', async () => { + const prov = new NEOProvider(); + + const result = await prov.networks$.pipe(take(1)).toPromise(); + + expect(result).toEqual([]); + }); + + test('getNetworks', () => { + const result = provider.getNetworks(); + + expect(result).toEqual([network]); + }); + + test('getNetworks - no networks', () => { + const prov = new NEOProvider(); + + const result = prov.getNetworks(); + + expect(result).toEqual([]); + }); + + test('addNetwork', () => { + const newNetwork = 'test'; + + provider.addNetwork({ network: newNetwork, rpcURL: 'https://test.neotracker.io/rpc' }); + const result = provider.getNetworks(); + + expect(result).toEqual([network, newNetwork]); + }); + + test('addNetwork - existing network', () => { + provider.addNetwork({ network, rpcURL }); + const result = provider.getNetworks(); + + expect(result).toEqual([network]); + }); + + test('getUnclaimed', async () => { + const expected = { unclaimed: [factory.createInput()], amount: data.bigNumbers.a }; + dataProvider.getUnclaimed = jest.fn(async () => Promise.resolve(expected)); + + const result = await provider.getUnclaimed(network, keys[0].address); + + 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.createInvocationTransaction(); + // tslint:disable-next-line:no-any + dataProvider.relayTransaction = jest.fn((async () => Promise.resolve(expected)) as any); + + const result = await provider.relayTransaction( + network, + factory.createInvocationTransactionModel(), + new BigNumber(0.01), + ); + + expect(result).toBe(expected); + }); + + test('getTransactionReceipt', async () => { + const expected = factory.createTransactionReceipt({ globalIndex: new BigNumber(-1) }); + dataProvider.getTransactionReceipt = jest.fn(async () => Promise.resolve(expected)); + + const result = await provider.getTransactionReceipt(network, data.hash256s.a); + + expect(result).toBe(expected); + }); + + test('getInvocationData', async () => { + dataProvider.getInvocationData = jest.fn(async () => { + throw new Error('Not Implemented.'); + }); + + const result = provider.getInvocationData(network, data.hash256s.a); + + await expect(result).rejects.toThrowError('Not Implemented'); + }); + + test('testInvoke', async () => { + const expected = factory.createRawCallReceipt({ actions: [] }); + dataProvider.testInvoke = jest.fn(async () => Promise.resolve(expected)); + + const result = await provider.testInvoke(network, factory.createInvocationTransactionModel()); + + expect(result).toBe(expected); + }); + + test('getClaimAmount', async () => { + dataProvider.getClaimAmount = jest.fn(async () => { + throw new Error('Not Implemented.'); + }); + + const result = provider.getClaimAmount(network, factory.createInput()); + + await expect(result).rejects.toThrowError('Not Implemented'); + }); + + test('getNetworkSettings', async () => { + dataProvider.getNetworkSettings = jest.fn(async () => { + throw new Error('Not Implemented.'); + }); + + const result = provider.getNetworkSettings(network); + + await expect(result).rejects.toThrowError('Not Implemented'); + }); + + 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)); + + const result = await provider.getBlockCount(network); + + expect(result).toBe(expected); + }); + + test('iterActionsRaw', async () => { + dataProvider.iterActionsRaw = jest.fn(() => { + throw new Error('Not Implemented.'); + }); + + const result = () => provider.iterActionsRaw(network); + + expect(result).toThrowError('Not Implemented'); + }); + + test('iterBlocks', async () => { + const expected = AsyncIterableX.from([factory.createBlock()]); + dataProvider.iterBlocks = jest.fn(() => expected); + + const result = provider.iterBlocks(network); + + expect(result).toBe(expected); + }); + + test('getBlockCount - unknown network', async () => { + const result = provider.getBlockCount('unknown'); + + await expect(result).rejects.toMatchSnapshot(); + }); + + test('read', () => { + const result = provider.read(network); + + expect(result).toBe(dataProvider); + }); +}); 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/args.ts b/packages/neo-one-client-core/src/args.ts index acc56ef7c6..908116f1c1 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -720,6 +720,12 @@ export const assertInvokeSendUnsafeReceiveTransactionOptions = ( ), sendTo: assertProperty(options, 'InvokeSendUnsafeReceiveTransactionOptions', 'sendTo', assertNullableSendTo), sendFrom: assertProperty(options, 'InvokeSendUnsafeReceiveTransactionOptions', 'sendFrom', assertNullableSendFrom), + skipSysFeeCheck: assertProperty( + options, + 'InvokeSendUnsafeReceiveTransactionOptions', + 'skipSysFeeCheck', + assertNullableBoolean, + ), }; }; diff --git a/packages/neo-one-client-core/src/errors.ts b/packages/neo-one-client-core/src/errors.ts index deec82b44b..fdb25d590e 100644 --- a/packages/neo-one-client-core/src/errors.ts +++ b/packages/neo-one-client-core/src/errors.ts @@ -154,8 +154,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/provider/DataProviderBase.ts b/packages/neo-one-client-core/src/provider/DataProviderBase.ts new file mode 100644 index 0000000000..93f0a8fcfd --- /dev/null +++ b/packages/neo-one-client-core/src/provider/DataProviderBase.ts @@ -0,0 +1,280 @@ +/// +import { + Account, + AccountJSON, + AddressString, + Asset, + Block, + BlockJSON, + common, + ConfirmedTransaction, + Contract, + GetOptions, + Hash256String, + Input, + InputOutput, + InvocationTransactionModel, + IterOptions, + NetworkSettings, + NetworkType, + Output, + Peer, + RawAction, + RawCallReceipt, + RawInvocationData, + RelayTransactionResult, + ScriptBuilderParam, + StorageItem, + Transaction, + TransactionBaseModel, + TransactionJSON, + TransactionReceipt, +} from '@neo-one/client-common'; +import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; +import BigNumber from 'bignumber.js'; +import debug from 'debug'; +import { AsyncBlockIterator } from '../AsyncBlockIterator'; +import { clientUtils } from '../clientUtils'; +import { NeoNotImplementedError } from '../errors'; +import { convertAsset, convertBlock, convertContract, convertTransaction } from './convert'; +import { JSONRPCClient } from './JSONRPCClient'; +import { JSONRPCHTTPProvider } from './JSONRPCHTTPProvider'; +import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; + +const logger = debug('NEOONE:DataProvider'); + +export interface DataProviderOptions { + readonly network: NetworkType; + readonly rpcURL: string | JSONRPCProvider | JSONRPCProviderManager; + readonly iterBlocksFetchTimeoutMS?: number; + readonly iterBlocksBatchSize?: number; +} + +export interface DataProvider { + readonly setRPCURL: (rpcURL: string) => void; + readonly getUnclaimed: ( + address: AddressString, + ) => Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }>; + readonly getClaimAmount: (input: Input) => Promise; + readonly getUnspentOutputs: (address: AddressString) => Promise; + readonly relayTransaction: ( + transaction: TransactionBaseModel, + networkFee?: BigNumber, + ) => Promise; + readonly getTransactionReceipt: (hash: Hash256String, options?: GetOptions) => Promise; + readonly getInvocationData: (hash: Hash256String) => Promise; + readonly testInvoke: (transaction: InvocationTransactionModel) => Promise; + readonly getAccount: (address: AddressString) => Promise; + readonly getAsset: (hash: Hash256String) => Promise; + readonly getBlock: (hashOrIndex: Hash256String | number, options?: GetOptions) => Promise; + readonly iterBlocks: (options: IterOptions) => AsyncIterable; + readonly getBestBlockHash: () => Promise; + readonly getBlockCount: () => Promise; + readonly getContract: (address: AddressString) => Promise; + readonly getMemPool: () => Promise; + readonly getTransaction: (hash: Hash256String) => Promise; + readonly getOutput: (input: Input) => Promise; + readonly getConnectedPeers: () => Promise; + readonly getNetworkSettings: () => Promise; + readonly iterActionsRaw: (options: IterOptions) => AsyncIterable; + readonly call: ( + contract: AddressString, + method: string, + params: ReadonlyArray, + ) => Promise; + readonly iterStorage: (address: AddressString) => AsyncIterable; +} + +/** + * Implements the methods required by the `NEOONEProvider`. + */ +export abstract class DataProviderBase implements DataProvider { + public readonly network: NetworkType; + protected mutableClient: JSONRPCClient; + protected readonly iterBlocksFetchTimeoutMS: number | undefined; + protected readonly iterBlocksBatchSize: number | undefined; + + public constructor({ network, rpcURL, iterBlocksFetchTimeoutMS, iterBlocksBatchSize }: DataProviderOptions) { + this.network = network; + this.mutableClient = new JSONRPCClient(typeof rpcURL === 'string' ? new JSONRPCHTTPProvider(rpcURL) : rpcURL); + this.iterBlocksFetchTimeoutMS = iterBlocksFetchTimeoutMS; + this.iterBlocksBatchSize = iterBlocksBatchSize; + } + + public setRPCURL(rpcURL: string): void { + this.mutableClient = new JSONRPCClient(new JSONRPCHTTPProvider(rpcURL)); + } + + public async getUnclaimed( + address: AddressString, + ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + return this.capture(async () => this.executeGetUnclaimed(address), 'neo_get_unclaimed'); + } + + public async getClaimAmount(_input: Input): Promise { + throw new NeoNotImplementedError('getClaimAmount'); + } + + public async getUnspentOutputs(address: AddressString): Promise { + return this.capture(async () => this.executeGetUnspentOutputs(address), 'neo_get_unspent'); + } + + public async relayTransaction( + transaction: TransactionBaseModel, + networkFee?: BigNumber, + ): Promise { + return this.executeRelayTransaction(transaction, networkFee); + } + + public async getTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { + return this.executeGetTransactionReceipt(hash, options); + } + + public async getInvocationData(_hash: Hash256String): Promise { + throw new NeoNotImplementedError('getInvocationData'); + } + + public async testInvoke(transaction: InvocationTransactionModel): Promise { + return this.executeTestInvoke(transaction); + } + + public async getAccount(address: AddressString): Promise { + const account = await this.getAccountInternal(address); + + return { + address, + balances: account.balances.reduce( + (acc, { asset, value }) => ({ + ...acc, + [asset]: new BigNumber(value), + }), + {}, + ), + }; + } + + public async getAsset(hash: Hash256String): Promise { + const asset = await this.mutableClient.getAsset(hash); + + return convertAsset(asset); + } + + public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { + const block = await this.mutableClient.getBlock(hashOrIndex, options); + + return convertBlock(block, this.convertConfirmedTransaction); + } + + public iterBlocks(options: IterOptions = {}): AsyncIterable { + return AsyncIterableX.from( + new AsyncBlockIterator({ + client: this, + options, + fetchTimeoutMS: this.iterBlocksFetchTimeoutMS, + batchSize: this.iterBlocksBatchSize, + }), + ); + } + + public async getBestBlockHash(): Promise { + return this.mutableClient.getBestBlockHash(); + } + + public async getBlockCount(): Promise { + return this.mutableClient.getBlockCount(); + } + + public async getContract(address: AddressString): Promise { + const contract = await this.mutableClient.getContract(address); + + return convertContract(contract); + } + + public async getMemPool(): Promise { + return this.mutableClient.getMemPool(); + } + + public async getTransaction(hash: Hash256String): Promise { + const transaction = await this.mutableClient.getTransaction(hash); + + return convertTransaction(transaction); + } + + public async getOutput(input: Input): Promise { + return this.executeGetOutput(input); + } + + public async getConnectedPeers(): Promise { + return this.mutableClient.getConnectedPeers(); + } + + public async getNetworkSettings(): Promise { + throw new NeoNotImplementedError('getNetworkSettings'); + } + + public iterActionsRaw(_options: IterOptions = {}): AsyncIterable { + throw new NeoNotImplementedError('iterActionsRaw'); + } + + public async call( + contract: AddressString, + method: string, + params: ReadonlyArray, + ): Promise { + const testTransaction = new InvocationTransactionModel({ + version: 1, + gas: common.TEN_THOUSAND_FIXED8, + script: clientUtils.getInvokeMethodScript({ + address: contract, + method, + params, + }), + }); + + return this.testInvoke(testTransaction); + } + + public iterStorage(_address: AddressString): AsyncIterable { + throw new NeoNotImplementedError('iterStorage'); + } + + protected async getAccountInternal(address: AddressString): Promise { + return this.executeGetAccountInternal(address); + } + + protected abstract async executeGetUnclaimed( + address: AddressString, + ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }>; + + protected abstract async executeGetUnspentOutputs(address: AddressString): Promise; + + protected abstract async executeRelayTransaction( + transaction: TransactionBaseModel, + networkFee?: BigNumber, + ): Promise; + + protected abstract async executeGetTransactionReceipt( + hash: Hash256String, + options?: GetOptions, + ): Promise; + + protected abstract async executeTestInvoke(transaction: InvocationTransactionModel): Promise; + + protected abstract async executeGetOutput(input: Input): Promise; + + protected abstract async executeGetAccountInternal(address: AddressString): Promise; + + protected abstract convertConfirmedTransaction(transaction: TransactionJSON, block: BlockJSON): ConfirmedTransaction; + + protected async capture(func: () => Promise, title: string): Promise { + try { + const result = await func(); + logger('%o', { level: 'debug', title }); + + return result; + } catch (error) { + logger('%o', { level: 'error', title, error: error.message }); + throw error; + } + } +} diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index a93390912b..c95ae4a258 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -11,11 +11,13 @@ import { Hash256String, InputJSON, InvocationDataJSON, - InvocationResultJSON, + NeoClaimableJSON, + NeoUnspentJSON, NetworkSettingsJSON, OutputJSON, Peer, PrivateNetworkSettings, + RawInvocationResultJSON, RelayTransactionResultJSON, StorageItemJSON, TransactionJSON, @@ -32,6 +34,15 @@ export class JSONRPCClient { this.provider = provider; } + public async getClaimable(address: AddressString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getclaimable', + params: [address], + }), + ); + } + public async getAccount(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ @@ -101,11 +112,23 @@ export class JSONRPCClient { ); } - public async testInvokeRaw(script: BufferString): Promise { + public async getUnspents(address: AddressString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getunspents', + params: [address], + }), + ); + } + + public async testInvokeRaw( + script: BufferString, + verifications: readonly BufferString[] = [], + ): Promise { return this.withInstance(async (provider) => provider.request({ method: 'invokescript', - params: [script], + params: [script, ...verifications], }), ); } @@ -128,6 +151,24 @@ export class JSONRPCClient { ); } + public async sendRawTransaction(value: BufferString): Promise { + return this.withInstance(async (provider) => + provider + .request({ + method: 'sendrawtransaction', + params: [value], + }) + .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 getOutput(input: InputJSON): Promise { return this.withInstance(async (provider) => provider.request({ @@ -178,6 +219,15 @@ export class JSONRPCClient { ); } + public async getTransactionHeight(hash: Hash256String): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'gettransactionheight', + 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..74d91fedba 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts @@ -305,6 +305,7 @@ export class JSONRPCHTTPProvider extends JSONRPCProvider { private async requestInternal(req: JSONRPCRequest, span: Span): Promise { let response; const { watchTimeoutMS, params = [] } = req; + if (watchTimeoutMS !== undefined) { response = await watchSingle({ endpoint: this.endpoint, diff --git a/packages/neo-one-client-core/src/provider/NEODataProvider.ts b/packages/neo-one-client-core/src/provider/NEODataProvider.ts new file mode 100644 index 0000000000..afa00a4072 --- /dev/null +++ b/packages/neo-one-client-core/src/provider/NEODataProvider.ts @@ -0,0 +1,298 @@ +/// +import { + AccountJSON, + AddressString, + assertAttributeUsageJSON, + AttributeJSON, + AttributeModel, + AttributeUsageModel, + BlockJSON, + BufferAttributeModel, + ClaimTransactionModel, + common, + ConfirmedTransaction, + ECPointAttributeModel, + GetOptions, + Hash256String, + Input, + InputJSON, + InputOutput, + InvocationTransactionModel, + Output, + RawCallReceipt, + RelayTransactionResult, + scriptHashToAddress, + TransactionBaseJSON, + TransactionBaseModel, + TransactionJSON, + TransactionReceipt, + TransactionTypeModel, + UInt160AttributeModel, + UInt256AttributeModel, + utils, + VMState, +} from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; +import _ from 'lodash'; +import { interval } from 'rxjs'; +import { filter, switchMap, take, timeout } from 'rxjs/operators'; +import { NeoNotImplementedError, UnknownTransactionError } from '../errors'; +import { + convertCallReceipt, + convertInput, + convertInputs, + convertOutput, + convertRelayTransactionResult, + convertTransactionBase, +} from './convert'; +import { DataProviderBase } from './DataProviderBase'; + +/** + * Implements the methods required by the `NEOONEProvider` using a NEO node. + */ +export class NEODataProvider extends DataProviderBase { + protected async executeGetOutput(input: Input): Promise { + const transaction = await this.getTransaction(input.hash); + + return transaction.outputs[input.index]; + } + protected async executeTestInvoke(transaction: InvocationTransactionModel): Promise { + const scriptHashesForVerifying = await transaction.getScriptHashesForVerifying({ + getOutput: this.getOutput, + getAsset: this.getAsset, + }); + + const result = await this.mutableClient.testInvokeRaw(transaction.script.toString('hex'), scriptHashesForVerifying); + const gasConsumed = new BigNumber(result.gas_consumed).lt(utils.TEN_BIG_NUMBER) + ? '0' + : new BigNumber(result.gas_consumed).minus(utils.TEN_BIG_NUMBER).toString(); + + if (result.state === 'HALT') { + return convertCallReceipt({ + result: { + state: VMState.Halt, + gas_consumed: gasConsumed, + gas_cost: result.gas_consumed, + stack: result.stack, + }, + actions: [], + }); + } + + return convertCallReceipt({ + result: { + state: VMState.Fault, + gas_consumed: gasConsumed, + gas_cost: result.gas_consumed, + stack: result.stack, + message: '', + }, + actions: [], + }); + } + protected async executeGetTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { + let watchTimeoutMS = 120000; + if (options !== undefined && options.timeoutMS !== undefined) { + watchTimeoutMS = options.timeoutMS; + } + + let height: number | undefined; + try { + height = await interval(5000) + .pipe( + switchMap(async () => { + try { + // tslint:disable-next-line prefer-immediate-return + const result = await this.mutableClient.getTransactionHeight(hash); + + // tslint:disable-next-line no-var-before-return + return result; + } catch { + return undefined; + } + }), + filter((transactionHeight) => transactionHeight !== undefined), + take(1), + timeout(new Date(Date.now() + watchTimeoutMS)), + ) + .toPromise(); + } catch { + throw new UnknownTransactionError(hash); + } + + if (height === undefined) { + throw new UnknownTransactionError(hash); + } + const block = await this.getBlock(height); + + return { + blockIndex: height, + blockHash: block.hash, + transactionIndex: block.transactions.findIndex((transaction) => + common.uInt256Equal(common.hexToUInt256(transaction.hash), common.hexToUInt256(hash)), + ), + globalIndex: new BigNumber(-1), + }; + } + protected async executeRelayTransaction( + transaction: TransactionBaseModel, + networkFee: BigNumber = utils.ZERO_BIG_NUMBER, + ): Promise { + const transactionSerialized = transaction.serializeWire(); + await this.mutableClient.sendRawTransaction(transactionSerialized.toString('hex')); + + const transactionBase: TransactionBaseJSON = { + txid: transaction.hashHex, + size: transactionSerialized.byteLength, + version: transaction.version, + attributes: transaction.attributes.map(this.convertAttributeModel), + vin: transaction.inputs.map((input) => ({ + txid: input.hashHex, + vout: input.index, + })), + vout: transaction.outputs.map((output, n) => ({ + n, + asset: common.uInt256ToHex(output.asset), + value: output.value.toString(), + address: scriptHashToAddress(common.uInt160ToHex(output.address)), + })), + scripts: transaction.scripts.map((script) => ({ + invocation: script.invocation.toString('hex'), + verification: script.verification.toString('hex'), + })), + sys_fee: utils.ZERO.toString(), + net_fee: networkFee.toString(), + data: undefined, + }; + + if (transaction.type === TransactionTypeModel.Claim) { + return convertRelayTransactionResult({ + transaction: { + ...transactionBase, + type: 'ClaimTransaction', + claims: (transaction as ClaimTransactionModel).claims.map((input) => ({ + txid: input.hashHex, + vout: input.index, + })), + }, + }); + } + if (transaction.type === TransactionTypeModel.Invocation) { + return convertRelayTransactionResult({ + transaction: { + ...transactionBase, + type: 'InvocationTransaction', + script: (transaction as InvocationTransactionModel).script.toString('hex'), + gas: (transaction as InvocationTransactionModel).gas.toString(), + }, + }); + } + + throw new NeoNotImplementedError('Transaction types besides Claim & Invocation are'); + } + protected async executeGetUnspentOutputs(address: AddressString): Promise { + const unspents = await this.mutableClient.getUnspents(address); + + return _.flatten( + unspents.balance.map(({ unspent, asset_hash }) => + unspent.map(({ txid, n, value }) => { + const output = convertOutput({ address, asset: common.add0x(asset_hash), value, n }); + const input = convertInput({ txid, vout: n }); + + return { + ...input, + ...output, + }; + }), + ), + ); + } + protected async executeGetUnclaimed( + address: AddressString, + ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + const claimable = await this.mutableClient.getClaimable(address); + + return { + unclaimed: convertInputs( + claimable.claimable.map(({ txid, n }) => ({ txid, vout: n })), + ), + amount: new BigNumber(claimable.unclaimed), + }; + } + + protected async executeGetAccountInternal(address: AddressString): Promise { + const [account, { claimable }, unspents] = await Promise.all([ + this.mutableClient.getAccount(address), + this.mutableClient.getClaimable(address), + this.mutableClient.getUnspents(address), + ]); + + return { + version: account.version, + script_hash: account.script_hash, + frozen: account.frozen, + votes: account.votes, + balances: account.balances, + unspent: _.flatten( + unspents.balance.map(({ unspent }) => unspent.map(({ txid, n }) => ({ txid, vout: n }))), + ), + unclaimed: claimable.map(({ txid, n }) => ({ txid, vout: n })), + }; + } + + protected convertConfirmedTransaction(transaction: TransactionJSON, block: BlockJSON): ConfirmedTransaction { + const data = { + blockHash: block.hash, + blockIndex: block.index, + transactionIndex: block.tx.findIndex((tx) => tx.txid === transaction.txid), + globalIndex: new BigNumber(-1), + }; + + return convertTransactionBase( + transaction, + (invocation, transactionBase) => ({ + ...transactionBase, + type: 'InvocationTransaction', + script: invocation.script, + gas: new BigNumber(invocation.gas), + receipt: data, + }), + // tslint:disable-next-line no-any + (converted) => ({ ...converted, receipt: data } as any), + ); + } + + private convertAttributeModel(attribute: AttributeModel): AttributeJSON { + const usage = assertAttributeUsageJSON(AttributeUsageModel[attribute.usage]); + + if (attribute instanceof UInt160AttributeModel) { + return { + usage, + data: common.uInt160ToHex(attribute.value), + }; + } + + if (attribute instanceof UInt256AttributeModel) { + return { + usage, + data: common.uInt256ToHex(attribute.value), + }; + } + + if (attribute instanceof ECPointAttributeModel) { + return { + usage, + data: common.ecPointToHex(attribute.value), + }; + } + + if (attribute instanceof BufferAttributeModel) { + return { + usage, + data: attribute.value.toString('hex'), + }; + } + + throw new Error('For TS'); + } +} diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 0ddad2da02..48eaf7c606 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -1,58 +1,29 @@ /// import { - Account, AccountJSON, AddressString, - Asset, - AssetJSON, - AssetType, - AssetTypeJSON, - Attribute, - AttributeJSON, Block, - BlockJSON, - common, ConfirmedTransaction, - Contract, - ContractJSON, - ContractParameterType, - ContractParameterTypeJSON, DeveloperProvider, GetOptions, Hash256String, Input, - InputJSON, InputOutput, - InvocationDataJSON, - InvocationTransactionJSON, InvocationTransactionModel, IterOptions, - JSONHelper, NetworkSettings, - NetworkSettingsJSON, - NetworkType, Output, - OutputJSON, - Peer, PrivateNetworkSettings, RawAction, RawCallReceipt, RawInvocationData, - RawStorageChange, RelayTransactionResult, - RelayTransactionResultJSON, - ScriptBuilderParam, - scriptHashToAddress, - StorageChangeJSON, StorageItem, StorageItemJSON, - Transaction, - TransactionBase, + TransactionBaseModel, TransactionJSON, TransactionReceipt, utils, - VerifyTransactionResult, - VerifyTransactionResultJSON, } from '@neo-one/client-common'; import { utils as commonUtils } from '@neo-one/utils'; import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; @@ -60,61 +31,25 @@ 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 { JSONRPCClient } from './JSONRPCClient'; -import { JSONRPCHTTPProvider } from './JSONRPCHTTPProvider'; -import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; - -const logger = debug('NEOONE:DataProvider'); - -export interface NEOONEDataProviderOptions { - readonly network: NetworkType; - readonly rpcURL: string | JSONRPCProvider | JSONRPCProviderManager; - readonly iterBlocksFetchTimeoutMS?: number; - readonly iterBlocksBatchSize?: number; -} +import { + convertCallReceipt, + convertConfirmedTransaction, + convertInputs, + convertInvocationData, + convertNetworkSettings, + convertOutput, + convertRelayTransactionResult, + convertStorageItem, +} from './convert'; +import { DataProviderBase } from './DataProviderBase'; /** * Implements the methods required by the `NEOONEProvider` as well as the `DeveloperProvider` interface using a NEO•ONE node. */ -export class NEOONEDataProvider implements DeveloperProvider { - public readonly network: NetworkType; - private mutableClient: JSONRPCClient; - private readonly iterBlocksFetchTimeoutMS: number | undefined; - private readonly iterBlocksBatchSize: number | undefined; - - public constructor({ network, rpcURL, iterBlocksFetchTimeoutMS, iterBlocksBatchSize }: NEOONEDataProviderOptions) { - this.network = network; - this.mutableClient = new JSONRPCClient(typeof rpcURL === 'string' ? new JSONRPCHTTPProvider(rpcURL) : rpcURL); - this.iterBlocksFetchTimeoutMS = iterBlocksFetchTimeoutMS; - this.iterBlocksBatchSize = iterBlocksBatchSize; - } - - public setRPCURL(rpcURL: string): void { - this.mutableClient = new JSONRPCClient(new JSONRPCHTTPProvider(rpcURL)); - } - - public async getUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - 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'); - } - +export class NEOONEDataProvider extends DataProviderBase implements DeveloperProvider { public async getClaimAmount(input: Input): Promise { return this.capture( async () => this.mutableClient.getClaimAmount({ txid: input.hash, vout: input.index }), @@ -122,47 +57,6 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } - 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 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'); - } - - public async relayTransaction(transaction: string): Promise { - const result = await this.mutableClient.relayTransaction(transaction); - - return this.convertRelayTransactionResult(result); - } - - public async getTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { - const result = await this.mutableClient.getTransactionReceipt(hash, options); - - return { ...result, globalIndex: new BigNumber(result.globalIndex) }; - } - public async getInvocationData(hash: Hash256String): Promise { const [invocationData, transaction] = await Promise.all([ this.mutableClient.getInvocationData(hash), @@ -173,7 +67,7 @@ export class NEOONEDataProvider implements DeveloperProvider { throw new MissingTransactionDataError(hash); } - return this.convertInvocationData( + return convertInvocationData( invocationData, transaction.data.blockHash, transaction.data.blockIndex, @@ -182,39 +76,6 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } - public async testInvoke(transaction: string): Promise { - const receipt = await this.mutableClient.testInvocation(transaction); - - return convertCallReceipt(receipt); - } - - public async getAccount(address: AddressString): Promise { - const account = await this.getAccountInternal(address); - - return { - address, - balances: account.balances.reduce( - (acc, { asset, value }) => ({ - ...acc, - [asset]: new BigNumber(value), - }), - {}, - ), - }; - } - - public async getAsset(hash: Hash256String): Promise { - const asset = await this.mutableClient.getAsset(hash); - - return this.convertAsset(asset); - } - - public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { - const block = await this.mutableClient.getBlock(hashOrIndex, options); - - return this.convertBlock(block); - } - public iterBlocks(options: IterOptions = {}): AsyncIterable { return AsyncIterableX.from( new AsyncBlockIterator({ @@ -226,47 +87,10 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } - public async getBestBlockHash(): Promise { - return this.mutableClient.getBestBlockHash(); - } - - public async getBlockCount(): Promise { - return this.mutableClient.getBlockCount(); - } - - public async getContract(address: AddressString): Promise { - const contract = await this.mutableClient.getContract(address); - - return this.convertContract(contract); - } - - public async getMemPool(): Promise { - return this.mutableClient.getMemPool(); - } - - public async getTransaction(hash: Hash256String): Promise { - const transaction = await this.mutableClient.getTransaction(hash); - - 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(); - } - public async getNetworkSettings(): Promise { const settings = await this.mutableClient.getNetworkSettings(); - return this.convertNetworkSettings(settings); + return convertNetworkSettings(settings); } public iterActionsRaw(options: IterOptions = {}): AsyncIterable { @@ -287,24 +111,6 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } - public async call( - contract: AddressString, - method: string, - params: ReadonlyArray, - ): Promise { - const testTransaction = new InvocationTransactionModel({ - version: 1, - gas: common.TEN_THOUSAND_FIXED8, - script: clientUtils.getInvokeMethodScript({ - address: contract, - method, - params, - }), - }); - - return this.testInvoke(testTransaction.serializeWire().toString('hex')); - } - public async runConsensusNow(): Promise { return this.mutableClient.runConsensusNow(); } @@ -341,411 +147,83 @@ export class NEOONEDataProvider implements DeveloperProvider { return AsyncIterableX.from(this.mutableClient.getAllStorage(address).then((res) => AsyncIterableX.from(res))).pipe( // tslint:disable-next-line no-any flatten() as any, - map((storageItem) => this.convertStorageItem(storageItem)), - ); - } - - private convertStorageItem(storageItem: StorageItemJSON): StorageItem { - return { - address: scriptHashToAddress(storageItem.hash), - key: storageItem.key, - value: storageItem.value, - }; - } - - private convertBlock(block: BlockJSON): Block { - return { - version: block.version, - hash: block.hash, - previousBlockHash: block.previousblockhash, - merkleRoot: block.merkleroot, - time: block.time, - index: block.index, - nonce: block.nonce, - nextConsensus: block.nextconsensus, - script: block.script, - 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, - ); - } - - 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), - }; - - 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), + map(convertStorageItem), ); } - 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), - }; - - 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); - } + protected async executeGetOutput(input: Input): Promise { + const output = await this.mutableClient.getOutput({ + txid: input.hash, + vout: input.index, + }); - 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, - })); + return convertOutput(output); } - private convertInputs(inputs: readonly InputJSON[]): readonly Input[] { - return inputs.map((input) => this.convertInput(input)); - } + protected async executeTestInvoke(transaction: InvocationTransactionModel): Promise { + const receipt = await this.mutableClient.testInvocation(transaction.serializeWire().toString('hex')); - private convertInput(input: InputJSON): Input { - return { - hash: input.txid, - index: input.vout, - }; + return convertCallReceipt(receipt); } - private convertOutputs(outputs: readonly OutputJSON[]): readonly Output[] { - return outputs.map((output) => this.convertOutput(output)); - } + protected async executeRelayTransaction( + transaction: TransactionBaseModel, + _networkFee?: BigNumber, + ): Promise { + const result = await this.mutableClient.relayTransaction(transaction.serializeWire().toString('hex')); - private convertOutput(output: OutputJSON): Output { - return { - asset: output.asset, - address: output.address, - value: new BigNumber(output.value), - }; + return convertRelayTransactionResult(result); } - private convertContract(contract: ContractJSON): Contract { - 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, - }; - } + protected async executeGetTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { + const result = await this.mutableClient.getTransactionReceipt(hash, options); - private convertContractParameterType(param: ContractParameterTypeJSON): ContractParameterType { - switch (param) { - case 'Signature': - return 'Signature'; - case 'Boolean': - return 'Boolean'; - case 'Integer': - return 'Integer'; - case 'Hash160': - return 'Address'; - case 'Hash256': - return 'Hash256'; - case 'ByteArray': - return 'Buffer'; - case 'PublicKey': - return 'PublicKey'; - case 'String': - return 'String'; - case 'Array': - return 'Array'; - case 'Map': - return 'Map'; - case 'InteropInterface': - return 'InteropInterface'; - case 'Void': - return 'Void'; - /* istanbul ignore next */ - default: - commonUtils.assertNever(param); - throw new Error('For TS'); - } + return { ...result, globalIndex: new BigNumber(result.globalIndex) }; } - 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), + protected async executeGetUnspentOutputs(address: AddressString): Promise { + 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 output = convertOutput(outputJSON); + + return { + asset: output.asset, + value: output.value, + address: output.address, + hash: input.txid, + index: input.vout, + }; + }, ), - 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, - }; + return outputs.filter(commonUtils.notNull); } - - 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; - } + protected async executeGetUnclaimed( + address: AddressString, + ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + const account = await this.getAccountInternal(address); + const amounts = await Promise.all(account.unclaimed.map(async (input) => this.mutableClient.getClaimAmount(input))); 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, + unclaimed: convertInputs(account.unclaimed), + amount: amounts.reduce((acc, amount) => acc.plus(amount), utils.ZERO_BIG_NUMBER), }; } - 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 { + protected async executeGetAccountInternal(address: AddressString): Promise { return this.mutableClient.getAccount(address); } - private convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { - return { - issueGASFee: new BigNumber(settings.issueGASFee), - }; - } - - private convertRelayTransactionResult(result: RelayTransactionResultJSON): RelayTransactionResult { - const transaction = this.convertTransaction(result.transaction); - const verifyResult = - result.verifyResult === undefined ? undefined : this.convertVerifyResult(transaction.hash, 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 async capture(func: () => Promise, title: string): Promise { - try { - const result = await func(); - logger('%o', { level: 'debug', title }); - - return result; - } catch (error) { - logger('%o', { level: 'error', title, error: error.message }); - throw error; - } + protected convertConfirmedTransaction(transaction: TransactionJSON): ConfirmedTransaction { + return convertConfirmedTransaction(transaction); } } diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index deaf5d796d..3ceec546a1 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -1,43 +1,14 @@ -import { - Account, - AddressString, - Block, - GetOptions, - Hash256String, - Input, - InputOutput, - IterOptions, - NetworkSettings, - NetworkType, - Output, - RawAction, - RawCallReceipt, - RawInvocationData, - RelayTransactionResult, - ScriptBuilderParam, - Transaction, - TransactionReceipt, -} from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { UnknownNetworkError } from '../errors'; -import { Provider } from '../user'; -import { NEOONEDataProvider, NEOONEDataProviderOptions } from './NEOONEDataProvider'; +import { NetworkType } from '@neo-one/client-common'; +import { DataProviderOptions } from './DataProviderBase'; +import { NEOONEDataProvider } from './NEOONEDataProvider'; +import { ProviderBase } from './ProviderBase'; /** * Implements the `Provider` interface expected by a `LocalUserAccountProvider` using a NEO•ONE node. */ -export class NEOONEProvider implements Provider { - public readonly networks$: Observable; - private readonly networksInternal$: BehaviorSubject; - // tslint:disable-next-line readonly-keyword - private readonly mutableProviders: { [key: string]: NEOONEDataProvider | undefined }; - - public constructor(options: ReadonlyArray = []) { - this.networksInternal$ = new BehaviorSubject([]); - this.networks$ = this.networksInternal$; - this.mutableProviders = {}; - +export class NEOONEProvider extends ProviderBase { + public constructor(options: ReadonlyArray = []) { + super(); const networks = options.map((opts) => { this.mutableProviders[opts.network] = opts instanceof NEOONEDataProvider ? opts : new NEOONEDataProvider(opts); @@ -47,99 +18,10 @@ export class NEOONEProvider implements Provider { this.networksInternal$.next(networks); } - public getNetworks(): readonly NetworkType[] { - return this.networksInternal$.getValue(); - } - - public addNetwork(options: { readonly network: NetworkType; readonly rpcURL: string }): void { - const { network, rpcURL } = options; - this.mutableProviders[network] = new NEOONEDataProvider({ network, rpcURL }); - const networks = this.networksInternal$.value.filter((net) => network !== net).concat([network]); - this.networksInternal$.next(networks); - } - - public async getUnclaimed( - network: NetworkType, - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - 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 { - return this.getProvider(network).relayTransaction(transaction); - } - - public async getTransactionReceipt( - network: NetworkType, - hash: Hash256String, - options?: GetOptions, - ): Promise { - return this.getProvider(network).getTransactionReceipt(hash, options); - } - - public async getInvocationData(network: NetworkType, hash: Hash256String): Promise { - return this.getProvider(network).getInvocationData(hash); - } - - public async testInvoke(network: NetworkType, transaction: string): Promise { - return this.getProvider(network).testInvoke(transaction); - } - - public async call( - network: NetworkType, - contract: AddressString, - method: string, - params: ReadonlyArray, - ): Promise { - return this.getProvider(network).call(contract, method, params); - } - - public async getNetworkSettings(network: NetworkType): Promise { - return this.getProvider(network).getNetworkSettings(); - } - - public async getBlockCount(network: NetworkType): Promise { - return this.getProvider(network).getBlockCount(); - } - - public async getTransaction(network: NetworkType, hash: Hash256String): Promise { - 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); - } - - public async getAccount(network: NetworkType, address: AddressString): Promise { - 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); - } - - private getProvider(network: NetworkType): NEOONEDataProvider { - const provider = this.mutableProviders[network]; - if (provider === undefined) { - throw new UnknownNetworkError(network); - } - - return provider; + protected createDataProvider(options: { + readonly network: NetworkType; + readonly rpcURL: string; + }): NEOONEDataProvider { + return new NEOONEDataProvider(options); } } diff --git a/packages/neo-one-client-core/src/provider/NEOProvider.ts b/packages/neo-one-client-core/src/provider/NEOProvider.ts new file mode 100644 index 0000000000..3f546146ee --- /dev/null +++ b/packages/neo-one-client-core/src/provider/NEOProvider.ts @@ -0,0 +1,24 @@ +import { NetworkType } from '@neo-one/client-common'; +import { DataProviderOptions } from './DataProviderBase'; +import { NEODataProvider } from './NEODataProvider'; +import { ProviderBase } from './ProviderBase'; + +/** + * Implements the `Provider` interface expected by a `LocalUserAccountProvider` using a NEO node. + */ +export class NEOProvider extends ProviderBase { + public constructor(options: ReadonlyArray = []) { + super(); + const networks = options.map((opts) => { + this.mutableProviders[opts.network] = opts instanceof NEODataProvider ? opts : new NEODataProvider(opts); + + return opts.network; + }); + + this.networksInternal$.next(networks); + } + + protected createDataProvider(options: { readonly network: NetworkType; readonly rpcURL: string }): NEODataProvider { + return new NEODataProvider(options); + } +} diff --git a/packages/neo-one-client-core/src/provider/ProviderBase.ts b/packages/neo-one-client-core/src/provider/ProviderBase.ts new file mode 100644 index 0000000000..20b10e36cd --- /dev/null +++ b/packages/neo-one-client-core/src/provider/ProviderBase.ts @@ -0,0 +1,148 @@ +import { + Account, + AddressString, + Block, + GetOptions, + Hash256String, + Input, + InputOutput, + InvocationTransactionModel, + IterOptions, + NetworkSettings, + NetworkType, + Output, + RawAction, + RawCallReceipt, + RawInvocationData, + RelayTransactionResult, + ScriptBuilderParam, + Transaction, + TransactionBaseModel, + TransactionReceipt, +} from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { UnknownNetworkError } from '../errors'; +import { Provider } from '../user'; +import { DataProviderBase } from './DataProviderBase'; + +/** + * Implements the `Provider` interface expected by a `LocalUserAccountProvider`. + */ +export abstract class ProviderBase implements Provider { + public readonly networks$: Observable; + protected readonly networksInternal$: BehaviorSubject; + // tslint:disable-next-line readonly-keyword + protected readonly mutableProviders: { [key: string]: TDataProvider | undefined }; + + public constructor() { + this.networksInternal$ = new BehaviorSubject([]); + this.networks$ = this.networksInternal$; + this.mutableProviders = {}; + } + + public getNetworks(): readonly NetworkType[] { + return this.networksInternal$.getValue(); + } + + public addNetwork(options: { readonly network: NetworkType; readonly rpcURL: string }): void { + const { network, rpcURL } = options; + this.mutableProviders[network] = this.createDataProvider({ network, rpcURL }); + const networks = this.networksInternal$.value.filter((net) => network !== net).concat([network]); + this.networksInternal$.next(networks); + } + + public async getUnclaimed( + network: NetworkType, + address: AddressString, + ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + 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: TransactionBaseModel, + networkFee?: BigNumber, + ): Promise { + return this.getProvider(network).relayTransaction(transaction, networkFee); + } + + public async getTransactionReceipt( + network: NetworkType, + hash: Hash256String, + options?: GetOptions, + ): Promise { + return this.getProvider(network).getTransactionReceipt(hash, options); + } + + public async getInvocationData(network: NetworkType, hash: Hash256String): Promise { + return this.getProvider(network).getInvocationData(hash); + } + + public async testInvoke(network: NetworkType, transaction: InvocationTransactionModel): Promise { + return this.getProvider(network).testInvoke(transaction); + } + + public async call( + network: NetworkType, + contract: AddressString, + method: string, + params: ReadonlyArray, + ): Promise { + return this.getProvider(network).call(contract, method, params); + } + + public async getNetworkSettings(network: NetworkType): Promise { + return this.getProvider(network).getNetworkSettings(); + } + + public async getBlockCount(network: NetworkType): Promise { + return this.getProvider(network).getBlockCount(); + } + + public async getTransaction(network: NetworkType, hash: Hash256String): Promise { + 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): TDataProvider { + return this.getProvider(network); + } + + public async getAccount(network: NetworkType, address: AddressString): Promise { + 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); + } + + protected abstract createDataProvider(options: { + readonly network: NetworkType; + readonly rpcURL: string; + }): TDataProvider; + + private getProvider(network: NetworkType): TDataProvider { + const provider = this.mutableProviders[network]; + if (provider === undefined) { + throw new UnknownNetworkError(network); + } + + return provider; + } +} diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index bbd5d12913..4a37b68515 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -1,14 +1,49 @@ import { ActionJSON, + AddressString, + Asset, + AssetJSON, + AssetType, + AssetTypeJSON, + Attribute, + AttributeJSON, + Block, + BlockJSON, CallReceiptJSON, + common, + ConfirmedTransaction, + Contract, + ContractJSON, ContractParameter, ContractParameterJSON, + ContractParameterType, + ContractParameterTypeJSON, + Input, + InputJSON, + InvocationDataJSON, InvocationResultJSON, + InvocationTransactionJSON, JSONHelper, + NetworkSettings, + NetworkSettingsJSON, + Output, + OutputJSON, RawAction, RawCallReceipt, + RawInvocationData, RawInvocationResult, + RawStorageChange, + RelayTransactionResult, + RelayTransactionResultJSON, scriptHashToAddress, + StorageChangeJSON, + StorageItem, + StorageItemJSON, + Transaction, + TransactionBase, + TransactionJSON, + VerifyTransactionResult, + VerifyTransactionResultJSON, VMState, } from '@neo-one/client-common'; import { utils } from '@neo-one/utils'; @@ -140,3 +175,397 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont throw new Error('For TS'); } } + +export function convertContractParameterType(param: ContractParameterTypeJSON): ContractParameterType { + switch (param) { + case 'Signature': + return 'Signature'; + case 'Boolean': + return 'Boolean'; + case 'Integer': + return 'Integer'; + case 'Hash160': + return 'Address'; + case 'Hash256': + return 'Hash256'; + case 'ByteArray': + return 'Buffer'; + case 'PublicKey': + return 'PublicKey'; + case 'String': + return 'String'; + case 'Array': + return 'Array'; + case 'Map': + return 'Map'; + case 'InteropInterface': + return 'InteropInterface'; + case 'Void': + return 'Void'; + /* istanbul ignore next */ + default: + utils.assertNever(param); + throw new Error('For TS'); + } +} + +export function convertStorageItem(storageItem: StorageItemJSON): StorageItem { + return { + address: scriptHashToAddress(storageItem.hash), + key: storageItem.key, + value: storageItem.value, + }; +} + +export function convertBlock( + block: BlockJSON, + convertTransactionHelp: (transaction: TransactionJSON, block: BlockJSON) => ConfirmedTransaction, +): Block { + return { + version: block.version, + hash: block.hash, + previousBlockHash: block.previousblockhash, + merkleRoot: block.merkleroot, + time: block.time, + index: block.index, + nonce: block.nonce, + nextConsensus: block.nextconsensus, + script: block.script, + size: block.size, + transactions: block.tx.map((transaction) => convertTransactionHelp(transaction, block)), + }; +} + +export function 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 */ + utils.assertNever(assetType); + /* istanbul ignore next */ + throw new Error('For TS'); + } +} + +export function 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; + } + + return { + hash: asset.id, + type: 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, + }; +} + +export function convertContract(contract: ContractJSON): Contract { + return { + version: contract.version, + address: scriptHashToAddress(contract.hash), + script: contract.script, + parameters: contract.parameters.map(convertContractParameterType), + returnType: 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, + }; +} + +export function convertInputs(inputs: readonly InputJSON[]): readonly Input[] { + return inputs.map(convertInput); +} + +export function convertInput(input: InputJSON): Input { + return { + hash: input.txid, + index: input.vout, + }; +} + +export function convertOutputs(outputs: readonly OutputJSON[]): readonly Output[] { + return outputs.map(convertOutput); +} + +export function convertOutput(output: OutputJSON): Output { + return { + asset: output.asset, + address: output.address, + value: new BigNumber(output.value), + }; +} + +export function 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, + })); +} + +export function convertTransactionBase( + transaction: TransactionJSON, + convertInvocation: (invocation: InvocationTransactionJSON, transactionBase: TransactionBase) => Result, + convertTransactionHelp: (transaction: Transaction) => Result, +): Result { + const transactionBase = { + hash: transaction.txid, + size: transaction.size, + version: transaction.version, + attributes: convertAttributes(transaction.attributes), + inputs: convertInputs(transaction.vin), + outputs: convertOutputs(transaction.vout), + scripts: transaction.scripts, + systemFee: new BigNumber(transaction.sys_fee), + networkFee: new BigNumber(transaction.net_fee), + }; + + let converted: Transaction; + switch (transaction.type) { + case 'ClaimTransaction': + converted = { + ...transactionBase, + type: 'ClaimTransaction', + claims: 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: convertContract(transaction.contract), + }; + break; + case 'RegisterTransaction': + converted = { + ...transactionBase, + type: 'RegisterTransaction', + asset: { + type: 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: + utils.assertNever(transaction); + throw new Error('For TS'); + } + + return convertTransactionHelp(converted); +} + +export function convertTransaction(transaction: TransactionJSON): Transaction { + return convertTransactionBase( + transaction, + (invocation, transactionBase) => ({ + ...transactionBase, + type: 'InvocationTransaction', + script: invocation.script, + gas: new BigNumber(invocation.gas), + }), + /* istanbul ignore next */ + (converted) => converted, + ); +} + +export function 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), + }; + + return convertTransactionBase( + transaction, + (invocation, transactionBase) => { + /* istanbul ignore next */ + if (invocation.invocationData === undefined || transaction.data === undefined) { + throw new Error('Unexpected undefined data'); + } + + const invocationData = 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), + ); +} + +export function convertInvocationData( + data: InvocationDataJSON, + blockHash: string, + blockIndex: number, + transactionHash: string, + transactionIndex: number, +): RawInvocationData { + return { + result: convertInvocationResult(data.result), + asset: data.asset === undefined ? data.asset : convertAsset(data.asset), + contracts: data.contracts.map(convertContract), + 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(convertStorageChange), + }; +} + +export function 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, + }; +} + +export function convertRelayTransactionResult(result: RelayTransactionResultJSON): RelayTransactionResult { + const transaction = convertTransaction(result.transaction); + const verifyResult = + result.verifyResult === undefined ? undefined : convertVerifyResult(transaction.hash, result.verifyResult); + + return { transaction, verifyResult }; +} + +/* istanbul ignore next */ +export function 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, + ), + ), + })), + }; +} + +export function convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { + return { + issueGASFee: new BigNumber(settings.issueGASFee), + }; +} diff --git a/packages/neo-one-client-core/src/provider/index.ts b/packages/neo-one-client-core/src/provider/index.ts index 4723d6675d..d1bbd0a183 100644 --- a/packages/neo-one-client-core/src/provider/index.ts +++ b/packages/neo-one-client-core/src/provider/index.ts @@ -1,6 +1,10 @@ export * from './convert'; +export * from './DataProviderBase'; export * from './JSONRPCClient'; export * from './JSONRPCHTTPProvider'; export * from './JSONRPCProvider'; +export * from './NEODataProvider'; export * from './NEOONEDataProvider'; +export * from './NEOProvider'; export * from './NEOONEProvider'; +export * from './ProviderBase'; diff --git a/packages/neo-one-client-core/src/sc/common.ts b/packages/neo-one-client-core/src/sc/common.ts index 1202bf91c1..0a93e405de 100644 --- a/packages/neo-one-client-core/src/sc/common.ts +++ b/packages/neo-one-client-core/src/sc/common.ts @@ -63,7 +63,8 @@ export const isTransactionOptions = (arg: any) => (arg.systemFee !== undefined && BigNumber.isBigNumber(arg.systemFee)) || (arg.sendFrom !== undefined && Array.isArray(arg.sendFrom)) || (arg.sendTo !== undefined && Array.isArray(arg.sendTo)) || - (arg.timeoutMS !== undefined && typeof arg.timeoutMS === 'number')); + (arg.timeoutMS !== undefined && typeof arg.timeoutMS === 'number') || + (arg.skipSysFeeCheck !== undefined && typeof arg.skipSysFeeCheck === 'boolean')); // tslint:disable-next-line:no-any export const isForwardValueOptions = (arg: any): boolean => diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 6e99172286..ea950371ca 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -86,7 +86,11 @@ export interface KeyStore { } export interface Provider extends ProviderBase { - readonly relayTransaction: (network: NetworkType, transaction: string) => Promise; + readonly relayTransaction: ( + network: NetworkType, + transaction: TransactionBaseModel, + networkFee?: BigNumber | undefined, + ) => Promise; } /** @@ -165,6 +169,7 @@ export class LocalUserAccountProvider Promise; + readonly networkFee?: BigNumber; readonly sourceMaps?: SourceMaps; }): Promise> { return this.capture( @@ -244,9 +250,8 @@ export class LocalUserAccountProvider receipt, + networkFee, }); } @@ -416,6 +422,7 @@ export class LocalUserAccountProvider receipt, + networkFee, }); } diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 0607ba56ed..c72365537f 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -151,7 +151,7 @@ export interface Provider { options?: GetOptions, ) => Promise; readonly getInvocationData: (network: NetworkType, hash: Hash256String) => Promise; - readonly testInvoke: (network: NetworkType, transaction: string) => Promise; + readonly testInvoke: (network: NetworkType, transaction: InvocationTransactionModel) => Promise; readonly call: ( network: NetworkType, contract: AddressString, @@ -171,6 +171,7 @@ interface TransactionOptionsFull { readonly attributes: readonly Attribute[]; readonly networkFee: BigNumber; readonly systemFee: BigNumber; + readonly skipSysFeeCheck: boolean; } const NEO_ONE_ATTRIBUTE: Attribute = { @@ -620,7 +621,12 @@ export abstract class UserAccountProviderBase { } protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { - const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER } = options; + const { + attributes = [], + networkFee = utils.ZERO_BIG_NUMBER, + systemFee = utils.ZERO_BIG_NUMBER, + skipSysFeeCheck = false, + } = options; const { from: fromIn } = options; let from = fromIn; @@ -637,6 +643,7 @@ export abstract class UserAccountProviderBase { attributes: attributes.concat([NEO_ONE_ATTRIBUTE]), networkFee, systemFee, + skipSysFeeCheck, }; } @@ -1251,6 +1258,7 @@ export abstract class UserAccountProviderBase { scripts = [], sourceMaps, reorderOutputs = (outputs) => outputs, + skipSysFeeCheck = false, }: { readonly script: Buffer; readonly transfers?: ReadonlyArray; @@ -1263,6 +1271,7 @@ export abstract class UserAccountProviderBase { readonly scripts?: ReadonlyArray; readonly sourceMaps?: SourceMaps; readonly reorderOutputs?: (outputs: ReadonlyArray) => ReadonlyArray; + readonly skipSysFeeCheck?: boolean; }): Promise<{ readonly gas: BigNumber; readonly attributes: ReadonlyArray; @@ -1278,18 +1287,28 @@ export abstract class UserAccountProviderBase { data: Buffer.from(`${utils.randomUInt()}`, 'utf8').toString('hex'), }); + if (skipSysFeeCheck) { + return { gas: utils.ZERO_BIG_NUMBER, attributes }; + } + const testTransaction = new InvocationTransactionModel({ version: 1, inputs: this.convertInputs(rawInputs.concat(testInputs)), outputs: this.convertOutputs(reorderOutputs(rawOutputs.concat(testOutputs))), - attributes: this.convertAttributes(attributes), + attributes: this.convertAttributes( + attributes.concat([ + { + usage: 'Script', + data: from.address, + }, + ]), + ), gas: common.TEN_THOUSAND_FIXED8, script, scripts, }); - const callReceipt = await this.provider.testInvoke(from.network, testTransaction.serializeWire().toString('hex')); - + const callReceipt = await this.provider.testInvoke(from.network, testTransaction); if (callReceipt.result.state === 'FAULT') { const message = await processActionsAndMessage({ actions: callReceipt.actions, @@ -1346,7 +1365,9 @@ export abstract class UserAccountProviderBase { sourceMaps, reorderOutputs = (outputs) => outputs, }: InvokeRawOptions) { - const { from, attributes: attributesIn, networkFee, systemFee } = this.getTransactionOptions(options); + const { from, attributes: attributesIn, networkFee, systemFee, skipSysFeeCheck } = this.getTransactionOptions( + options, + ); const { script, invokeMethodOptions } = this.getScriptAndInvokeMethodOptions(invokeMethodOptionsOrScript); return this.capture( @@ -1363,6 +1384,7 @@ export abstract class UserAccountProviderBase { scripts, sourceMaps, reorderOutputs, + skipSysFeeCheck, }); const { inputs, outputs } = await this.getTransfersInputOutputs({ 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..c729ae35a0 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 @@ -734,10 +734,10 @@ describe('LocalUserAccountProvider', () => { ); 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); @@ -783,10 +783,10 @@ describe('LocalUserAccountProvider', () => { ); 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); @@ -829,10 +829,10 @@ describe('LocalUserAccountProvider', () => { ); 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); @@ -882,10 +882,10 @@ describe('LocalUserAccountProvider', () => { ); 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); @@ -939,10 +939,10 @@ describe('LocalUserAccountProvider', () => { ); 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); @@ -991,10 +991,10 @@ describe('LocalUserAccountProvider', () => { ); 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/src/index.ts b/packages/neo-one-client/src/index.ts index 6df029a5dd..adc58d8214 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -200,7 +200,9 @@ export { LocalUserAccountProvider, LocalWallet, NEOONEDataProvider, - NEOONEDataProviderOptions, + DataProviderOptions, + DataProviderOptions as NEOONEDataProviderOptions, + DataProviderOptions as NEODataProviderOptions, NEOONEProvider, RemoteUserAccountProvider, SmartContract, From 2584c4d23017761860e8945a0a8f5344025b3e78 Mon Sep 17 00:00:00 2001 From: Alex Fragapane <34611820+afragapane@users.noreply.github.com> Date: Wed, 22 Apr 2020 17:29:19 -0700 Subject: [PATCH 033/141] Export NEODataProvider & NEOProvider (#2014) --- packages/neo-one-client-full/src/index.ts | 3 +++ packages/neo-one-client/src/index.ts | 2 ++ 2 files changed, 5 insertions(+) diff --git a/packages/neo-one-client-full/src/index.ts b/packages/neo-one-client-full/src/index.ts index 72985275e3..37167dcac8 100644 --- a/packages/neo-one-client-full/src/index.ts +++ b/packages/neo-one-client-full/src/index.ts @@ -76,8 +76,11 @@ export { Log, MinerTransaction, NEOONEDataProvider, + NEODataProvider, NEOONEDataProviderOptions, + NEODataProviderOptions, NEOONEProvider, + NEOProvider, NetworkType, Output, Param, diff --git a/packages/neo-one-client/src/index.ts b/packages/neo-one-client/src/index.ts index adc58d8214..4a88971265 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -200,10 +200,12 @@ export { LocalUserAccountProvider, LocalWallet, NEOONEDataProvider, + NEODataProvider, DataProviderOptions, DataProviderOptions as NEOONEDataProviderOptions, DataProviderOptions as NEODataProviderOptions, NEOONEProvider, + NEOProvider, RemoteUserAccountProvider, SmartContract, SmartContractAny, From d1ca94a51e263e2de0668ff9edd4463187dfb0a4 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 23 Apr 2020 12:17:15 -0700 Subject: [PATCH 034/141] fix(build): ignore transforming ec-key package in other format releases (#2015) --- packages/neo-one-build-tools/src/utils.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/neo-one-build-tools/src/utils.ts b/packages/neo-one-build-tools/src/utils.ts index 133aeccfe0..5dd7054c96 100644 --- a/packages/neo-one-build-tools/src/utils.ts +++ b/packages/neo-one-build-tools/src/utils.ts @@ -11,6 +11,8 @@ 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 () => { @@ -114,6 +116,9 @@ export const mapDep = (format: Format, depName: string): string => { }; 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); } From 97456e765d02b24229bc7544ff66549a22d42343 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 29 Apr 2020 11:20:14 -0700 Subject: [PATCH 035/141] chore(publish): release new version (#2018) --- .../addnodeoption_2020-04-10-20-33.json | 11 ---------- .../addnodeoption_2020-04-10-20-33.json | 11 ---------- .../addnodeoption_2020-04-15-22-26.json | 11 ---------- .../addnodeoption_2020-04-10-20-33.json | 11 ---------- packages/neo-one-cli-common-node/package.json | 4 ++-- packages/neo-one-cli-common/package.json | 6 +++--- packages/neo-one-cli/package.json | 8 ++++---- packages/neo-one-client-common/CHANGELOG.json | 12 +++++++++++ packages/neo-one-client-common/CHANGELOG.md | 9 ++++++++- packages/neo-one-client-common/package.json | 2 +- packages/neo-one-client-core/CHANGELOG.json | 17 ++++++++++++++++ packages/neo-one-client-core/CHANGELOG.md | 9 ++++++++- packages/neo-one-client-core/package.json | 4 ++-- .../neo-one-client-full-common/package.json | 2 +- .../neo-one-client-full-core/CHANGELOG.json | 20 +++++++++++++++++++ .../neo-one-client-full-core/CHANGELOG.md | 9 ++++++++- .../neo-one-client-full-core/package.json | 6 +++--- packages/neo-one-client-full/package.json | 4 ++-- packages/neo-one-client-switch/package.json | 2 +- packages/neo-one-client/CHANGELOG.json | 20 +++++++++++++++++++ packages/neo-one-client/CHANGELOG.md | 9 ++++++++- packages/neo-one-client/package.json | 6 +++--- .../package.json | 4 ++-- packages/neo-one-developer-tools/package.json | 2 +- packages/neo-one-editor/package.json | 2 +- packages/neo-one-local-browser/package.json | 4 ++-- packages/neo-one-node-bin/package.json | 4 ++-- packages/neo-one-node-blockchain/package.json | 2 +- packages/neo-one-node-browser/package.json | 4 ++-- packages/neo-one-node-consensus/package.json | 2 +- packages/neo-one-node-core/package.json | 2 +- .../neo-one-node-neo-settings/package.json | 2 +- packages/neo-one-node-protocol/package.json | 2 +- .../neo-one-node-rpc-handler/package.json | 2 +- .../neo-one-node-storage-cache/package.json | 2 +- .../neo-one-node-storage-common/package.json | 2 +- .../neo-one-node-storage-levelup/package.json | 2 +- packages/neo-one-node-vm/package.json | 2 +- .../package.json | 4 ++-- .../package.json | 6 +++--- .../neo-one-smart-contract-lib/package.json | 4 ++-- .../package.json | 2 +- .../package.json | 6 +++--- .../neo-one-smart-contract-test/package.json | 4 ++-- packages/neo-one-suite/package.json | 2 +- packages/neo-one-website/package.json | 2 +- 46 files changed, 158 insertions(+), 105 deletions(-) delete mode 100644 common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json delete mode 100644 common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json delete mode 100644 common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json delete mode 100644 common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json diff --git a/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json deleted file mode 100644 index ba4a91bf03..0000000000 --- a/common/changes/@neo-one/client-common/addnodeoption_2020-04-10-20-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "Added types to support NEODataProvider & C# node", - "type": "minor" - } - ], - "packageName": "@neo-one/client-common", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json deleted file mode 100644 index ba04f0f8ad..0000000000 --- a/common/changes/@neo-one/client-core/addnodeoption_2020-04-10-20-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase.", - "type": "minor" - } - ], - "packageName": "@neo-one/client-core", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json b/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json deleted file mode 100644 index a9c5c9e98e..0000000000 --- a/common/changes/@neo-one/client-full-core/addnodeoption_2020-04-15-22-26.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-full-core", - "comment": "Update LocalUserAccountProvider test", - "type": "patch" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json b/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json deleted file mode 100644 index 4af6933fc2..0000000000 --- a/common/changes/@neo-one/client/addnodeoption_2020-04-10-20-33.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client", - "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase.", - "type": "minor" - } - ], - "packageName": "@neo-one/client", - "email": "ahfragapane@gmail.com" -} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index d911cbd52c..7e8259c2ac 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-core": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-core": "^2.5.0", + "@neo-one/client-full-core": "^2.4.1", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index ff7accd8cd..71b8277db3 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -11,9 +11,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", + "@neo-one/client-full-core": "^2.4.1", "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index edd07adbd1..eb3595ab24 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -19,11 +19,11 @@ "@babel/register": "^7.5.5", "@neo-one/cli-common": "^2.5.0", "@neo-one/cli-common-node": "^2.5.0", - "@neo-one/client": "^2.4.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client": "^2.5.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/client-full": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-full-core": "^2.4.1", "@neo-one/client-switch": "^2.4.0", "@neo-one/logger": "^2.4.0", "@neo-one/logger-config": "^2.4.0", diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json index fbf9a21a5b..1af17d1962 100644 --- a/packages/neo-one-client-common/CHANGELOG.json +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/client-common", "entries": [ + { + "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", diff --git a/packages/neo-one-client-common/CHANGELOG.md b/packages/neo-one-client-common/CHANGELOG.md index 5e6b88f772..60c35b7146 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 69ae9ec623..5af7524f35 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE client common code.", "main": "./lib/index", "scripts": { diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json index b7e8df9d07..33744e9fc3 100644 --- a/packages/neo-one-client-core/CHANGELOG.json +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/client-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-core/CHANGELOG.md b/packages/neo-one-client-core/CHANGELOG.md index 720ca68d46..b06e632df2 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-core -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index e698fe3cd9..6066e838f1 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-core", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE client core types implementation.", "main": "./lib/index", "scripts": { @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/utils": "^2.4.0", "@reactivex/ix-es2015-cjs": "^2.5.3", diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index 6b8bd61eed..fd6d6ff9c4 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/utils": "^2.4.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-client-full-core/CHANGELOG.json b/packages/neo-one-client-full-core/CHANGELOG.json index d44d47b57a..d94ef731a1 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.json +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/client-full-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-full-core/CHANGELOG.md b/packages/neo-one-client-full-core/CHANGELOG.md index 259f2e5712..d2593e6f8e 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-full-core -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index 1bbeddadf6..3d1caa15e9 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.4.0", + "version": "2.4.1", "description": "NEO•ONE client-full core types implementation.", "main": "./lib/index", "scripts": { @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/client-full-common": "^2.4.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index f81584821c..0f091e8ab1 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0" + "@neo-one/client": "^2.5.0", + "@neo-one/client-full-core": "^2.4.1" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 674e0e641f..088a881efd 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -14,7 +14,7 @@ "dependencies": { "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/node-vm": "^2.4.0", "@neo-one/utils": "^2.4.0", "@opencensus/core": "^0.0.19", diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json index 60eddb7faf..2b4cd3df21 100644 --- a/packages/neo-one-client/CHANGELOG.json +++ b/packages/neo-one-client/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/client", "entries": [ + { + "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", diff --git a/packages/neo-one-client/CHANGELOG.md b/packages/neo-one-client/CHANGELOG.md index b352f30811..c91b903370 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index a51d742fbd..f9eb327549 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE client API.", "main": "./lib/index", "scripts": { @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/developer-tools": "^2.4.0" }, "devDependencies": { diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index df52e54017..7a4619a19d 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -14,8 +14,8 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/react": "^2.4.0", "@neo-one/react-common": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index c4d0357218..b20a596fae 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-core": "^2.5.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index f2b0edd3e5..b24723b1ec 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -28,7 +28,7 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", - "@neo-one/client": "^2.4.0", + "@neo-one/client": "^2.5.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/local-browser": "^2.3.1", "@neo-one/local-browser-worker": "^2.3.1", diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 301322ccb4..abe609348d 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -12,8 +12,8 @@ "sideEffects": false, "dependencies": { "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/node-browser": "^2.3.0", "@neo-one/smart-contract-codegen": "^2.4.0", "@neo-one/smart-contract-compiler": "^2.4.0", diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index 99f8ec719f..3b5b410114 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -29,8 +29,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.4.0", - "@neo-one/client-common": "^2.4.0", + "@neo-one/client": "^2.5.0", + "@neo-one/client-common": "^2.5.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", "@types/rc": "^1.1.0", diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index f85f6475f8..91c45a11a7 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/logger": "^2.4.0", "@neo-one/node-core": "^2.4.0", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index 9ed7d37c14..194a39a9d0 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -10,8 +10,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/node-blockchain": "^2.4.0", "@neo-one/node-core": "^2.4.0", "@neo-one/node-neo-settings": "^2.4.0", diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index fa4dad4376..fad97c6944 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/logger": "^2.4.0", "@neo-one/node-core": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index 155d2bc925..ff7b5c2bce 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-full-common": "^2.4.0", "@neo-one/utils": "^2.4.0", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index 9017907f07..69e32a0eac 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/node-core": "^2.4.0", "@neo-one/utils": "^2.4.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index 22ba504cda..04bdf4bfe7 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/logger": "^2.4.0", "@neo-one/node-consensus": "^2.4.0", diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index a050d7e67a..9afaec821d 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-switch": "^2.4.0", "@neo-one/logger": "^2.4.0", "@neo-one/node-core": "^2.4.0", diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 7317844823..7c7253be42 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/node-core": "^2.4.0", "@neo-one/node-storage-common": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index cb471fea40..646131c618 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/node-core": "^2.4.0", "@neo-one/utils": "^2.4.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 63a653eb3b..c6c04ea6f8 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/node-core": "^2.4.0", "@neo-one/node-storage-common": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 57aedaabc2..a2cbf06b7f 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -11,7 +11,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", + "@neo-one/client-common": "^2.5.0", "@neo-one/client-full-common": "^2.4.0", "@neo-one/node-core": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index 7c345febd4..d0fd201254 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -13,8 +13,8 @@ "sideEffects": false, "dependencies": { "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", "prettier": "^1.18.2", diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index f622415649..bfb4aa2e99 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -13,10 +13,10 @@ "sideEffects": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/client-full-common": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-full-core": "^2.4.1", "@neo-one/smart-contract": "^2.4.0", "@neo-one/ts-utils": "^2.4.0", "@neo-one/typescript-concatenator": "^2.4.0", diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 2544df0285..6fa5e5adda 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -14,8 +14,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "gulp": "~4.0.2", diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 8c57bef651..027e40e6ed 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -10,7 +10,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/local-browser": "^2.3.1", "@neo-one/local-singleton": "^2.3.1", "@neo-one/node-browser": "^2.3.0", diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 3cf7b40968..41a165a3d9 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -12,9 +12,9 @@ }, "dependencies": { "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", - "@neo-one/client-full-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", + "@neo-one/client-full-core": "^2.4.1", "@neo-one/logger": "^2.4.0", "@neo-one/smart-contract-compiler": "^2.4.0", "@neo-one/utils": "^2.4.0", diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index b7d8afe0d8..867fc50726 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -11,8 +11,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.4.0", - "@neo-one/client-core": "^2.4.0", + "@neo-one/client-common": "^2.5.0", + "@neo-one/client-core": "^2.5.0", "@neo-one/node": "^2.4.0", "@neo-one/node-neo-settings": "^2.4.0", "@neo-one/smart-contract-compiler-node": "^2.4.0", diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json index f3da3e54d8..c048ee4a20 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@neo-one/cli": "^2.5.0", - "@neo-one/client": "^2.4.0", + "@neo-one/client": "^2.5.0", "@neo-one/smart-contract": "^2.4.0", "@neo-one/smart-contract-lib": "^2.4.0", "@neo-one/smart-contract-test": "^2.4.0", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index ebd7626567..e39c03037e 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -70,7 +70,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.4.0", + "@neo-one/client": "^2.5.0", "@neo-one/react-core": "^2.4.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", From 5892e9d0ba92d5b9ba74f789b217964f6ea90194 Mon Sep 17 00:00:00 2001 From: Alex Fragapane <34611820+afragapane@users.noreply.github.com> Date: Wed, 29 Apr 2020 11:37:46 -0700 Subject: [PATCH 036/141] fix(bug): NEODataProvider with Agency preview contracts (#2017) --- .../neo-one-client-common/src/models/types.ts | 15 ++++++++++ .../src/provider/convert.ts | 30 ++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 4bbc8359f9..f42b60a2d5 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -428,3 +428,18 @@ export interface NeoUnspentJSON { readonly balance: readonly NeoBalanceJSON[]; readonly address: string; } + +export interface NeoPreviewContractJSON { + readonly name: string; + readonly version: string; + readonly author: string; + readonly email: string; + readonly description: string; + readonly code: { + readonly hash: string; + readonly script: string; + readonly parameters: readonly ContractParameterTypeJSON[]; + readonly returntype: ContractParameterTypeJSON; + }; + readonly needstorage: boolean; +} diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 4a37b68515..3ed27c1fda 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -24,6 +24,7 @@ import { InvocationResultJSON, InvocationTransactionJSON, JSONHelper, + NeoPreviewContractJSON, NetworkSettings, NetworkSettingsJSON, Output, @@ -287,7 +288,14 @@ export function convertAsset(asset: AssetJSON): Asset { }; } -export function convertContract(contract: ContractJSON): Contract { +export function convertContract(contractIn: ContractJSON): Contract { + let contract = contractIn; + // tslint:disable-next-line no-any + if (typeof (contract.version as any) === 'string' && (contract.version as any).includes('preview')) { + // tslint:disable-next-line no-any + contract = convertPreviewContract(contract as any); + } + return { version: contract.version, address: scriptHashToAddress(contract.hash), @@ -305,6 +313,26 @@ export function convertContract(contract: ContractJSON): Contract { }; } +export function convertPreviewContract(contract: NeoPreviewContractJSON): ContractJSON { + return { + version: 0, + hash: contract.code.hash, + script: contract.code.script, + parameters: contract.code.parameters, + returntype: contract.code.returntype, + name: contract.name, + code_version: 'preview', + author: contract.author, + email: contract.email, + description: contract.description, + properties: { + storage: contract.needstorage, + dynamic_invoke: false, + payable: false, + }, + }; +} + export function convertInputs(inputs: readonly InputJSON[]): readonly Input[] { return inputs.map(convertInput); } From 8d85a092c0128e5f1c1576fce5ff24f12d949985 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 4 May 2020 10:45:25 -0700 Subject: [PATCH 037/141] fix(docs): fix slight mismatch in deploy doc (#2023) --- packages/neo-one-website/docs/1-main-concepts/12-deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..9b7fa80826 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 { From b1a0a713921c23908ded0ec2f4b7ca41bdf38d9e Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 4 May 2020 10:46:25 -0700 Subject: [PATCH 038/141] chore(prettier): update prettier for TS v3.8 support (#1996) --- .../cli/prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../node-core/prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../node-vm/prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ .../prettier_2020-03-22-23-31.json | 11 +++++ common/config/rush/yarn.lock | 25 +++++++++- packages/neo-one-cli/src/bin/neo-one.ts | 7 +-- packages/neo-one-cli/src/cmd/build.ts | 5 +- packages/neo-one-cli/src/cmd/convert/index.ts | 7 +-- packages/neo-one-cli/src/cmd/deploy.ts | 5 +- .../neo-one-cli/src/cmd/start/neotracker.ts | 5 +- packages/neo-one-cli/src/utils/writeFile.ts | 4 +- packages/neo-one-client-common/src/crypto.ts | 25 ++-------- .../neo-one-client-common/src/models/vm.ts | 5 +- .../user/keystore/LocalKeyStore.test.ts | 5 +- .../src/common/createConsoleLogMessages.ts | 43 ++++------------- .../neo-one-client-switch/src/node/tracing.ts | 47 ++++++++++--------- .../src/ClientHook.tsx | 4 +- .../src/resolvePackage.ts | 13 +---- .../src/error/ReactErrorOverlay.ts | 2 +- .../error/containers/StackFrameCodeBlock.tsx | 4 +- packages/neo-one-editor/src/error/map.ts | 9 +--- packages/neo-one-editor/src/error/parse.ts | 5 +- .../neo-one-node-blockchain/src/Blockchain.ts | 5 +- packages/neo-one-node-consensus/src/common.ts | 6 +-- packages/neo-one-node-core/src/utils/utils.ts | 5 +- .../src/createHandler.ts | 5 +- packages/neo-one-node-tools/src/cmd.ts | 6 +-- packages/neo-one-node-tools/src/restore.ts | 5 +- .../src/__tests__/opcodes.test.ts | 10 +--- .../src/__tests__/syscalls.test.ts | 27 ++--------- packages/neo-one-node-vm/src/opcodes.ts | 5 +- .../package.json | 2 +- .../src/__data__/snippets/import/qux.ts | 2 +- .../src/compile/sb/BaseScriptBuilder.ts | 27 ++--------- .../src/__data__/snippets/import/entry.ts | 2 +- .../src/__data__/snippets/import/qux.ts | 2 +- .../src/elements/markdownTOC.ts | 18 +++---- .../neo-one-website/src/utils/dgeniSetup.ts | 11 +++-- packages/neo-one-worker/src/comlink.ts | 4 +- 47 files changed, 248 insertions(+), 246 deletions(-) create mode 100644 common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json create mode 100644 common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json diff --git a/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..2acd363556 --- /dev/null +++ b/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..4d1e4ee6f0 --- /dev/null +++ b/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..fbcc29da87 --- /dev/null +++ b/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..1474609a2c --- /dev/null +++ b/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-switch", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-switch", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..6660c5f267 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..71a68db642 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-consensus", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..9fa56bb055 --- /dev/null +++ b/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..b659d6fe7a --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-rpc-handler", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..22f1d17899 --- /dev/null +++ b/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-vm", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..71600abe5b --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-codegen", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..6cb5ee4751 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json new file mode 100644 index 0000000000..cd2c5e06ff --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/typescript-concatenator", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index f6d0da5a1d..0773991a03 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2715,6 +2715,24 @@ 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#8f9fcb3b0a684e82162358d7141e2382de2f4616" + 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" @@ -2798,7 +2816,7 @@ "@types/prettier" "^1.18.2" gulp "~4.0.2" lodash "^4.17.15" - prettier "^1.18.2" + prettier "^2.0.1" safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" @@ -16164,6 +16182,11 @@ prettier@^1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.1.tgz#3f00ac71263be34684b2b2c8d7e7f63737592dac" + integrity sha512-piXGBcY1zoFOG0MvHpNE5reAGseLmaCRifQ/fmfF49BcYkInEs/naD/unxGNAeOKFA5+JxVrPyMvMlpzcd20UA== + pretty-bytes@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" diff --git a/packages/neo-one-cli/src/bin/neo-one.ts b/packages/neo-one-cli/src/bin/neo-one.ts index 2a627650b5..6ac443846c 100644 --- a/packages/neo-one-cli/src/bin/neo-one.ts +++ b/packages/neo-one-cli/src/bin/neo-one.ts @@ -3,9 +3,4 @@ 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/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/convert/index.ts b/packages/neo-one-cli/src/cmd/convert/index.ts index 8fc6388e62..57783fa227 100644 --- a/packages/neo-one-cli/src/cmd/convert/index.ts +++ b/packages/neo-one-cli/src/cmd/convert/index.ts @@ -8,9 +8,4 @@ import * as wif from './wif'; export const command = 'convert'; export const describe = 'Convert 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/start/neotracker.ts b/packages/neo-one-cli/src/cmd/start/neotracker.ts index 380a5851e6..07be844fbf 100644 --- a/packages/neo-one-cli/src/cmd/start/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/start/neotracker.ts @@ -10,10 +10,7 @@ import { writePidFile } from './writePidFile'; export const command = 'neotracker'; 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); 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-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 658bf22bab..b2eba912fa 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)); @@ -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); @@ -723,13 +712,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); diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 24c5eb8c6b..3c3c0aaed1 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -340,10 +340,7 @@ export const assertVMState = (state: number): VMState => { 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-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-switch/src/common/createConsoleLogMessages.ts b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts index 579a163eb6..87e4e72b61 100644 --- a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts @@ -57,10 +57,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.asArray()[0].asBigIntegerUnsafe().toNumber(); switch (type) { case 1: @@ -75,35 +72,18 @@ const extractValueFromStackItem = (stackItem: StackItem): any => { case 5: return `Symbol(${stackItem.asArray()[1].asString()})`; case 6: - return stackItem - .asArray()[1] - .asBigIntegerUnsafe() - .toString(10); + return stackItem.asArray()[1].asBigIntegerUnsafe().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.asArray()[1].asArray()[0].asArray().map(extractValueFromStackItem), + stackItem.asArray()[1].asArray()[1].asArray().map(extractValueFromStackItem), ), ); case 8: - return stackItem - .asArray()[1] - .asArray() - .map(extractValueFromStackItem); + return stackItem.asArray()[1].asArray().map(extractValueFromStackItem); case 9: - return stackItem - .asArray()[1] - .asBuffer() - .toString('hex'); + return stackItem.asArray()[1].asBuffer().toString('hex'); case 10: // tslint:disable-next-line no-any return new Map( @@ -114,12 +94,7 @@ const extractValueFromStackItem = (stackItem: StackItem): any => { .map((value) => value.asArray().map(extractValueFromStackItem)), ); case 11: - return new Set( - stackItem - .asArray()[1] - .asArray() - .map(extractValueFromStackItem), - ); + return new Set(stackItem.asArray()[1].asArray().map(extractValueFromStackItem)); default: return ``; } @@ -132,9 +107,7 @@ const extractMessageFromStackItem = (stackItem: StackItem): string => { }; const extractMessage = (value: Buffer): string => { - const stackItems = deserializeStackItem(value) - .asArray()[1] - .asArray(); + const stackItems = deserializeStackItem(value).asArray()[1].asArray(); const messages = stackItems.map(extractMessageFromStackItem); diff --git a/packages/neo-one-client-switch/src/node/tracing.ts b/packages/neo-one-client-switch/src/node/tracing.ts index 460d5d035e..9af17fbf03 100644 --- a/packages/neo-one-client-switch/src/node/tracing.ts +++ b/packages/neo-one-client-switch/src/node/tracing.ts @@ -1,7 +1,7 @@ // tslint:disable: no-let no-any import type { Config, Measure, Span, Stats, StatsEventListener, TracerBase } from '@opencensus/core'; -import type { JaegerTraceExporter, JaegerTraceExporterOptions } from '@opencensus/exporter-jaeger'; -import type { PrometheusExporterOptions, PrometheusStatsExporter } from '@opencensus/exporter-prometheus'; +import type { JaegerTraceExporter, JaegerTraceExporterOptions } from '@opencensus/exporter-jaeger'; +import type { PrometheusExporterOptions, PrometheusStatsExporter } from '@opencensus/exporter-prometheus'; import type { TraceContextFormat } from '@opencensus/propagation-tracecontext'; const noOp = (..._args: readonly any[]): any => { @@ -39,12 +39,12 @@ let tracer: TracerBase = { // enums copied from types directly enum MeasureUnit { - UNIT = "1", - BYTE = "by", - KBYTE = "kb", - SEC = "s", - MS = "ms", - NS = "ns", + UNIT = '1', + BYTE = 'by', + KBYTE = 'kb', + SEC = 's', + MS = 'ms', + NS = 'ns', } enum AggregationType { @@ -60,7 +60,9 @@ enum SpanKind { CLIENT = 2, } -let globalStatsCache: Omit & {readonly registerExporter?: (listener: StatsEventListener) => void} = { +let globalStatsCache: Omit & { + readonly registerExporter?: (listener: StatsEventListener) => void; +} = { createView: noOp, registerView: noOp, createMeasureDouble: noOp, @@ -75,7 +77,9 @@ let globalStatsCache: Omit & {readonly registerExport }; let coreImportCache: Promise | undefined; -const globalStats: Omit & {readonly registerExporter: (listener: StatsEventListener) => Promise}= { +const globalStats: Omit & { + readonly registerExporter: (listener: StatsEventListener) => Promise; +} = { createView: globalStatsCache.createView, registerView: globalStatsCache.registerView, createMeasureDouble: globalStatsCache.createMeasureDouble, @@ -85,7 +89,7 @@ const globalStats: Omit & {readonly registerExporter: getMetrics: globalStatsCache.getMetrics, registerExporter: async (listener: StatsEventListener) => { if (coreImportCache === undefined) { - coreImportCache = import('@opencensus/core') + coreImportCache = import('@opencensus/core'); } if (globalStatsCache.registerExporter === undefined) { @@ -102,9 +106,7 @@ const globalStats: Omit & {readonly registerExporter: unregisterExporter: globalStatsCache.unregisterExporter, withTagContext: globalStatsCache.withTagContext, getCurrentTagContext: globalStatsCache.getCurrentTagContext, -} - - +}; let TracingBaseCache: Promise | undefined; const startTracing = async (config: Config) => { @@ -126,7 +128,6 @@ const startTracing = async (config: Config) => { }; }; - let TraceContextFormatCache: Promise | undefined; const getNewPropagation = async (): Promise => { if (TraceContextFormatCache === undefined) { @@ -138,7 +139,7 @@ const getNewPropagation = async (): Promise => { }; let JaegerTraceExporterCache: Promise | undefined; -const getJaegerTraceExporter = async (options: JaegerTraceExporterOptions ): Promise => { +const getJaegerTraceExporter = async (options: JaegerTraceExporterOptions): Promise => { if (JaegerTraceExporterCache === undefined) { JaegerTraceExporterCache = import('@opencensus/exporter-jaeger'); } @@ -146,28 +147,28 @@ const getJaegerTraceExporter = async (options: JaegerTraceExporterOptions ): Pro const { JaegerTraceExporter: ImportedJaegerTraceExporter } = await JaegerTraceExporterCache; return new ImportedJaegerTraceExporter(options); -} +}; let PrometheusExporterCache: Promise | undefined; -const getPrometheusExporter = async (options: PrometheusExporterOptions ): Promise => { +const getPrometheusExporter = async (options: PrometheusExporterOptions): Promise => { if (PrometheusExporterCache === undefined) { PrometheusExporterCache = import('@opencensus/exporter-prometheus'); } - const { PrometheusStatsExporter: PrometheusExporter } = await PrometheusExporterCache + const { PrometheusStatsExporter: PrometheusExporter } = await PrometheusExporterCache; return new PrometheusExporter(options); -} +}; const getTagMap = async () => { if (coreImportCache === undefined) { - coreImportCache = import('@opencensus/core') - }; + coreImportCache = import('@opencensus/core'); + } const { TagMap: ImportTagMap } = await coreImportCache; return new ImportTagMap(); -} +}; export { AggregationType, 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  { 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/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/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-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index bbc65d56db..ca3af0dbb6 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -813,10 +813,7 @@ export class Blockchain { .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(); + const unspent = await this.accountUnspent.getAll$({ hash }).pipe(toArray()).toPromise(); return unspent.map((value) => value.input); }; diff --git a/packages/neo-one-node-consensus/src/common.ts b/packages/neo-one-node-consensus/src/common.ts index 3429824f69..b782126d16 100644 --- a/packages/neo-one-node-consensus/src/common.ts +++ b/packages/neo-one-node-consensus/src/common.ts @@ -335,9 +335,9 @@ export const addTransaction = async ({ readonly transaction: Transaction; readonly verify: boolean; readonly consensusContext: ConsensusContext; -}): Promise> => { +}): Promise< + Result +> => { let context = contextIn; const { blockchain } = node; const tx = await blockchain.transaction.tryGet({ hash: transaction.hash }); diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index d5091f8a2a..23e14bb894 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -128,10 +128,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( diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 05825369b4..aae7e7eb77 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -534,10 +534,7 @@ export const createHandler = ({ }, [RPC_METHODS.getallstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); - const items = await blockchain.storageItem - .getAll$({ hash }) - .pipe(toArray()) - .toPromise(); + const items = await blockchain.storageItem.getAll$({ hash }).pipe(toArray()).toPromise(); return items.map((item) => item.serializeJSON(blockchain.serializeJSONContext)); }, diff --git a/packages/neo-one-node-tools/src/cmd.ts b/packages/neo-one-node-tools/src/cmd.ts index 1b36874ca1..73a3d01a17 100644 --- a/packages/neo-one-node-tools/src/cmd.ts +++ b/packages/neo-one-node-tools/src/cmd.ts @@ -8,11 +8,7 @@ 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']); + 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 }); diff --git a/packages/neo-one-node-tools/src/restore.ts b/packages/neo-one-node-tools/src/restore.ts index 97c5ec375e..c0c307976a 100644 --- a/packages/neo-one-node-tools/src/restore.ts +++ b/packages/neo-one-node-tools/src/restore.ts @@ -42,10 +42,7 @@ const getLocalMTime = async (path: string) => { const getCloudMTime = async (bucket: string, folder: string) => { const storage = new Storage(); - const [metadata] = await storage - .bucket(bucket) - .file(nodePath.join(folder, 'LOG')) - .getMetadata(); + const [metadata] = await storage.bucket(bucket).file(nodePath.join(folder, 'LOG')).getMetadata(); return new Date(metadata.updated); }; diff --git a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts index e43cf51efc..49436ec16d 100644 --- a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts @@ -448,10 +448,7 @@ const OPCODES = ([ 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), + gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE).add(FEES.ONE).add(FEES.ONE), }, { @@ -463,10 +460,7 @@ const OPCODES = ([ 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), + gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE).add(FEES.ONE).add(FEES.ONE), }, // RET is tested above 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..57168c4e94 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -233,10 +233,7 @@ const SYSCALLS = [ name: 'Neo.Runtime.Serialize', result: [ new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), + new BinaryWriter().writeUInt8(StackItemType.ByteArray).writeVarBytesLE(Buffer.alloc(10, 1)).toBuffer(), ), ], @@ -248,10 +245,7 @@ const SYSCALLS = [ name: 'Neo.Runtime.Serialize', result: [ new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), + new BinaryWriter().writeUInt8(StackItemType.ByteArray).writeVarBytesLE(Buffer.alloc(10, 1)).toBuffer(), ), ], @@ -265,10 +259,7 @@ const SYSCALLS = [ name: 'Neo.Runtime.Serialize', result: [ new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.Integer) - .writeVarBytesLE(Buffer.alloc(1, 1)) - .toBuffer(), + new BinaryWriter().writeUInt8(StackItemType.Integer).writeVarBytesLE(Buffer.alloc(1, 1)).toBuffer(), ), ], @@ -373,12 +364,7 @@ const SYSCALLS = [ { name: 'Neo.Runtime.Deserialize', result: [new BufferStackItem(Buffer.alloc(10, 1))], - args: [ - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), - ], + args: [new BinaryWriter().writeUInt8(StackItemType.ByteArray).writeVarBytesLE(Buffer.alloc(10, 1)).toBuffer()], gas: FEES.ONE, }, @@ -407,10 +393,7 @@ const SYSCALLS = [ .writeUInt8(StackItemType.Map) .writeVarUIntLE(1) .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.from('key', 'utf8')) - .toBuffer(), + new BinaryWriter().writeUInt8(StackItemType.ByteArray).writeVarBytesLE(Buffer.from('key', 'utf8')).toBuffer(), ) .writeBytes( new BinaryWriter() diff --git a/packages/neo-one-node-vm/src/opcodes.ts b/packages/neo-one-node-vm/src/opcodes.ts index 9352d6cd11..2d2a30a8b3 100644 --- a/packages/neo-one-node-vm/src/opcodes.ts +++ b/packages/neo-one-node-vm/src/opcodes.ts @@ -736,10 +736,7 @@ const OPCODE_PAIRS = ([ return { context: { ...context, - stack: stack - .slice(0, n) - .concat([stack[0]]) - .concat(stack.slice(n)), + stack: stack.slice(0, n).concat([stack[0]]).concat(stack.slice(n)), stackCount: context.stackCount + stack[0].increment(), }, }; diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index d0fd201254..1b9e491d12 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -17,7 +17,7 @@ "@neo-one/client-core": "^2.5.0", "@neo-one/utils": "^2.4.0", "lodash": "^4.17.15", - "prettier": "^1.18.2", + "prettier": "^2.0.1", "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-compiler/src/__data__/snippets/import/qux.ts b/packages/neo-one-smart-contract-compiler/src/__data__/snippets/import/qux.ts index 382c716a5e..4ba3e9cc3a 100644 --- a/packages/neo-one-smart-contract-compiler/src/__data__/snippets/import/qux.ts +++ b/packages/neo-one-smart-contract-compiler/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-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts index 03356467c7..dfbd85c6f0 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 @@ -567,32 +567,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.'); } 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 1d45a22295..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,7 +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 type { MyType } from './onlyTypes'; import incrementValue, { value } from './qux'; import { FooType } from './type'; 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-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/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-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({ From 0b2422d7e1759cae7718a6ceb2ac1f0f0c96156f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 4 May 2020 12:11:21 -0700 Subject: [PATCH 039/141] chore(deps): rush update --full to fix caniuse-lite, etc (#2024) --- common/config/rush/yarn.lock | 5957 +++++++++-------- .../__snapshots__/Client.test.ts.snap | 2282 ++++++- packages/neo-one-logger/src/loggers.ts | 2 + packages/neo-one-node-tools/src/restore.ts | 1 + .../abi/__snapshots__/genABI.test.ts.snap | 40 +- 5 files changed, 5379 insertions(+), 2903 deletions(-) diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 0773991a03..4cc756a00b 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -10,9 +10,9 @@ tslib "^1.9.0" "@babel/cli@^7.5.5": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.4.tgz#38804334c8db40209f88c69a5c90998e60cca18b" - integrity sha512-O7mmzaWdm+VabWQmxuM8hqNrWGGihN83KfhPUzp2lAW4kzIMwBxujXkZbD4fMwKMYY9FXTbDvXsJqU+5XHXi4A== + 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 "^4.0.1" convert-source-map "^1.1.0" @@ -25,28 +25,39 @@ 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== +"@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.0.0" + "@babel/highlight" "^7.8.3" + +"@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" - integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + 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" @@ -63,215 +74,233 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.4.0", "@babel/generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" - integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== +"@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.7.4" + "@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", "@babel/helper-annotate-as-pure@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" - integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== +"@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.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" - integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== +"@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.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-builder-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" - integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA== +"@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.7.4" - 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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" - integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== +"@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.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/types" "^7.9.0" -"@babel/helper-create-class-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" - integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== +"@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.7.4" - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - -"@babel/helper-create-regexp-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" - integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== - dependencies: - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" - integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/types" "^7.7.4" +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" - integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== +"@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.7.4" - "@babel/types" "^7.7.4" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" - integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== +"@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.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" -"@babel/helper-get-function-arity@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" - integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== +"@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.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" - integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== +"@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.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" - integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== +"@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.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" - integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== +"@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.7.4" + "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" - integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== +"@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.7.4" - "@babel/helper-simple-access" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" - integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== +"@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.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" - integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-wrap-function" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-replace-supers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" - integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-simple-access@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" - integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== - dependencies: - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-split-export-declaration@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" - integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-wrap-function@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" - integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helpers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" - integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== - dependencies: - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@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": @@ -279,549 +308,596 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.54.tgz#c01aa63b57c9c8dce8744796c81d9df121f20db4" integrity sha1-wBqmO1fJyNzodEeWyB2d8SHyDbQ= -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" - integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== +"@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", "@babel/plugin-proposal-async-generator-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" - integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== +"@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.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" + "@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" - integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== + 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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" - integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== +"@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.7.4" + "@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.7.4.tgz#890de3c0c475374638292df31f6582160b54d639" - integrity sha512-1t6dh7BHYUz4zD1m4pozYYEZy/3m8dgOr9owx3r0mPPI3iGKRUKUbIxfYmcJ4hwljs/dhd0qOTr1ZDUp43ix+w== + 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.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" - integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== +"@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.7.4" + "@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.7.4.tgz#7819a17445f4197bb9575e5750ed349776da858a" - integrity sha512-CG605v7lLpVgVldSY6kxsN9ui1DxFOyepBfuX2AzU2TNriMAYApoU55mrGw9Jr4TlrTzPCG10CL8YXyi+E/iPw== +"@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.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" - integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== +"@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.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0", "@babel/plugin-proposal-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" - integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== +"@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.7.4" + "@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz#3f04c2de1a942cbd3008324df8144b9cbc0ca0ba" - integrity sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A== +"@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.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" - integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== +"@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-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" - integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== +"@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", "@babel/plugin-syntax-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" - integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.7.4.tgz#897f05808298060b52873fa804ff853540790ea1" - integrity sha512-j888jpjATLEzOWhKawq46UrpXnCRDbdhBd5io4jgwjJ3+CHHGCRb6PNAVEgs+BXIb+dNRAmnkv36zfB992PRVw== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" - integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" - integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== +"@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", "@babel/plugin-syntax-numeric-separator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.7.4.tgz#39818f8042a09d4c6248d85d82555369da4da5c4" - integrity sha512-vmlUUBlLuFnbpaR+1kKIdo62xQEN+THWbtAHSEilo+0rHl2dKKCn6GLUVKpI848wL/T0ZPQgAy8asRJ9yYEjog== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" - integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== +"@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", "@babel/plugin-syntax-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" - integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901" - integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA== +"@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-top-level-await@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" - integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== +"@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-syntax-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" - integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== +"@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-arrow-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" - integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== +"@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-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" - integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== +"@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-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoped-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" - integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== +"@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" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" - integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== +"@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-plugin-utils" "^7.0.0" - lodash "^4.17.13" + "@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-classes@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" - integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== +"@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-annotate-as-pure" "^7.7.4" - "@babel/helper-define-map" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" - integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" - integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" - integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== +"@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-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" - integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" - integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== +"@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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" - integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" - integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== +"@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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" - integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" - integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" - integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== +"@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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" - integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== +"@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.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.4" - 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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" - integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== +"@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.7.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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" - integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== +"@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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" - integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== +"@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: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" - integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" - integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== +"@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.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" - integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== +"@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.7.4" - "@babel/helper-get-function-arity" "^7.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" - integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" - integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" - integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== +"@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.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" - integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== +"@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.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" - integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== +"@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.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.7.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" - integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" - integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== +"@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz#51fe458c1c1fa98a8b07934f4ed38b6cd62177a6" - integrity sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ== + 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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" - integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" - integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" - integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== +"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" - integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== +"@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.7.4" - "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" - integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== +"@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" - integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== + 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.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.7.4" + "@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" - integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== +"@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-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/polyfill@^7.6.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" - integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f" + integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w== dependencies: core-js "^2.6.5" - regenerator-runtime "^0.13.2" + 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.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" - integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.4" - "@babel/plugin-transform-modules-commonjs" "^7.7.4" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.4" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + 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-react@^7.0.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" - integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== +"@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-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.7.4" - "@babel/plugin-transform-react-jsx" "^7.7.4" - "@babel/plugin-transform-react-jsx-self" "^7.7.4" - "@babel/plugin-transform-react-jsx-source" "^7.7.4" + "@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.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.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.7.4" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.4.tgz#45a4956471a9df3b012b747f5781cc084ee8f128" - integrity sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA== + 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" @@ -829,46 +905,46 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime-corejs2@^7.2.0": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.4.tgz#b9c2b1b5882762005785bc47740195a0ac780888" - integrity sha512-hKNcmHQbBSJFnZ82ewYtWDZ3fXkP/l1XcfRtm7c8gHPM/DMecJtFFBEp7KMLZTuHwwb7RfemHdsEnd7L916Z6A== +"@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: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" -"@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": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" - integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== +"@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.7.4" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.7.4.tgz#9adcda4b7c33627c65eacf87f5c1f950987294c2" - integrity sha512-7erMqY9K0uOsWERAJrKzOkG5BezlZw8s1Yez40PUJrf8XXPTebv/fO7555+5Hmo1kBiDQlf9FOkV6wc7wRQ19A== - -"@babel/template@^7.4.0", "@babel/template@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" - integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" - integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" + 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" @@ -882,19 +958,19 @@ lodash "^4.17.5" to-fast-properties "^2.0.0" -"@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.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" - integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== +"@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" @@ -910,9 +986,9 @@ figures "^1.7.0" "@cypress/webpack-preprocessor@^4.1.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.1.tgz#3c0b5b8de6eaac605dac3b1f1c3f5916c1c6eaea" - integrity sha512-SfzDqOvWBSlfGRm8ak/XHUXAnndwHU2qJIRr1LIC7j2UqWcZoJ+286CuNloJbkwfyEAO6tQggLd4E/WHUAcKZQ== + 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.7.1" debug "4.1.1" @@ -929,107 +1005,107 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@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.22", "@emotion/core@^10.0.9": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.22.tgz#2ac7bcf9b99a1979ab5b0a876fbf37ab0688b177" - integrity sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA== + 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.22" - "@emotion/serialize" "^0.11.12" - "@emotion/sheet" "0.9.3" - "@emotion/utils" "0.11.2" - -"@emotion/css@^10.0.22", "@emotion/css@^10.0.9": - version "10.0.22" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.22.tgz#37b1abb6826759fe8ac0af0ac0034d27de6d1793" - integrity sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA== - dependencies: - "@emotion/serialize" "^0.11.12" - "@emotion/utils" "0.11.2" - babel-plugin-emotion "^10.0.22" - -"@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/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.5", "@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.12", "@emotion/serialize@^0.11.14", "@emotion/serialize@^0.11.8": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.14.tgz#56a6d8d04d837cc5b0126788b2134c51353c6488" - integrity sha512-6hTsySIuQTbDbv00AnUO6O6Xafdwo5GswRlMZ5hHqiFx+4pZ7uGWXUQFW46Kc2taGhP89uXMXn/lWQkdyTosPA== - 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.23", "@emotion/styled-base@^10.0.24": - version "10.0.24" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.24.tgz#9497efd8902dfeddee89d24b0eeb26b0665bfe8b" - integrity sha512-AnBImerf0h4dGAJVo0p0VE8KoAns71F28ErGFK474zbNAHX6yqSWQUasb+1jvg/VPwZjCp19+tAr6oOB0pwmLQ== +"@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.5" - "@emotion/serialize" "^0.11.14" - "@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.23": - version "10.0.23" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.23.tgz#2f8279bd59b99d82deade76d1046249ddfab7c1b" - integrity sha512-gNr04eqBQ2iYUx8wFLZDfm3N8/QUOODu/ReDXa693uyQGy2OqA+IhPJk+kA7id8aOfwAsMuvZ0pJImEXXKtaVQ== + 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.23" - babel-plugin-emotion "^10.0.23" + "@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.2" @@ -1044,21 +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.3" - resolved "https://registry.yarnpkg.com/@essentials/request-interval/-/request-interval-1.0.3.tgz#44c3b503554d04472e24709ddcc6fb6feaec8ead" - integrity sha512-rWDDMeSYUjVvdkg6pu2eTHCCKFLU9GeVDYN+R+MFG1WYGR/K/c/SKPz9/NMrqT1cSiS7znNJgkZoBClhc6R0RA== + 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.2" - resolved "https://registry.yarnpkg.com/@essentials/request-timeout/-/request-timeout-1.0.2.tgz#0fcb7d7ec186fcfc5f32685968407a2d51d6443d" - integrity sha512-P4pM8z1J9Ifj9SanjHyIuzV+AF/Ry6Coxm6foyza3aiDsweHME3t5sRrKv0ohpsmQLrmgt8XLlwFLPoAYLpq2Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@essentials/request-timeout/-/request-timeout-1.2.0.tgz#00aabcbb4ca20a731f030a44588acf0c8491d9bc" + integrity sha512-7HbQnSxy2lpf2/wz5XNwjzKakyyZAtptTGYzfIaS4xTXgXs64xfXM8UT4fG40sEEJitXFkwzxgCCXVrokorGLQ== dependencies: - performance-now "^2.1.0" - raf "^3.4.1" + "@essentials/raf" "^1.1.2" "@fimbul/bifrost@^0.21.0": version "0.21.0" @@ -1113,9 +1192,9 @@ integrity sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ== "@google-cloud/storage@^4.3.2": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-4.4.0.tgz#28bf3954b2711bab7731919a1992c84d543918ef" - integrity sha512-R64ey4dLIG3IgiKw0CL5MdZ4ZtZdGhN75171vjiL+ioZG+hlLFkjsrCTRuIdE35v42nNe5nXmVhBHQQTuPozHA== + 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" @@ -1123,10 +1202,10 @@ arrify "^2.0.0" compressible "^2.0.12" concat-stream "^2.0.0" - date-and-time "^0.12.0" + date-and-time "^0.13.0" duplexify "^3.5.0" extend "^3.0.2" - gaxios "^2.0.1" + gaxios "^3.0.0" gcs-resumable-upload "^2.2.4" hash-stream-validation "^0.2.2" mime "^2.2.0" @@ -1170,9 +1249,9 @@ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== "@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.0.tgz#2f9ce301c8898e1c3248b0a8564696b24d1a9a5a" - integrity sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw== + 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" @@ -1339,6 +1418,16 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@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" @@ -1462,13 +1551,13 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@neo-one/client-common@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-common/-/client-common-2.3.0.tgz#311a7bcbec94428fb329bde108f0ff66f0798635" - integrity sha512-OmJaSJICbHUgcxycic60EarmWueUdgkmVwmPb7FgeF2uxtrWqd80+ts5G9dX8D+vYgK3EuWhK6LICS7iH7sLDw== +"@neo-one/client-common@^2.4.0", "@neo-one/client-common@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-common/-/client-common-2.5.0.tgz#dad877f2fa7d08103b63ddd2f158e87ac21eaa7e" + integrity sha512-5ltq2nnvgVeHgjOmsztJH6aUswnhx7O4AP+dqMGoM8atRLXLOLgkD2wtw4UFfUG+QImV5rFdVkvJSBGNjd4MWg== dependencies: "@neo-one/ec-key" "^0.1.0" - "@neo-one/utils" "^2.3.0" + "@neo-one/utils" "^2.4.0" bignumber.js "^9.0.0" bn.js "^5.0.0" bs58 "^4.0.1" @@ -1476,102 +1565,103 @@ elliptic "^6.5.0" 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" -"@neo-one/client-core@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-core/-/client-core-2.3.0.tgz#5661abe068ab7b3d4f386f2c07b2d699e988d672" - integrity sha512-ZT/etKp6v535GD4wr0lSbH1RQ8nj6jdn05ybxKPtl0mlNgBbatavcwb+isRRiHRYzjgBmUEf4lnkmyZqV4nmxA== +"@neo-one/client-core@^2.4.0", "@neo-one/client-core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-core/-/client-core-2.5.0.tgz#ad99bd9553426b6ce6f331061979687a9434b1ee" + integrity sha512-8oz3U+uxEseNx5WryOZuAdVXCKw+cSeftxc/yowhyNC8Rblvbt+/naBk9TLSt/qYLmgB4RivMvcGckikqL7ysQ== 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" "^2.5.0" + "@neo-one/client-switch" "^2.4.0" + "@neo-one/utils" "^2.4.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 "^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" tapable "^1.1.3" tslib "^1.10.0" -"@neo-one/client-full-common@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-full-common/-/client-full-common-2.3.0.tgz#2c492b8262c4ca8423134a2e7016e3ce0fa371ea" - integrity sha512-u+ctLSR+PiSrIZQhA9WYAYdS+c3AMzv4dXJwkrAuikSMxwzYYSyindwEuVEam3R17r4/nlxkxfCzEfDzwU6xlw== +"@neo-one/client-full-common@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-common/-/client-full-common-2.4.0.tgz#b21d973ee1044f11cfe66e1fbb8945e8ee0281e8" + integrity sha512-A3ZaxCN/ws2MogWTUDX9EZEK+Aezzmnxg7pQE5sKFrgWKXAllw5ahlnzYwtg3/d11drD7tEGGN/D5aGNnD/3IQ== dependencies: - "@neo-one/client-common" "^2.3.0" - "@neo-one/utils" "^2.3.0" + "@neo-one/client-common" "^2.4.0" + "@neo-one/utils" "^2.4.0" tslib "^1.10.0" -"@neo-one/client-full-core@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-full-core/-/client-full-core-2.3.0.tgz#0939231bfe7222380a431d90510e49f5ddfbbc37" - integrity sha512-BqkMHr/Pad/Z8HefcCbCHdbuOv0iUbPfCIl8PEye6vj5S8WLcfFwHuXP5BHtnoNjxxGAR+6MI8+e/RyVuSv9Sg== - 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-full-core@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-core/-/client-full-core-2.4.1.tgz#77de399663878389c29a84571c076355966f7d96" + integrity sha512-OJ/1Ymz2nBJH1Z88Qz72QeHRfAcpD1ZZ1xQ2AbgvjJRBb0SIzX3csLOONC4GcWqPXWVGUiuoxJMJceYW0sKLFQ== + dependencies: + "@neo-one/client-common" "^2.5.0" + "@neo-one/client-core" "^2.5.0" + "@neo-one/client-full-common" "^2.4.0" + "@neo-one/client-switch" "^2.4.0" + "@neo-one/utils" "^2.4.0" bignumber.js "^9.0.0" lodash "^4.17.15" tslib "^1.10.0" "@neo-one/client-full@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-full/-/client-full-2.3.0.tgz#01306c519b02106752041af3d598b2016c1a3ea0" - integrity sha512-wARYZFYLoVA546r3i8RpzCieAmlcLmqYSUBmam21/FuA0nTvQg72c1Ne07ilT1zohNk/vpoZMmpinaQHc6FPxA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full/-/client-full-2.4.0.tgz#479617cb218502eb4d7787748cb06d1f57dac931" + integrity sha512-9Y4C1ponYXi4YK0VOlFSGdgR8nQCnsocVuC2fR2m9LbhJiMPd9qwbhSaEwjaOl9wG469kXyeMM92rd6vdy2+Qw== dependencies: - "@neo-one/client" "^2.3.0" - "@neo-one/client-full-core" "^2.3.0" + "@neo-one/client" "^2.4.0" + "@neo-one/client-full-core" "^2.4.0" -"@neo-one/client-switch@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-switch/-/client-switch-2.3.0.tgz#947b1f44e43d0dfd54b3c9afa5812318a8e8b561" - integrity sha512-a0tP6aLXcAYLAMNDSeXGuSddbzQ/6OON2S4Psp8HaRDwJHc/iZdejBCOTPvVECmRdVPVJRntu/L10vfl83ZHLg== +"@neo-one/client-switch@^2.3.0", "@neo-one/client-switch@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-switch/-/client-switch-2.4.0.tgz#77e9924dc7152652cad63dd58704a51169d6fdb9" + integrity sha512-OZssG/itq6dK7SrjHSqD+3PTvpmayN1XaQrCiflw4khUb3+lLuNJYeJSKq819IyiSzZabV0ihBeksOa41o+NGg== dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" - "@neo-one/client-common" "^2.3.0" - "@neo-one/node-vm" "^2.3.0" - "@neo-one/utils" "^2.3.0" - "@opencensus/core" "^0.0.16" - "@opencensus/exporter-jaeger" "^0.0.17" - "@opencensus/exporter-prometheus" "^0.0.16" - "@opencensus/nodejs-base" "^0.0.16" - "@opencensus/propagation-tracecontext" "^0.0.16" - "@opencensus/web-core" "^0.0.6" + "@neo-one/client-common" "^2.4.0" + "@neo-one/node-vm" "^2.4.0" + "@neo-one/utils" "^2.4.0" + "@opencensus/core" "^0.0.19" + "@opencensus/exporter-jaeger" "^0.0.19" + "@opencensus/exporter-prometheus" "^0.0.19" + "@opencensus/nodejs-base" "^0.0.19" + "@opencensus/propagation-tracecontext" "^0.0.19" + "@opencensus/web-core" "^0.0.7" "@opencensus/web-propagation-tracecontext" "^0.0.7" - "@opencensus/web-types" "^0.0.6" + "@opencensus/web-types" "^0.0.7" lodash "^4.17.15" regenerator-runtime "^0.13.3" source-map "^0.7.3" tslib "^1.10.0" -"@neo-one/client@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/client/-/client-2.3.0.tgz#a5cb0419553068b92a13f65e2ff499f3dd94f20f" - integrity sha512-7WPqNtAtABnFgBfvelI99ELVMWV4CByv2Hy2+VSPWYNCbbps+nqYTxsJ0vHULYT6dqIXSIV+biBzwaZ9PIq6BQ== +"@neo-one/client@^2.3.0", "@neo-one/client@^2.4.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client/-/client-2.5.0.tgz#becf47c9102032bc0eb346d536147980688eded6" + integrity sha512-oBW053jFwVH8AAhCFfihNeov2UbJ/LWHrD02jEWGO79pY9gNSC62R7bOsorr+9uQK3ungb/FEK3GqlTs2/JV5Q== 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" "^2.5.0" + "@neo-one/client-core" "^2.5.0" + "@neo-one/developer-tools" "^2.4.0" -"@neo-one/developer-tools@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/developer-tools/-/developer-tools-2.3.0.tgz#70e82718a3ac860d6b822181ba4611d9a38065dc" - integrity sha512-rrgIa6v9sA1ts2dPQgUxRpVr19uL1k3aolJ1sPNAm/D8cSqFCLW4Cb59WqSr/pTEpWCkkq1enup6zMj1OwnqxQ== +"@neo-one/developer-tools@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/developer-tools/-/developer-tools-2.4.0.tgz#0b4e86c3ebcb9a32854ba12aec1f9df8cae5fe2a" + integrity sha512-esVo1M2bIvZLpx1NWnSYqucIa2TKYBznbql1WnbgV7Ze1YR9c8yL7AY9Zi5qO7iuKEtv3j4k0Zqe8v9Hz+J/8Q== dependencies: - "@neo-one/client-core" "^2.3.0" + "@neo-one/client-core" "^2.4.0" resize-observer-polyfill "^1.5.0" tslib "^1.10.0" @@ -1582,56 +1672,58 @@ dependencies: asn1.js "^1.0.4" -"@neo-one/node-core@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-core/-/node-core-2.3.0.tgz#2bfb0351d530eb0262c2415a2b2f8694d71b8129" - integrity sha512-IjJJ3zPbtDFsw6VMlEH4Y/g3sV9UaHYbMOAh15N9WkXs8s/UIG+6RLrPGDM6WScrjNxtpdJnKNiwl/SjmSf4wA== +"@neo-one/node-core@^2.3.0", "@neo-one/node-core@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-core/-/node-core-2.4.0.tgz#68bf91db2bfd451af51fa704175b62eeef1acd13" + integrity sha512-r366zoeW2xQRLZOwntrPQxgQKLuauz+A5L5jTdDJz5CMo+Q5E/l5kgoA7PeFZhZ79NDZ+zqEmHBz6b/PD3ExTA== 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" "^2.4.0" + "@neo-one/client-full-common" "^2.4.0" + "@neo-one/utils" "^2.4.0" bignumber.js "^9.0.0" bn.js "^5.0.0" lodash "^4.17.15" - rxjs "^6.5.2" + rxjs "^6.5.3" through "^2.3.8" tslib "^1.10.0" "@neo-one/node-neo-settings@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-neo-settings/-/node-neo-settings-2.3.0.tgz#9aa49370b040e66ed0f0980569bf931752dd15dc" - integrity sha512-LKAlmgFcRI8cTAnHelaagaBjU/9D/yyb6Of9pW1izrxLNr7u8nIy2nosOUIy2OhDUsODi00oV2vN71MTWkLoqw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-neo-settings/-/node-neo-settings-2.4.0.tgz#786499c22c508266be4d772d6ba6e494bccaa1ad" + integrity sha512-Wy6bunvOYbOws1oSTKn/0sJDtsKIjbCkclN+1PM/uhVOKnyKfwcC96mdgXmc7xD0ojW8LFzg+v59OJchdkRF8Q== 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" "^2.4.0" + "@neo-one/node-core" "^2.4.0" + "@neo-one/utils" "^2.4.0" bn.js "^5.0.0" lodash "^4.17.15" tslib "^1.10.0" -"@neo-one/node-vm@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-vm/-/node-vm-2.3.0.tgz#8b601afb8014edd799d0062b7b8eb094a8a89866" - integrity sha512-OuDAlCiHKJ3Tw6Vb8D9brroUwseKUnTgVH7ZtWB8+9DR01x6alYbt8i9UUX2iLMz7FQKlMzOfpAB6nMKsl+J8w== +"@neo-one/node-vm@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-vm/-/node-vm-2.4.0.tgz#d4b4cb66fafa92d0e6c7fbdb68174c66b94e76d7" + integrity sha512-FThmV53n6EQ1971tqiDTqxHTeK7EfpnwE5HbAU16lfIrJ9yx/5TIJUd4aL9XCFaeSU0BvBvNQiRaKdjbq8aTWA== 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" + "@neo-one/client-common" "^2.4.0" + "@neo-one/client-full-common" "^2.4.0" + "@neo-one/node-core" "^2.4.0" + "@neo-one/utils" "^2.4.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.2" + rxjs "^6.5.3" tslib "^1.10.0" -"@neo-one/utils@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@neo-one/utils/-/utils-2.3.0.tgz#8800645d28ba8245ac2f555ff740a6cfb72f5811" - integrity sha512-WX7XBgubhk47kODaWX57zuEiI3QS6laBuWCNbq9OaOLZM5ioKGY9uxOpW8gid70W+gYy0G4vIAdJEJ6lJK3smQ== +"@neo-one/utils@^2.3.0", "@neo-one/utils@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@neo-one/utils/-/utils-2.4.0.tgz#433554d96d5dc5aafdc403fcfff8b1477b4fe872" + integrity sha512-93abRWilCFOIVljVYoSrUha75tLDFV4BUNksi6QVvpZbtyKRSz3bIplZdU657P+jWrqCbEdELheRE41Y9kSb3A== dependencies: + "@types/node" "^12.7.7" lodash "^4.17.15" - rxjs "^6.5.2" + rxjs "^6.5.3" tslib "^1.10.0" "@neotracker/core@1.3.1": @@ -1757,28 +1849,6 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@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== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^6.0.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@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== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^6.0.0" - shimmer "^1.2.0" - uuid "^3.2.1" - "@opencensus/core@^0.0.19": version "0.0.19" resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.19.tgz#058a2885179bb9f89db7fa93b366a73e51c0c8dc" @@ -1790,14 +1860,6 @@ shimmer "^1.2.0" uuid "^3.2.1" -"@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== - dependencies: - "@opencensus/core" "^0.0.17" - jaeger-client "~3.15.0" - "@opencensus/exporter-jaeger@^0.0.19": version "0.0.19" resolved "https://registry.yarnpkg.com/@opencensus/exporter-jaeger/-/exporter-jaeger-0.0.19.tgz#38abd5e791202b53c127b3e4f1b3d4ee3f1bcbf4" @@ -1806,15 +1868,6 @@ "@opencensus/core" "^0.0.19" jaeger-client "~3.17.0" -"@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== - dependencies: - "@opencensus/core" "^0.0.16" - express "^4.16.3" - prom-client "^11.1.1" - "@opencensus/exporter-prometheus@^0.0.19": version "0.0.19" resolved "https://registry.yarnpkg.com/@opencensus/exporter-prometheus/-/exporter-prometheus-0.0.19.tgz#b2f9b3d1a7b8019e3bad9f769b93bc76a2914a6b" @@ -1824,15 +1877,6 @@ express "^4.16.3" prom-client "^11.1.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== - dependencies: - "@opencensus/core" "^0.0.16" - extend "^3.0.2" - require-in-the-middle "^4.0.0" - "@opencensus/nodejs-base@^0.0.19": version "0.0.19" resolved "https://registry.yarnpkg.com/@opencensus/nodejs-base/-/nodejs-base-0.0.19.tgz#69aad730543cb740b942928aea9d09c7d7971c13" @@ -1842,13 +1886,6 @@ extend "^3.0.2" require-in-the-middle "^4.0.0" -"@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== - dependencies: - "@opencensus/core" "^0.0.16" - "@opencensus/propagation-tracecontext@^0.0.19": version "0.0.19" resolved "https://registry.yarnpkg.com/@opencensus/propagation-tracecontext/-/propagation-tracecontext-0.0.19.tgz#9776fd0528dfc3432cd40321cf1589a9733dcdca" @@ -1856,14 +1893,6 @@ dependencies: "@opencensus/core" "^0.0.19" -"@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== - dependencies: - "@opencensus/web-types" "^0.0.6" - "@types/node" "^12.6.9" - "@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" @@ -1879,11 +1908,6 @@ dependencies: "@opencensus/web-core" "^0.0.7" -"@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== - "@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" @@ -1897,28 +1921,27 @@ esquery "^1.0.1" "@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== + 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.2.1" + create-react-context "0.3.0" invariant "^2.2.3" prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" - warning "^3.0.0" "@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== + 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: "@types/node" "^11.11.6" tslib "^1.9.3" "@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== + 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: "@types/node" "^11.11.6" tslib "^1.9.3" @@ -1990,7 +2013,7 @@ "@rush-temp/build-tests@file:./projects/build-tests.tgz": version "0.0.0" - resolved "file:./projects/build-tests.tgz" + resolved "file:./projects/build-tests.tgz#a8f0c526234b9dae0477d17e4b54c2cb1f3cfcae" dependencies: "@babel/preset-env" "^7.6.3" app-root-dir "^1.0.2" @@ -2009,7 +2032,7 @@ "@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": version "0.0.0" - resolved "file:./projects/build-tools-web.tgz" + resolved "file:./projects/build-tools-web.tgz#ab86c99e585f6ba372c4c42eaeb26f5d9298d1ac" dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2083,7 +2106,7 @@ "@rush-temp/build-tools@file:./projects/build-tools.tgz": version "0.0.0" - resolved "file:./projects/build-tools.tgz" + resolved "file:./projects/build-tools.tgz#fed21ef6169c4c2b9d78d27ae3315dd49465fd4f" dependencies: "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -2130,7 +2153,7 @@ "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": version "0.0.0" - resolved "file:./projects/cli-common-node.tgz" + resolved "file:./projects/cli-common-node.tgz#d871bbaf28462a936ab5435c6f6500258b0a52b1" dependencies: "@types/fs-extra" "^8.0.0" "@types/lodash" "^4.14.138" @@ -2147,7 +2170,7 @@ "@rush-temp/cli-common@file:./projects/cli-common.tgz": version "0.0.0" - resolved "file:./projects/cli-common.tgz" + resolved "file:./projects/cli-common.tgz#726a9cb43931537d7eb95f12390e5d553c961191" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2155,7 +2178,7 @@ "@rush-temp/cli@file:./projects/cli.tgz": version "0.0.0" - resolved "file:./projects/cli.tgz" + resolved "file:./projects/cli.tgz#a7c416a0eb502a57579c7aa0c03c7abb1c4260ec" dependencies: "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" @@ -2192,7 +2215,7 @@ "@rush-temp/client-common@file:./projects/client-common.tgz": version "0.0.0" - resolved "file:./projects/client-common.tgz" + resolved "file:./projects/client-common.tgz#3ec2c2cf17152825b0f8d43b34aa0bcc37bb15d0" dependencies: "@neo-one/ec-key" "^0.1.0" "@types/bn.js" "^4.11.5" @@ -2221,7 +2244,7 @@ "@rush-temp/client-core@file:./projects/client-core.tgz": version "0.0.0" - resolved "file:./projects/client-core.tgz" + resolved "file:./projects/client-core.tgz#f91d4c964e661795df6b44246971b52a49cd6249" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2244,7 +2267,7 @@ "@rush-temp/client-full-common@file:./projects/client-full-common.tgz": version "0.0.0" - resolved "file:./projects/client-full-common.tgz" + resolved "file:./projects/client-full-common.tgz#5856ca79a8b2c7421708a6ce745d80cc8a3154ae" dependencies: "@types/jest" "^24.0.18" gulp "~4.0.2" @@ -2252,7 +2275,7 @@ "@rush-temp/client-full-core@file:./projects/client-full-core.tgz": version "0.0.0" - resolved "file:./projects/client-full-core.tgz" + resolved "file:./projects/client-full-core.tgz#5d68aa8f40c33525dba1571805e22b9b8d3253c7" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@types/bn.js" "^4.11.5" @@ -2267,13 +2290,13 @@ "@rush-temp/client-full@file:./projects/client-full.tgz": version "0.0.0" - resolved "file:./projects/client-full.tgz" + resolved "file:./projects/client-full.tgz#dd1aaa9ebb5a090c8b133593d0cda42edd7e09e9" dependencies: gulp "~4.0.2" "@rush-temp/client-switch@file:./projects/client-switch.tgz": version "0.0.0" - resolved "file:./projects/client-switch.tgz" + resolved "file:./projects/client-switch.tgz#31272ddd2b1f342ad469e3337ae4dc90fbedbbdf" dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" @@ -2300,13 +2323,13 @@ "@rush-temp/client@file:./projects/client.tgz": version "0.0.0" - resolved "file:./projects/client.tgz" + resolved "file:./projects/client.tgz#a7b120260bba5821e5f3d6ea65f9331e00dc771e" 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" + resolved "file:./projects/developer-tools-frame.tgz#a95015b1b6b2cc0e0c429388ca4dca585a8ad22b" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2335,7 +2358,7 @@ "@rush-temp/developer-tools@file:./projects/developer-tools.tgz": version "0.0.0" - resolved "file:./projects/developer-tools.tgz" + resolved "file:./projects/developer-tools.tgz#d41407ce77c384dcad1bba45af5bc04a30fac3ee" dependencies: gulp "~4.0.2" resize-observer-polyfill "^1.5.0" @@ -2343,7 +2366,7 @@ "@rush-temp/editor-server@file:./projects/editor-server.tgz": version "0.0.0" - resolved "file:./projects/editor-server.tgz" + resolved "file:./projects/editor-server.tgz#d4aa3c5a8d9e0684cc33c0bc1bdc285e190267d7" dependencies: "@types/graphlib" "^2.1.5" "@types/jest" "^24.0.18" @@ -2372,7 +2395,7 @@ "@rush-temp/editor@file:./projects/editor.tgz": version "0.0.0" - resolved "file:./projects/editor.tgz" + resolved "file:./projects/editor.tgz#fbaa8a4420ec977cc27cd630f6765db44ad80942" dependencies: "@babel/code-frame" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2443,7 +2466,7 @@ "@rush-temp/http-context@file:./projects/http-context.tgz": version "0.0.0" - resolved "file:./projects/http-context.tgz" + resolved "file:./projects/http-context.tgz#7e367ed4b82afecc405923c97dbc23d9659f3a21" dependencies: "@types/koa" "^2.0.49" gulp "~4.0.2" @@ -2452,7 +2475,7 @@ "@rush-temp/http@file:./projects/http.tgz": version "0.0.0" - resolved "file:./projects/http.tgz" + resolved "file:./projects/http.tgz#c6ff4cba9e166dfa848f00cb9dbe0be579bed02c" dependencies: "@types/koa" "^2.0.49" "@types/koa-bodyparser" "^4.3.0" @@ -2467,7 +2490,7 @@ "@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/local-browser-worker.tgz" + resolved "file:./projects/local-browser-worker.tgz#1e9843ca121af30798adc6194e5106bf32d36844" dependencies: "@types/nanoid" "^2.0.0" "@types/pouchdb" "^6.4.0" @@ -2480,7 +2503,7 @@ "@rush-temp/local-browser@file:./projects/local-browser.tgz": version "0.0.0" - resolved "file:./projects/local-browser.tgz" + resolved "file:./projects/local-browser.tgz#fff50496e96e79a1993e6a46f39dc0fbdd3341ef" dependencies: "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" @@ -2498,21 +2521,21 @@ "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" - resolved "file:./projects/local-singleton.tgz" + resolved "file:./projects/local-singleton.tgz#a4d04ed98bcefa5b806d0c271ec6766510949f10" 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" + resolved "file:./projects/logger-config.tgz#e08a99cfb217afcd1cede25260d95922c234a65d" 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" + resolved "file:./projects/logger.tgz#e5ab7458cadc29cb41059032ad7fb19f48aa033e" dependencies: "@types/pino" "^5.8.9" gulp "~4.0.2" @@ -2522,7 +2545,7 @@ "@rush-temp/node-bin@file:./projects/node-bin.tgz": version "0.0.0" - resolved "file:./projects/node-bin.tgz" + resolved "file:./projects/node-bin.tgz#2ff5a8a6a8811605ec2223d511cfb1f6dc3d7aa6" dependencies: "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" @@ -2542,7 +2565,7 @@ "@rush-temp/node-blockchain@file:./projects/node-blockchain.tgz": version "0.0.0" - resolved "file:./projects/node-blockchain.tgz" + resolved "file:./projects/node-blockchain.tgz#89e82ec13fc270c31e1462c74d806b9fbbe11ff9" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2557,7 +2580,7 @@ "@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/node-browser-worker.tgz" + resolved "file:./projects/node-browser-worker.tgz#1381e1248a89f4e8c455b4521dc13645094b167d" dependencies: core-js "^3.2.1" file-loader "^5.0.2" @@ -2565,7 +2588,7 @@ "@rush-temp/node-browser@file:./projects/node-browser.tgz": version "0.0.0" - resolved "file:./projects/node-browser.tgz" + resolved "file:./projects/node-browser.tgz#8e9e5e8faea6764041ef15851e1c4731ff12831b" dependencies: "@types/level-js" "^4.0.1" "@types/levelup" "^3.1.1" @@ -2578,7 +2601,7 @@ "@rush-temp/node-consensus@file:./projects/node-consensus.tgz": version "0.0.0" - resolved "file:./projects/node-consensus.tgz" + resolved "file:./projects/node-consensus.tgz#50d52c24aa5b557ba61204b558acb139233aa326" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2593,7 +2616,7 @@ "@rush-temp/node-core@file:./projects/node-core.tgz": version "0.0.0" - resolved "file:./projects/node-core.tgz" + resolved "file:./projects/node-core.tgz#5265796f7d1eafeb479fef95452abbb0cca61fdc" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2609,7 +2632,7 @@ "@rush-temp/node-http-rpc@file:./projects/node-http-rpc.tgz": version "0.0.0" - resolved "file:./projects/node-http-rpc.tgz" + resolved "file:./projects/node-http-rpc.tgz#9cb00817164682e235fd972f5ffbef5c94fa99be" dependencies: "@types/koa" "^2.0.49" "@types/koa-compose" "^3.2.4" @@ -2630,7 +2653,7 @@ "@rush-temp/node-neo-settings@file:./projects/node-neo-settings.tgz": version "0.0.0" - resolved "file:./projects/node-neo-settings.tgz" + resolved "file:./projects/node-neo-settings.tgz#dbdab791a4f9f1a43bb4484e4d8a19cc75b9d04b" dependencies: "@types/bn.js" "^4.11.5" "@types/lodash" "^4.14.138" @@ -2641,7 +2664,7 @@ "@rush-temp/node-network@file:./projects/node-network.tgz": version "0.0.0" - resolved "file:./projects/node-network.tgz" + resolved "file:./projects/node-network.tgz#95cbf9268e818b8b394110e97cc553e26d8fcf0c" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2650,7 +2673,7 @@ "@rush-temp/node-offline@file:./projects/node-offline.tgz": version "0.0.0" - resolved "file:./projects/node-offline.tgz" + resolved "file:./projects/node-offline.tgz#4d45de028e25ccc8b5c4eccc65a1dbbc09f7b807" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2659,7 +2682,7 @@ "@rush-temp/node-protocol@file:./projects/node-protocol.tgz": version "0.0.0" - resolved "file:./projects/node-protocol.tgz" + resolved "file:./projects/node-protocol.tgz#2e5349e12f1381d2a28eab60b5a9849701b31c79" dependencies: "@types/bloem" "^0.2.0" "@types/bloom-filter" "^0.2.0" @@ -2680,7 +2703,7 @@ "@rush-temp/node-rpc-handler@file:./projects/node-rpc-handler.tgz": version "0.0.0" - resolved "file:./projects/node-rpc-handler.tgz" + resolved "file:./projects/node-rpc-handler.tgz#7270164da7fd074e4b1e3042f831673a9237e8f3" dependencies: gulp "~4.0.2" rxjs "^6.5.3" @@ -2688,7 +2711,7 @@ "@rush-temp/node-storage-cache@file:./projects/node-storage-cache.tgz": version "0.0.0" - resolved "file:./projects/node-storage-cache.tgz" + resolved "file:./projects/node-storage-cache.tgz#0aaa002700560d169499b13a36a7a365ec966a77" dependencies: "@types/lru-cache" "^5.1.0" gulp "~4.0.2" @@ -2697,14 +2720,14 @@ "@rush-temp/node-storage-common@file:./projects/node-storage-common.tgz": version "0.0.0" - resolved "file:./projects/node-storage-common.tgz" + resolved "file:./projects/node-storage-common.tgz#5c7c02b713a9b196c1ab9af833b4148d52d9cfbb" dependencies: 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" + resolved "file:./projects/node-storage-levelup.tgz#0dd2d2d62107d604b948ba05e3c9f5b498c5538a" dependencies: "@types/jest" "^24.0.18" "@types/levelup" "^3.1.1" @@ -2717,7 +2740,7 @@ "@rush-temp/node-tools@file:./projects/node-tools.tgz": version "0.0.0" - resolved "file:./projects/node-tools.tgz#8f9fcb3b0a684e82162358d7141e2382de2f4616" + resolved "file:./projects/node-tools.tgz#12da66406deea82d34f8ad274be95a3d156fa6d9" dependencies: "@google-cloud/storage" "^4.3.2" "@types/fs-extra" "^8.0.0" @@ -2735,7 +2758,7 @@ "@rush-temp/node-vm@file:./projects/node-vm.tgz": version "0.0.0" - resolved "file:./projects/node-vm.tgz" + resolved "file:./projects/node-vm.tgz#657dc4e4e5d5a7eb8fb20b5e30e8fa2177c07c10" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2751,7 +2774,7 @@ "@rush-temp/node@file:./projects/node.tgz": version "0.0.0" - resolved "file:./projects/node.tgz" + resolved "file:./projects/node.tgz#03258ccc322f50e218b6a73966c8ddd3a7a31071" dependencies: "@types/abstract-leveldown" "^5.0.1" "@types/fs-extra" "^8.0.0" @@ -2766,7 +2789,7 @@ "@rush-temp/react-common@file:./projects/react-common.tgz": version "0.0.0" - resolved "file:./projects/react-common.tgz" + resolved "file:./projects/react-common.tgz#9ddef1cf92803c56fccd9b3bf49caab01bbb5f71" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2786,7 +2809,7 @@ "@rush-temp/react-core@file:./projects/react-core.tgz": version "0.0.0" - resolved "file:./projects/react-core.tgz" + resolved "file:./projects/react-core.tgz#c28d0c1c1ccccd13ae87bac0a38ee91d9eee5c95" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2799,7 +2822,7 @@ "@rush-temp/react@file:./projects/react.tgz": version "0.0.0" - resolved "file:./projects/react.tgz" + resolved "file:./projects/react.tgz#776b9b2de12a7059f25c7a1fbbf5218e85ff07ca" dependencies: "@types/react" "^16.0.0" gulp "~4.0.2" @@ -2809,7 +2832,7 @@ "@rush-temp/smart-contract-codegen@file:./projects/smart-contract-codegen.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-codegen.tgz" + resolved "file:./projects/smart-contract-codegen.tgz#c28d2b00f39bd090bfb98246b14c9d3caf3f451b" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2823,7 +2846,7 @@ "@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" + resolved "file:./projects/smart-contract-compiler-node.tgz#198a5bc6c41cc29ee21ff8ec35194e271eb1ad07" dependencies: "@types/app-root-dir" "^0.1.0" "@types/glob" "^7.1.1" @@ -2835,7 +2858,7 @@ "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-compiler.tgz" + resolved "file:./projects/smart-contract-compiler.tgz#aba2fa3cb817d81d383687f822c1aafe2b7c160b" dependencies: "@babel/code-frame" "^7.0.0" "@types/app-root-dir" "^0.1.0" @@ -2859,7 +2882,7 @@ "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-lib.tgz" + resolved "file:./projects/smart-contract-lib.tgz#5f19bac9afc2388cfca9d60562da72d83fd1ec9d" dependencies: "@types/jest" "^24.0.18" bignumber.js "^9.0.0" @@ -2868,14 +2891,14 @@ "@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" + resolved "file:./projects/smart-contract-test-browser.tgz#be6f032cc0848aaba26ee813367e88317cc9eefa" dependencies: core-js "^3.2.1" tslib "^1.10.0" "@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" + resolved "file:./projects/smart-contract-test-common.tgz#893dfc5793d2035d645ab927426ef3e73c15c2c8" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2883,7 +2906,7 @@ "@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-test.tgz" + resolved "file:./projects/smart-contract-test.tgz#00eed4df031c76aaf288960f84d6a495cec69611" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2896,26 +2919,26 @@ "@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" + resolved "file:./projects/smart-contract-typescript-plugin.tgz#757cb85d39dd14a36e3d7e7a694f5c7677d76e13" dependencies: gulp "~4.0.2" typescript "3.8.1-rc" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" - resolved "file:./projects/smart-contract.tgz" + resolved "file:./projects/smart-contract.tgz#e2dda84ffab87ea38b2c27e856e75b03daae4e0a" dependencies: gulp "~4.0.2" "@rush-temp/suite@file:./projects/suite.tgz": version "0.0.0" - resolved "file:./projects/suite.tgz" + resolved "file:./projects/suite.tgz#a0f9d1e3fdad5c6277628c86fbfc483ca5b24fd8" dependencies: gulp "~4.0.2" "@rush-temp/ts-utils@file:./projects/ts-utils.tgz": version "0.0.0" - resolved "file:./projects/ts-utils.tgz" + resolved "file:./projects/ts-utils.tgz#98055594656857f92c4995da380b62df4c2c7cea" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2926,7 +2949,7 @@ "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" - resolved "file:./projects/typescript-concatenator.tgz" + resolved "file:./projects/typescript-concatenator.tgz#8f0abd0d9f9f1a5d5bc64ed6ecfe4be37642bcd0" dependencies: "@types/app-root-dir" "^0.1.0" "@types/fs-extra" "^8.0.0" @@ -2945,7 +2968,7 @@ "@rush-temp/utils-node@file:./projects/utils-node.tgz": version "0.0.0" - resolved "file:./projects/utils-node.tgz" + resolved "file:./projects/utils-node.tgz#5a2c9a00e0e73f09df288526733039eb16cc114d" dependencies: "@types/jest" "^24.0.18" "@types/npm-package-arg" "^6.1.0" @@ -2960,7 +2983,7 @@ "@rush-temp/utils@file:./projects/utils.tgz": version "0.0.0" - resolved "file:./projects/utils.tgz" + resolved "file:./projects/utils.tgz#0c7f5247d3de087c03725e664fbd75723c8a0257" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2974,7 +2997,7 @@ "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" - resolved "file:./projects/website.tgz" + resolved "file:./projects/website.tgz#e9049476dd8d0b33618cb42ec16e7b2c39775cbe" dependencies: "@babel/runtime" "^7.6.3" "@emotion/core" "^10.0.22" @@ -3043,7 +3066,7 @@ "@rush-temp/worker@file:./projects/worker.tgz": version "0.0.0" - resolved "file:./projects/worker.tgz" + resolved "file:./projects/worker.tgz#1685cf4ac1b6e6d572c78e7ebf9c3534ae79bb1b" dependencies: core-js "^3.2.1" rxjs "^6.5.3" @@ -3056,15 +3079,27 @@ 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.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" - integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== + 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" @@ -3089,9 +3124,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" @@ -3102,9 +3137,9 @@ integrity sha512-FFfbQozKxYmOnCKFYV+EQprjBI7u2yaNc2ly/K9AhzyC8MzXtCtSRqptpw+HUJxhwCOo5mLwf1ATmzyhOaVbDg== "@types/babel__core@^7.1.0": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" - integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + 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" @@ -3113,9 +3148,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" - integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== + 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" @@ -3128,9 +3163,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" - integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== + 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" @@ -3149,24 +3184,24 @@ "@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.1" @@ -3200,9 +3235,9 @@ 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" "*" @@ -3215,12 +3250,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" @@ -3244,16 +3284,16 @@ 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== + 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.40" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.40.tgz#0e6cb9b9bbd098031fa19e4b4e8131bc70e5de13" - integrity sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA== + 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" @@ -3266,26 +3306,27 @@ integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== "@types/express-serve-static-core@*": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz#e80c25903df5800e926402b7e8267a675c54a281" - integrity sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g== + 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.2" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c" - integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA== + 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" "*" @@ -3373,9 +3414,9 @@ 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" @@ -3405,9 +3446,9 @@ "@types/node" "*" "@types/http-proxy@*": - version "1.17.2" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.2.tgz#3b7fb5365a00d47129967b0b2da51c2123692314" - integrity sha512-Qfb7batJJBlI8wcrd48vHpgsOOYzQQa+OZcaIz33jkJPe8A7KktAJFmRAiR42s5BfnErdlFnOyQucq2BKy/98g== + 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" "*" @@ -3424,9 +3465,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" "*" @@ -3445,10 +3486,18 @@ dependencies: "@types/jest" "*" -"@types/jest@*", "@types/jest@^24.0.18": - version "24.0.23" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.23.tgz#046f8e2ade026fe831623e361a36b6fb9a4463e4" - integrity sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg== +"@types/jest@*": + version "25.2.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5" + integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA== + dependencies: + jest-diff "^25.2.1" + pretty-format "^25.2.1" + +"@types/jest@^24.0.18": + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== dependencies: jest-diff "^24.3.0" @@ -3471,9 +3520,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" @@ -3512,9 +3561,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" "*" @@ -3534,11 +3583,12 @@ "@types/koa-send" "*" "@types/koa@*", "@types/koa@^2.0.49": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.0.tgz#394a3e9ec94f796003a6c8374b4dbc2778746f20" - integrity sha512-Hgx/1/rVlJvqYBrdeCsS7PDiR2qbxlMt1RnmNWD4Uxi5FF9nwkYqIldo7urjc+dfNpk+2NRGcnAYd4L5xEhCcQ== + 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" "*" @@ -3606,9 +3656,9 @@ rxjs "^6.5.1" "@types/lodash@^4.14.138": - version "4.14.149" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" - integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== + 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" @@ -3622,13 +3672,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" @@ -3666,28 +3729,34 @@ "@types/node" "*" "@types/node-fetch@*": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.4.tgz#5245b6d8841fc3a6208b82291119bc11c4e0ce44" - integrity sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ== + 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.3" - resolved "https://registry.yarnpkg.com/@types/node-hid/-/node-hid-0.7.3.tgz#993762b795473dc2ad8ee041f870838735087532" - integrity sha512-ip+Un3Ps0Qok3W3fMgYxaYxVYcbjDYM7yXNm8Uf1sggvSeXL/Q+vZG0AdSDWDQO9apQSE7Yieb4SjfymF1OqPA== + 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@*", "@types/node@>=6", "@types/node@^12.12.3", "@types/node@^12.6.9", "@types/node@^12.7.7": - version "12.12.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" - integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== +"@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.15.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.3.tgz#cb7f19846a83ac5a88fc22756b74633cdeb476a7" - integrity sha512-5RzvXVietaB8S4dwDjxjltAOHtTO87fiksjqjWGZih97j6KSrdCDaRfmYMNrgrLM87odGBrsTHAl6N3fLraQaw== + 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.12.3", "@types/node@^12.6.9", "@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" @@ -3704,19 +3773,13 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@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/pino@^5.8.9": - version "5.8.13" - resolved "https://registry.yarnpkg.com/@types/pino/-/pino-5.8.13.tgz#01ea5c4faa4314cc4dd58b072bfc4f2a936bcf28" - integrity sha512-JPBkBtxCmwuWGR2rTiMZfocQ7EtNebkcUeIEoHJLB0NdHnKo1f9Jl8beFz9Br84q76NIv/c3nRLoakGui1ISkg== + 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" @@ -3804,9 +3867,9 @@ "@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" "*" @@ -3866,9 +3929,9 @@ "@types/pouchdb-replication" "*" "@types/prettier@^1.18.2": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.0.tgz#a2502fb7ce9b6626fdbfc2e2a496f472de1bdd05" - integrity sha512-gDE8JJEygpay7IjA/u3JiIURvwZW08f0cZSZLAzFoX/ZmeqvS0Sqv+97aKuHpNsalAMMhwPe+iAS6fQbfmbt7A== + 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" @@ -3876,9 +3939,11 @@ integrity sha512-mEyuziLrfDCQ4juQP1k706BUU/c8OGn/ZFl69AXXY6dStHClKX4P+N8+rhqpul1vRDA2VOygzMRSJJZHyDEOfw== "@types/prompts@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.3.tgz#9928714a7a5c2017919f8fecef517369d27dd5df" - integrity sha512-5+r923liPATAzRQhLTGfrRuel9vv7Mk1DZ/CJkgRrLctmM9QeOIbuVolA7wAACaw+m0Ysug85CjPbkb5ZgE1Ag== + 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" @@ -3890,6 +3955,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" @@ -3901,24 +3971,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.4": - version "16.9.4" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.4.tgz#0b58df09a60961dcb77f62d4f1832427513420df" - integrity sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw== + 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" "*" @@ -3926,18 +3996,18 @@ redux "^4.0.0" "@types/react-select@^3.0.0": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.8.tgz#b824a12d438dd493c30ffff49a805f797602a837" - integrity sha512-0763TXYZc8bTiHM+DUnWoy9Rg5mk6PxYWBrEe6Fkjgc0Kv0r1RqjZk9/BrK4wdM0RNjYjixlFPnUhOJb76sMGg== + 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" "*" @@ -3949,9 +4019,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.15": - version "16.9.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.15.tgz#aeabb7a50f96c9e31a16079ada20ede9ed602977" - integrity sha512-WsmM1b6xQn1tG3X2Hx4F3bZwc2E82pJXt5OPs2YJgg71IzvUoKOSSSYOvLXYCg1ttipM+UuA4Lj3sfvqjVxyZw== + 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" @@ -3964,9 +4034,9 @@ "@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" "*" @@ -3976,16 +4046,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.2": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a" - integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA== + 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" @@ -3995,13 +4065,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" @@ -4013,9 +4076,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" @@ -4038,9 +4101,9 @@ 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" @@ -4102,9 +4165,9 @@ "@types/webpack" "*" "@types/webpack-dev-server@^3.1.7": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#e31096477a88b0e54968cbc0d688dac9ba2c5442" - integrity sha512-4wXREDfUJmKTNcoaLLHjgsRHZhogIScXJPc5B6e5bYx16zd9H3WfM67w+mEgNaRxVCgb6YNnc8O2lX2IUn4zdQ== + 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" "*" @@ -4113,18 +4176,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.41.0" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.0.tgz#b813a044d8b0dec7dfcd7622fdbe327bde06eb9a" - integrity sha512-tWkdf9nO0zFgAY/EumUKwrDUhraHKDqCPhwfFR/R8l0qnPdgb9le0Gzhvb7uzVpouuDGBgiE//ZdY+5jcZy2TA== + 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" "*" @@ -4141,14 +4204,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", "@types/yargs@^13.0.3": - 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== + 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@^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" "*" @@ -4157,150 +4227,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": @@ -4312,9 +4381,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" @@ -4348,23 +4417,25 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: +abort-controller@3.0.0, 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: event-target-shim "^5.0.0" -abstract-leveldown@^6.0.3, abstract-leveldown@^6.2.1, 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.0: version "6.0.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz#b4b6159343c74b0c5197b2817854782d8f748c4a" integrity sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q== @@ -4372,6 +4443,17 @@ abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1: level-concat-iterator "~2.0.0" xtend "~4.0.0" +abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: + 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" @@ -4397,36 +4479,41 @@ 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.4.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" - integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== +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@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + agent-base@6: version "6.0.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" @@ -4434,13 +4521,6 @@ agent-base@6: dependencies: debug "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" - aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" @@ -4469,12 +4549,12 @@ 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" @@ -4496,6 +4576,13 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" +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-color@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a" @@ -4531,11 +4618,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.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + 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.8.1" + type-fest "^0.11.0" ansi-gray@^0.1.1: version "0.1.1" @@ -4589,9 +4676,9 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" - integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== + 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" @@ -4628,57 +4715,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" @@ -4735,9 +4822,9 @@ arg@2.0.0: integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== arg@^4.1.0, arg@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" - integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== + 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" @@ -4761,7 +4848,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= @@ -4835,6 +4922,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +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" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -4960,6 +5052,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" @@ -4985,7 +5087,7 @@ 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== @@ -5029,23 +5131,35 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -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== +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.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" - integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== + version "9.7.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.6.tgz#63ac5bbc0ce7934e6997207d5bb00d68fa8293a4" + integrity sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ== dependencies: - browserslist "^4.8.0" - caniuse-lite "^1.0.30001012" + 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.23" - 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" @@ -5053,17 +5167,16 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" - integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== + 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" @@ -5176,14 +5289,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" @@ -5199,22 +5313,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.21, babel-plugin-emotion@^10.0.22, babel-plugin-emotion@^10.0.23: - version "10.0.23" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.23.tgz#040d40bf61dcab6d31dd6043d10e180240b8515b" - integrity sha512-1JiCyXU0t5S2xCbItejCduLGGcKmF3POT0Ujbexog2MI4IlRcIn/kWjkYwCUZlxpON0O5FC635yPl/3slr7cKQ== +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.14" + "@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" @@ -5251,9 +5365,9 @@ 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.7.1" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.7.1.tgz#ee294383c1a38f9d6535be3d89734824cb3ed415" - integrity sha512-HNM284amlKSQ6FddI4jLXD+XTqF0cTYOe5uemOIZxHJHnamC+OhFQ57rMF9sgnYhkJQptVl9U1SKVZsV9/GLQQ== + 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.7.2" cosmiconfig "^6.0.0" @@ -5271,9 +5385,9 @@ babel-plugin-module-resolver@^3.2.0: 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" @@ -5505,9 +5619,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" @@ -5632,9 +5746,9 @@ 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" @@ -5642,9 +5756,9 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base-x@^3.0.2, base-x@^3.0.6: - version "3.0.7" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.7.tgz#1c5a7fafe8f66b4114063e8da102799d4e7c408f" - integrity sha512-zAKJGuQPihXW22fkrfOclUUZXM2g92z5GzlSMHxhO6r6Qj+Nm0ccaGNBzDZojzwOMkpjAv4J0fOv1U4go+a4iw== + 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" @@ -5775,12 +5889,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" @@ -5826,9 +5942,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" @@ -5863,12 +5979,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== @@ -5881,6 +5997,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" @@ -5931,10 +6061,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" @@ -6009,14 +6139,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.8.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" - integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== +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.30001015" - electron-to-chromium "^1.3.322" - node-releases "^1.1.42" + 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" @@ -6041,7 +6172,7 @@ bs58check@<3.0.0: create-hash "^1.1.0" safe-buffer "^5.1.2" -bser@^2.0.0: +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== @@ -6132,15 +6263,15 @@ buffer@^4.3.0: 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: +bufrw@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa" integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ== @@ -6175,30 +6306,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.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + 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" @@ -6288,6 +6399,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" @@ -6352,11 +6476,6 @@ camelcase@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.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" @@ -6387,10 +6506,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001015: - version "1.0.30001015" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz#15a7ddf66aba786a71d99626bc8f2b91c6f0f5f0" - integrity sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ== +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" @@ -6409,15 +6528,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" @@ -6442,9 +6556,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== + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== chalk@2.3.2: version "2.3.2" @@ -6546,14 +6660,14 @@ 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== + 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" @@ -6570,7 +6684,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.2, 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== @@ -6589,10 +6703,10 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.2, chokidar@^2. optionalDependencies: fsevents "^1.2.7" -chokidar@^3.0.2, chokidar@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +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" @@ -6600,14 +6714,14 @@ chokidar@^3.0.2, chokidar@^3.2.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" @@ -6655,9 +6769,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" @@ -6671,6 +6785,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" @@ -6699,14 +6818,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" @@ -6720,7 +6839,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= @@ -6747,12 +6866,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-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= @@ -6818,15 +6946,15 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codecov@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.1.tgz#f39fc49413445555f81f8e3ca5730992843b4517" - integrity sha512-IUJB6WG47nWK7o50etF8jBadxdMw7DmoQg05yIljstXFBGB6clOZsIj6iD4P82T2YaIU3qq+FFu8K9pxgkCJDQ== + 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" + 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" @@ -6895,7 +7023,7 @@ colors@1.0.x: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -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== @@ -6903,9 +7031,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" @@ -6917,15 +7045,20 @@ 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.20.3: +commander@^2.12.1, commander@^2.16.0, 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: - version "4.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" - integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + 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" @@ -6969,14 +7102,7 @@ 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== - dependencies: - mime-db ">= 1.40.0 < 2" - -compressible@^2.0.12: +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== @@ -6984,15 +7110,15 @@ compressible@^2.0.12: 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: @@ -7066,22 +7192,10 @@ config-chain@^1.1.11: resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: - 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== - dependencies: - dot-prop "^4.1.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" + ini "^1.3.4" + proto-list "~1.2.1" -configstore@^5.0.0: +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== @@ -7099,9 +7213,9 @@ connect-history-api-fallback@^1.6.0: integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== consola@^2.10.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.11.0.tgz#9bb35d850d8cecde894ce2eb4d792fa6b90d9013" - integrity sha512-2bcAqHastlPSCvZ+ur8bgHInGAWvUnysWz3h3xRX+/XZoCY7avolJJnVXOPGoVoyCcg1b231XixonoArmgxaoA== + 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.2.0" @@ -7216,13 +7330,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.4.7" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.7.tgz#39f8080b1d92a524d6d90505c42b9c5c1eb90611" - integrity sha512-57+mgz/P/xsGdjwQYkwtBZR3LuISaxD1dEwVDtbk8xJMqAmwqaxLOvnNT7kdJ7jYE/NjNptyzXi+IQFMi/2fCw== +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.8.0" - 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" @@ -7230,14 +7349,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.2.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.7.tgz#57c35937da80fe494fbc3adcf9cf3dc00eb86b34" - integrity sha512-qaPVGw30J1wQ0GR3GvoPqlGf9GZfKKF4kFC7kiHlcsPTqH3txrs9crCp3ZiMAXuSenhz89Jnl4GZs/67S5VOSg== + 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" @@ -7292,32 +7411,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" @@ -7342,7 +7454,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== @@ -7394,9 +7514,9 @@ cross-spawn@^6.0.0: 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" @@ -7419,11 +7539,6 @@ 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" @@ -7511,10 +7626,13 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" 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" @@ -7548,11 +7666,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" @@ -7627,11 +7740,11 @@ cssnano@^4.1.10: postcss "^7.0.0" csso@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" - integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + 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.37" + css-tree "1.0.0-alpha.39" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" @@ -7646,9 +7759,9 @@ 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== cycle@1.0.x: version "1.0.3" @@ -7661,9 +7774,9 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= cypress-plugin-retries@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.5.0.tgz#717cdfd7f2a8f07f218eb23e93ff6f7aa4c95029" - integrity sha512-nSJx4RkbeQFGjsymPWabn7i2GmxULUu9SqtiJqoVFa1XfVtQC1Uoogxj/zZzhrWYwYJ2183xslb9HqQV6bafFQ== + 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" @@ -7742,10 +7855,10 @@ dataloader@^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.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.12.0.tgz#6d30c91c47fa72edadd628b71ec2ac46909b9267" - integrity sha512-n2RJIAp93AucgF/U/Rz5WRS2Hjg5Z+QxscaaMCi6pVZT1JpJKRH+C08vyH/lRR1kxNXnPxgo3lWfd+jCb/UcuQ== +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" @@ -7753,9 +7866,9 @@ date-fns@^1.27.2, date-fns@^1.30.1: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== date-fns@^2.0.0-beta.5: - version "2.8.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.8.1.tgz#2109362ccb6c87c3ca011e9e31f702bc09e4123b" - integrity sha512-EL/C8IHvYRwAHYgFRse4MGAPSqlJVlOrhVYZ75iQBKrnv+ZedmYsgwH3t+BCDuZDXpoo07+q9j4qgSSOa7irJg== + 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" @@ -7880,9 +7993,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" @@ -7957,10 +8070,15 @@ default-resolution@^2.0.0: resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= -deferred-leveldown@~5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.0.1.tgz#1642eb18b535dfb2b6ac4d39fb10a9cbcfd13b09" - integrity sha512-BXohsvTedWOLkj2n/TY+yqVlrCWa2Zs8LSxh3uCAgFOru7/pjxKyZAexGa1j83BaKloER4PqUyQ9rGPJLt9bqA== +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.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" + integrity sha512-PvDY+BT2ONu2XVRgxHb77hYelLtMYxKSGuWuJJdVRXh9ntqx9GYTFJno/SKAz5xcd+yjQwyQeIZrUPjPvA52mg== dependencies: abstract-leveldown "~6.0.0" inherits "^2.0.3" @@ -8112,9 +8230,9 @@ detective@^5.2.0: minimist "^1.1.1" dgeni-packages@^0.28.1: - version "0.28.2" - resolved "https://registry.yarnpkg.com/dgeni-packages/-/dgeni-packages-0.28.2.tgz#04ad9a4e824942baba82a872452ea90d17be1c7f" - integrity sha512-W8GsMjILSPOfbjxyXgUD/T20isQ0ojw4HChrN6NwXIQtFJioNPRX4WeIOAZxw0S77S4vbXh4wfOs9wof5sIh+Q== + 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" @@ -8128,8 +8246,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" @@ -8164,15 +8281,20 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +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" @@ -8244,11 +8366,11 @@ dom-helpers@^3.2.1, dom-helpers@^3.4.0: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" - integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== + 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: @@ -8260,9 +8382,9 @@ dom-serializer@0: 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" @@ -8321,13 +8443,6 @@ dot-case@^2.1.0: dependencies: no-case "^2.2.0" -dot-prop@^4.1.0, dot-prop@^4.1.1: - 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== - dependencies: - is-obj "^1.0.0" - dot-prop@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" @@ -8449,10 +8564,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.322: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== +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" @@ -8494,29 +8609,34 @@ 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.17: - version "10.0.23" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.23.tgz#b1722ca65f4d9955f0917cfcb7635bc34b52805c" - integrity sha512-H/x+5rJUnSvI0rdYsAFyDfuQwE0poZgTMj5TQsKirLzyHVWqs6CiUponsdE86sisXw0vS60j91HAbidJJeDt1g== + 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.23" - 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" @@ -8555,9 +8675,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" @@ -8583,9 +8703,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" @@ -8657,21 +8777,22 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-abstract@^1.12.0, es-abstract@^1.5.1: - version "1.16.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz#52490d978f96ff9f89ec15b5cf244304a5bca161" - integrity sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw== +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.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.4" - is-regex "^1.0.4" + 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.1: version "1.2.1" @@ -8710,17 +8831,10 @@ 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.3: version "3.1.3" @@ -8740,6 +8854,11 @@ 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" @@ -8751,11 +8870,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^ 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" @@ -8775,22 +8894,17 @@ espree@^2.2.3: resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" integrity sha1-32kbkxCIlAKuspzAZnCMVmkLhUs= -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" @@ -8799,17 +8913,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== @@ -8838,9 +8957,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" @@ -9134,14 +9253,14 @@ extglob@^2.0.4: to-regex "^3.0.1" extract-css-chunks-webpack-plugin@^4.6.0, extract-css-chunks-webpack-plugin@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.7.1.tgz#8bfb94463a8d31c80d88b9c419507c472d810657" - integrity sha512-dpcOJA3wQk4rbgbOGRXyK3Gjl+/Ng8miD162/0uol31Ld4PLnQqIMbKV6ju/gi+uwfZIQcBW3KW1pmfU0epmDg== + 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.3.0-beta.0" + webpack-external-import "^1.1.0-beta.3" webpack-sources "^1.1.0" extract-zip@1.6.7: @@ -9184,10 +9303,10 @@ 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-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-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-glob@^2.2.2: version "2.2.7" @@ -9202,20 +9321,21 @@ fast-glob@^2.2.2: micromatch "^3.1.10" fast-glob@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.1.tgz#87ee30e9e9f3eb40d6f254a7997655da753d7c82" - integrity sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g== + 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.6: version "2.0.6" @@ -9238,9 +9358,9 @@ fast-safe-stringify@^2.0.7: integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== fast-text-encoding@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" - integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== + 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" @@ -9250,11 +9370,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" @@ -9271,11 +9391,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" @@ -9309,18 +9429,18 @@ feature-policy@0.3.0: resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069" integrity sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ== -fetch-cookie@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.0.tgz#a6fc137ad8363aa89125864c6451b86ecb7de802" - integrity sha512-Mm5pGlT3agW6t71xVM7vMZPIvI7T4FaTuFW4jari6dVzYHFDb3WZZsGpN22r/o3XMdkM0E7sPd1EGeyVbH2Tgg== +fetch-cookie@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.3.tgz#b8d023f421dd2b2f4a0eca9cd7318a967ed4eed8" + integrity sha512-rZPkLnI8x5V+zYAiz8QonAHsTb4BY+iFowFBI1RFn0zrO343AVp9X7/yUj/9wL6Ef/8fLls8b/vGtzUvmyAUGA== dependencies: es6-denodeify "^0.1.1" - tough-cookie "^2.3.1" + tough-cookie "^2.3.3" 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== + 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" @@ -9338,9 +9458,9 @@ figures@^2.0.0: escape-string-regexp "^1.0.5" figures@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + 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" @@ -9353,11 +9473,11 @@ file-loader@3.0.1: schema-utils "^1.0.0" file-loader@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.0.2.tgz#7f3d8b4ac85a5e8df61338cfec95d7405f971caa" - integrity sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg== + 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" + loader-utils "^1.4.0" schema-utils "^2.5.0" file-type@^3.8.0: @@ -9477,13 +9597,13 @@ 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.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.1.0.tgz#9935894999debef4cf9f677fdf646d002c4cdecb" - integrity sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q== +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-root@^1.1.0: @@ -9513,7 +9633,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^4.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== @@ -9583,9 +9703,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" @@ -9608,6 +9728,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" @@ -9626,6 +9751,15 @@ fork-stream@^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" @@ -9636,9 +9770,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" @@ -9719,9 +9853,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" @@ -9754,17 +9888,17 @@ 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.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== +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" @@ -9790,10 +9924,21 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaxios@^2.0.0, gaxios@^2.0.1, gaxios@^2.1.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-2.3.2.tgz#ed666826c2039b89d384907cc075595269826553" - integrity sha512-K/+py7UvKRDaEwEKlLiRKrFr+wjGjsMz5qH7Vs549QJS7cpSCOT/BbWL7pzqECflc46FcNPipjSfB+V1m8PAhw== +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" @@ -9810,9 +9955,9 @@ gcp-metadata@^3.4.0: json-bigint "^0.3.0" gcs-resumable-upload@^2.2.4: - version "2.3.2" - resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.3.2.tgz#f04a7459483f871f0de71db7454296938688a296" - integrity sha512-OPS0iAmPCV+r7PziOIhyxmQOzsazFCy76yYDOS/Z80O/7cuny1KMfqDQa2T0jLaL8EreTU7EMZG5pUuqBKgzHA== + 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" @@ -9821,6 +9966,11 @@ gcs-resumable-upload@^2.2.4: 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" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -9832,9 +9982,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== + 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" @@ -9861,14 +10011,14 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 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== @@ -9936,9 +10086,9 @@ glob-parent@^3.1.0: path-dirname "^1.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== + 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" @@ -9994,6 +10144,13 @@ global-dirs@^0.1.0: 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" @@ -10033,9 +10190,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" @@ -10093,23 +10250,6 @@ google-p12-pem@^2.0.0: dependencies: node-forge "^0.9.0" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - 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" - got@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" @@ -10133,10 +10273,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.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + 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" @@ -10160,16 +10317,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" @@ -10385,9 +10542,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" @@ -10405,27 +10562,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: - version "4.5.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== - 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== @@ -10527,7 +10673,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== @@ -10535,12 +10686,13 @@ 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" @@ -10565,9 +10717,9 @@ hasha@^3.0.0: is-stream "^1.0.1" hast-util-from-parse5@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.2.tgz#afeadc6aab41e6acfe038645bbefd4005c56a475" - integrity sha512-YXFjoRS7ES7PEoLx6uihtSfKTO1s3z/tzGiV5cVpsUiihduogFXubNRCzTIW3yOOGO1nws9CxPq4MbwD39Uo+w== + 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" @@ -10576,19 +10728,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.0.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz#57edd449103900c7f63fd9e6f694ffd7e4634719" - integrity sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q== + 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" @@ -10602,14 +10754,14 @@ 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.1" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.1.tgz#71726ee1e97220575d1f29a8e937387d99d48275" - integrity sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg== + 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.0.0" @@ -10639,20 +10791,20 @@ 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== + version "3.22.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.22.0.tgz#3a6f11d931799145f0aff15dbc563cff9e13131f" + integrity sha512-Xrqicn2nm1ZIUxP3YGuTBmbDL04neKsIT583Sjh0FkiwKDXYCMUqGqC88w3NUvVXtA75JyR2Jn6jw6ZEMOD+ZA== dependencies: depd "2.0.0" dns-prefetch-control "0.2.0" @@ -10661,7 +10813,7 @@ helmet@^3.15.1: 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" @@ -10716,15 +10868,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.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" - integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== + 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" @@ -10741,14 +10893,14 @@ hoopy@^0.1.4: integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + 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.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.2.tgz#8b7e3bd114b59b51786f8bade0f39ddc80275a97" - integrity sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw== + 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" @@ -10797,9 +10949,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" @@ -10815,20 +10972,20 @@ html-minifier@^3.2.3: uglify-js "3.4.x" 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" @@ -10873,6 +11030,11 @@ http-cache-semantics@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" @@ -10957,13 +11119,13 @@ 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.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== +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" @@ -11039,7 +11201,7 @@ 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== @@ -11056,15 +11218,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@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/immer/-/immer-5.0.0.tgz#07f462b7d95f7e86c214a861ecacd766d42b8c0a" - integrity sha512-G7gRqKbi9NE025XVyqyTV98dxUOtdKvu/P1QRaVZfA55aEcXgjbxPdm+TlWdcSMNPKijlaHNz61DGPyelouRlA== + 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" @@ -11199,15 +11361,15 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, 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== 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" @@ -11282,12 +11444,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: @@ -11300,12 +11466,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== @@ -11343,14 +11504,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== + 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" @@ -11389,17 +11550,17 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.0, is-buffer@^2.0.2: +is-buffer@^2.0.0: 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== @@ -11440,14 +11601,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" @@ -11512,11 +11673,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" @@ -11536,9 +11695,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" @@ -11577,16 +11736,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= @@ -11594,6 +11753,14 @@ is-installed-globally@0.1.0, is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" +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: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + is-lower-case@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" @@ -11601,6 +11768,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" @@ -11611,10 +11785,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" @@ -11640,7 +11814,7 @@ 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= @@ -11716,21 +11890,16 @@ 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" @@ -11749,7 +11918,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== @@ -11759,7 +11928,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-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= @@ -11783,6 +11952,16 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +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: + 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" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -11813,9 +11992,9 @@ is-valid-glob@^1.0.0: integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= is-what@^3.3.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.4.0.tgz#a9b3fe0c22f52d49efef977f640da44e65a3f866" - integrity sha512-oFdBRuSY9PocqPoUUseDXek4I+A1kWGigZGhuG+7GEkp0tRkek11adc0HbTEVsNvtojV7rp0uhf5LWtGvHzoOQ== + 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.1, is-windows@^1.0.2: version "1.0.2" @@ -11827,6 +12006,11 @@ is-wsl@^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" @@ -11918,11 +12102,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" @@ -11942,33 +12126,22 @@ 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" - jaeger-client@~3.17.0: - version "3.17.1" - resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.1.tgz#8fea09f832c2bbfb1ea6935f37424cc907164342" - integrity sha512-S3fS3vk7dcWTWUWGqMWD9fGa/diLhPIP9h0S8L+OQdz24+7hR7cdALk+AOZD1VzbvqUIQbj6uUELp31J4Frgcw== + version "3.17.2" + resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.2.tgz#92cf26752c5c66f3e66adf595cdde2f548cc0804" + integrity sha512-19YloSidmKbrXHgecLWod8eXo7rm2ieUnsfg0ripTFGRCW5v2OWE96Gte4/tOQG/8N+T39VoLU2nMBdjbdMUJg== dependencies: node-int64 "^0.4.0" opentracing "^0.13.0" @@ -12069,6 +12242,16 @@ jest-diff@^24.3.0, 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" @@ -12115,6 +12298,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" @@ -12397,6 +12585,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" @@ -12415,11 +12611,6 @@ joycon@^2.2.5: resolved "https://registry.yarnpkg.com/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== -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== - js-priority-queue@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/js-priority-queue/-/js-priority-queue-0.1.5.tgz#f71e9b2120c91e8a1ddab3b7d347dac01d81e837" @@ -12440,7 +12631,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.11.0, js-yaml@^3.13.1: +js-yaml@3.13.1, js-yaml@^3.11.0, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -12549,12 +12740,12 @@ 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.1: version "0.5.1" @@ -12723,6 +12914,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" @@ -12753,9 +12951,9 @@ 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" @@ -12785,24 +12983,24 @@ knex@^0.15.2: v8flags "^3.1.1" koa-better-body@^3.1.13: - version "3.2.0" - resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.2.0.tgz#8e037c1e8b68c4cfa82920a7b53ce0ed25553b6d" - integrity sha512-raxYUJ/0O8UF4imhvJBv9/YDWTFnUb/XNshdOHGenHu4rE5K4QwXzA+8tpORlVIa4gDILOz+G9iX50wspZBJFg== + 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@github: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" @@ -12820,9 +13018,9 @@ 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" @@ -12855,13 +13053,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" @@ -12939,12 +13137,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" @@ -13010,28 +13208,17 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" -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.0.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.1" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.1.tgz#c68f8e55c3331bcba1f5b448b5cc833f21c68628" - integrity sha512-Jse0/UP2qFl2YN8HISnxwQIRHNM3vJLafkTKjw4tZs9Vi8VGUFVmGvg/WMn5To/6KHyYJTXZvUzuouoaZuPGXA== + version "5.0.2" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" + integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== dependencies: - abstract-leveldown "~6.2.1" - immediate "~3.2.3" + abstract-leveldown "~6.2.3" + buffer "^5.5.0" inherits "^2.0.3" ltgt "^2.1.2" -level-packager@^5.0.0: +level-packager@^5.1.0: 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== @@ -13053,27 +13240,17 @@ level-write-stream@1.0.0: dependencies: end-stream "~0.1.0" -level@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-5.0.1.tgz#8528cc1ee37ac413270129a1eab938c610be3ccb" - integrity sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg== +level@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-6.0.0.tgz#d216fb9b9c3940bcec15c5880d8da775ca086c5c" + integrity sha512-3oAi7gXLLNr7pHj8c4vbI6lHkXf35m8qb7zWMrNTrOax6CXBVggQAwL1xnC/1CszyYrW3BsLXsY5TMgTxtKfFA== dependencies: - level-js "^4.0.0" - level-packager "^5.0.0" - leveldown "^5.0.0" + level-js "^5.0.0" + level-packager "^5.1.0" + leveldown "^5.4.0" opencollective-postinstall "^2.0.0" -leveldown@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.0.2.tgz#c8edc2308c8abf893ffc81e66ab6536111cae92c" - integrity sha512-Ib6ygFYBleS8x2gh3C1AkVsdrUShqXpe6jSTnZ6sRycEXKhqVf+xOSkhgSnjidpPzyv0d95LJVFrYQ4NuXAqHA== - dependencies: - abstract-leveldown "~6.0.0" - fast-future "~1.0.2" - napi-macros "~1.8.1" - node-gyp-build "~3.8.0" - -leveldown@^5.0.0, leveldown@^5.1.1: +leveldown@5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.4.1.tgz#83a8fdd9bb52b1ed69be2ef59822b6cdfcdb51ec" integrity sha512-3lMPc7eU3yj5g+qF1qlALInzIYnkySIosR1AsUKFjL9D8fYbTLuENBAeDRZXIG4qeWOAyqRItOoLu2v2avWiMA== @@ -13082,20 +13259,29 @@ leveldown@^5.0.0, leveldown@^5.1.1: napi-macros "~2.0.0" node-gyp-build "~4.1.0" -levelup@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.0.2.tgz#bcb8d28d0a82ee97f1c6d00f20ea6d32c2803c5b" - integrity sha512-cx9PmLENwbGA3svWBEbeO2HazpOSOYSXH4VA+ahVpYyurvD+SDSfURl29VBY2qgyk+Vfy2dJd71SBRckj/EZVA== +leveldown@^5.1.1, leveldown@^5.4.0: + 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" + node-gyp-build "~4.1.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== dependencies: - deferred-leveldown "~5.0.0" + deferred-leveldown "~5.1.0" level-errors "~2.0.0" level-iterator-stream "~4.0.0" xtend "~4.0.0" levelup@^4.1.0, levelup@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.3.2.tgz#31c5b1b29f146d1d35d692e01a6da4d28fa55ebd" - integrity sha512-cRTjU4ktWo59wf13PHEiOayHC3n0dOh4i5+FHr4tv4MX9+l7mqETicNq3Aj07HKlLdk0z5muVoDL2RD+ovgiyA== + 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" @@ -13113,6 +13299,13 @@ 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== +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" @@ -13324,19 +13517,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" @@ -13432,6 +13634,11 @@ 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" @@ -13456,16 +13663,36 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +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" @@ -13567,10 +13794,10 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -loglevel@^1.6.4: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== +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== long@^2.4.0: version "2.4.0" @@ -13601,11 +13828,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" @@ -13648,17 +13880,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== + 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" @@ -13674,11 +13906,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" @@ -13699,9 +13926,9 @@ map-visit@^1.0.0: object-visit "^1.0.0" 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" @@ -13771,6 +13998,11 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +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" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -13937,15 +14169,10 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.42.0, "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.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +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" @@ -13959,19 +14186,12 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.0.8: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.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.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== +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.42.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" @@ -13979,9 +14199,9 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.2.0, 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== + 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" @@ -13993,15 +14213,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" @@ -14011,9 +14231,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" @@ -14039,12 +14259,17 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, 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= @@ -14124,32 +14349,42 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-promise@^5.0.0: - 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" +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: + minimist "^1.2.5" + +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.8.0" - resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.8.0.tgz#f5b538c7aa771c4faf2f8a892867fda6e86ce354" - integrity sha512-kmHhfmrEsTks35l8WwN1KFM+tBSWz0oC8Y3Z/LxryO7JQarv0miVCxzGqrq4v/BWQNt4Hh4ydXU4f8iXjHZFEg== + 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.15" markdown-it "^10.0.0" - mkdirp "^0.5.1" + mkdirp "0.5.5" requirejs "^2.3.6" - yargs "^14.2.0" + yargs "^15.3.1" module-details-from-path@^1.0.3: version "1.0.3" @@ -14200,12 +14435,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.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== @@ -14279,14 +14509,14 @@ nan@2.13.2: 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== + 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.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.7.tgz#d775e3e7c6470bbaaae3da9a647a80e228e0abf7" - integrity sha512-fmS3qwDldm4bE01HCIRqNk+f255CNjnAoeV3Zzzv0KemObHKqYgirVaZA9DtKcjogicWjYcHkJs4D5A8CjnuVQ== + 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" @@ -14306,14 +14536,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== - -napi-macros@~1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-1.8.2.tgz#299265c1d8aa401351ad0675107d751228c03eda" - integrity sha512-Tr0DNY4RzTaBG2W2m3l7ZtFuJChTH6VZhXVhkGGjF/4cZTt+i8GcM9ozD+30Lmr4mDoZ5Xx34t2o4GJqYWDGcg== + 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@~2.0.0: version "2.0.0" @@ -14326,9 +14551,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" @@ -14349,7 +14574,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= @@ -14372,9 +14602,9 @@ nocache@2.1.0: integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== node-abi@^2.7.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.13.0.tgz#e2f2ec444d0aca3ea1b3874b6de41d1665828f63" - integrity sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA== + 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" @@ -14406,11 +14636,6 @@ node-forge@^0.9.0: 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" - integrity sha512-bYbpIHyRqZ7sVWXxGpz8QIRug5JZc/hzZH4GbdT9HTZi6WmKCZ8GLvP8OZ9TTiIBvwPFKgtGrlWQSXDAvYdsPw== - node-gyp-build@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" @@ -14475,10 +14700,10 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" - integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -14489,12 +14714,12 @@ node-pre-gyp@^0.11.0: rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^4" + tar "^4.4.2" -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== +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -14507,17 +14732,15 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.42: - version "1.1.42" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.42.tgz#a999f6a62f8746981f6da90627a8d2fc090bbad7" - integrity sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA== - 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@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.1.tgz#cec436f8153ad5d3e6c27c304849a06cabea71cc" - integrity sha512-UC6FVhNLXjbbV4UzaXA3wUdbEkUZzLGgMGzmxvWAex5nzib/jhcSHVFlQODdbuUHq8SnnZ4/EABBAbC3RplvPg== + 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 "^3.2.2" debug "^3.2.6" @@ -14528,7 +14751,7 @@ nodemon@^2.0.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" @@ -14536,9 +14759,9 @@ noop-logger@^0.1.1: integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= 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" @@ -14606,6 +14829,11 @@ normalize-url@^3.0.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" @@ -14614,9 +14842,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" @@ -14626,6 +14856,11 @@ npm-conf@^1.1.0: config-chain "^1.1.11" pify "^3.0.0" +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@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5" @@ -14637,12 +14872,13 @@ npm-package-arg@^7.0.0: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6: - 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== + 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-normalize-package-bin "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" @@ -14659,9 +14895,9 @@ 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" @@ -14693,15 +14929,15 @@ 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.2.0" @@ -14774,9 +15010,12 @@ object-inspect@^1.7.0: 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" @@ -14815,13 +15054,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" @@ -14855,12 +15094,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" @@ -14963,7 +15202,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= @@ -15068,6 +15307,11 @@ p-cancelable@^0.4.0: 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" @@ -15114,10 +15358,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" @@ -15198,15 +15442,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" @@ -15219,9 +15463,9 @@ pako@~0.2.0: 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== + 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" @@ -15515,10 +15759,15 @@ pg-int8@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.7: - 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" @@ -15532,14 +15781,15 @@ pg-types@^2.1.0: postgres-interval "^1.1.0" pg@^7.7.1: - version "7.14.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-7.14.0.tgz#f46727845ad19c2670a7e8151063a670338b6057" - integrity sha512-TLsdOWKFu44vHdejml4Uoo8h0EwCjdIj9Z9kpz7pA5i8iQxOTwVb1+Fy+X86kW5AXKxQpYpYDs4j/qPDbro/lg== + 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.7" + pg-packet-stream "^1.1.0" + pg-pool "^2.0.10" pg-types "^2.1.0" pgpass "1.x" semver "4.3.2" @@ -15551,10 +15801,10 @@ pgpass@1.x: dependencies: split "^1.0.0" -picomatch@^2.0.4, picomatch@^2.0.5: - version "2.1.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== +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" @@ -15584,9 +15834,9 @@ pinkie@^2.0.0: integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pino-pretty@^3.2.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.5.0.tgz#5e88003fdbaef9d541393eac4498ac9b97c1683b" - integrity sha512-3sg6s7nI5vgjrEBKhLckAfLPjgjm1U/Fw0C6jhoWnIU2D6QqCpF8eAqL+E1A6bBglCGR/APCx8VuxchBxtuMjA== + 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" @@ -15606,9 +15856,9 @@ pino-std-serializers@^2.4.2: integrity sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ== pino@^5.12.6, pino@^5.13.2: - version "5.14.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-5.14.0.tgz#eec56c6388797528e526f969ee022592cc538d4e" - integrity sha512-Vj1f2wAojTGesogT0hsA/ua8ALltCOBCcA1nkEoDfnTsVWpgBu5UVSY7OdjiGmrMOKHBm24nd3nKXzyPUYJ3ig== + 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" @@ -15645,6 +15895,13 @@ pkg-up@^2.0.0: 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" @@ -15679,14 +15936,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" @@ -15698,14 +15955,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" @@ -15755,11 +16011,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== + 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.0" + postcss "^7.0.26" postcss-load-config@^2.0.0: version "2.1.0" @@ -15858,9 +16114,9 @@ postcss-modules-local-by-default@^2.0.6: postcss-value-parser "^3.3.1" postcss-modules-scope@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" - integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== + 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" @@ -15984,24 +16240,15 @@ postcss-reduce-transforms@^4.0.2: postcss-value-parser "^3.0.0" postcss-selector-parser@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= - dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -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== + 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" -postcss-selector-parser@^6.0.0: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -16034,15 +16281,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.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-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@5 - 7", postcss@7.x.x, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" - integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== +"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" @@ -16059,9 +16306,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" @@ -16070,70 +16317,71 @@ 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: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.1.1.tgz#f5f8dcd1fc440fb76651cb26f6fc5d97a39cd6ce" - integrity sha512-8bXWclixNJZqokvxGHRsG19zehSJiaZaz4dVYlhXhhUctz7gMcNTElHjPBzBdZlKKvt9aFDndmXN1VVE53Co8g== + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.2.1.tgz#619e3d5c2463ddd94a4b1bf40d44408c46e9de79" + integrity sha512-AoDPdr6tFqj3xs7oiD2oioYj5MMu87c3UemRHZ/p++BwU+ZsKn5jpnL09OvWTLvMvaICGAOufiaUzmM1/KKoKQ== dependencies: + abort-controller "3.0.0" argsarray "0.0.1" buffer-from "1.1.0" clone-buffer "1.0.0" double-ended-queue "2.1.0-0" - fetch-cookie "0.7.0" + fetch-cookie "0.7.3" immediate "3.0.6" - inherits "2.0.3" - level "5.0.1" + inherits "2.0.4" + level "6.0.0" level-codec "9.0.1" level-write-stream "1.0.0" - leveldown "5.0.2" - levelup "4.0.2" + leveldown "5.4.1" + levelup "4.1.0" ltgt "2.2.1" node-fetch "2.4.1" readable-stream "1.0.33" spark-md5 "3.0.0" through2 "3.0.1" - uuid "3.2.1" + uuid "3.3.3" vuvuzela "1.0.3" prebuild-install@^5.3.0, prebuild-install@^5.3.3: @@ -16162,7 +16410,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= @@ -16177,15 +16425,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.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - prettier@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.1.tgz#3f00ac71263be34684b2b2c8d7e7f63737592dac" - integrity sha512-piXGBcY1zoFOG0MvHpNE5reAGseLmaCRifQ/fmfF49BcYkInEs/naD/unxGNAeOKFA5+JxVrPyMvMlpzcd20UA== + 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" @@ -16218,6 +16461,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" @@ -16229,13 +16482,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== @@ -16280,21 +16533,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.3.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" - integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== + 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" + 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== @@ -16304,11 +16557,11 @@ prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, react-is "^16.8.1" property-information@^5.0.0, property-information@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.3.0.tgz#bc87ac82dc4e72a31bb62040544b1bf9653da039" - integrity sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w== + 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" @@ -16316,12 +16569,12 @@ proto-list@~1.2.1: integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= 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" @@ -16334,9 +16587,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.5.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.5.0.tgz#47fd1292def7fdb1e138cd78afa8814cebcf7b13" - integrity sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA== + 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" @@ -16404,6 +16657,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" @@ -16425,9 +16685,9 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.5.2: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== + 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" @@ -16546,12 +16806,12 @@ raw-loader@^3.1.0: schema-utils "^2.0.1" raw-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.0.tgz#d639c40fb9d72b5c7f8abc1fb2ddb25b29d3d540" - integrity sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q== + 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 "^1.2.3" - schema-utils "^2.5.0" + 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" @@ -16564,19 +16824,19 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: strip-json-comments "~2.0.1" react-dom@^16.12.0, react-dom@^16.7.0, react-dom@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== + 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.18.0" + scheduler "^0.19.1" react-draggable@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.1.0.tgz#e1c5b774001e32f0bff397254e1e9d5448ac92a4" - integrity sha512-Or/qe70cfymshqoC8Lsp0ukTzijJObehb7Vfl7tb5JRxoV+b6PDkOGoqYaWBzZ59k9dH/bwraLGsnlW78/3vrA== + 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" @@ -16615,9 +16875,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.18" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.18.tgz#a9029e34af2690d76208f9a35189d73c2dfea6a7" - integrity sha512-qYD0Qi9lIbg9jLyfmodfqvAQqCBsoPKxAhca8Nxvy2/2pO5Q9r2kM28jN0bbbSnhwK8dJ7FjsfVtXKOxMW+bqw== + 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" @@ -16629,9 +16889,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.8.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.8.0.tgz#229de5904809696c9f46932bd9b6126b2522866e" - integrity sha512-rA/8GRKjPulft8BSBSMsHkE1AGPqJ7LjNsyk0BE7XjG70Iz62zOled2SJk7LDo8x9z86a3xOstDlKlMZ4pAy7A== + 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" @@ -16642,10 +16902,10 @@ react-input-autosize@^2.2.2: dependencies: prop-types "^15.5.8" -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.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== +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" @@ -16689,13 +16949,12 @@ react-redux@^5.1.1: react-lifecycles-compat "^3.0.0" react-redux@^7.0.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.3.tgz#717a3d7bbe3a1b2d535c94885ce04cdc5a33fc79" - integrity sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w== + 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" @@ -16744,9 +17003,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" @@ -16755,7 +17014,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" @@ -16865,9 +17124,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" @@ -16881,7 +17140,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== @@ -16892,18 +17151,18 @@ 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.0.0, react@^16.12.0, react@^16.7.0, react@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== + 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" @@ -16980,9 +17239,9 @@ read-pkg@^5.2.0: type-fest "^0.6.0" "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" @@ -17002,16 +17261,7 @@ 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.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== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.0.2: +"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== @@ -17054,12 +17304,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" @@ -17109,9 +17359,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" @@ -17126,10 +17376,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" @@ -17148,17 +17398,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" @@ -17176,23 +17427,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" + 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" @@ -17202,30 +17454,36 @@ 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" @@ -17357,11 +17615,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" @@ -17403,7 +17666,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.88.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== @@ -17429,6 +17692,32 @@ request@2.88.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" @@ -17558,13 +17847,13 @@ resolve@1.12.0: path-parse "^1.0.6" 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.13.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" - integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== + 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, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= @@ -17605,7 +17894,7 @@ retry@^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== @@ -17633,9 +17922,9 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: 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" @@ -17680,9 +17969,9 @@ rollup-pluginutils@^2.4.1: estree-walker "^0.6.1" rollup@^1.21.4: - version "1.27.8" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.27.8.tgz#94288a957af9f4c2380b73a17494d87705997d0f" - integrity sha512-EVoEV5rAWl+5clnGznt1KY8PeVkzVQh/R0d2s3gHEkN7gfoyC4JmvIVuCtPbYE8NM5Ep/g+nAmvKXBjzaqTsHA== + 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" "*" @@ -17694,11 +17983,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" @@ -17718,17 +18005,17 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs-tslint-rules@^4.24.3: - version "4.27.1" - resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.27.1.tgz#9f646ba2f768672bfdc4b51fc0e6c1a062412db1" - integrity sha512-LMTT0QeGKqBI+oOcWhnKTclovHFL9NrzviNeDc+iPRJpNsvq8ZN/nBaWAhFhnNtqMLX2SgWrhCKJcW6lAyxAYA== + 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" "^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" @@ -17738,9 +18025,9 @@ rxjs@^5.0.0-beta.11: symbol-observable "1.0.1" 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.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + 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" @@ -17749,7 +18036,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -17762,9 +18049,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" @@ -17791,10 +18078,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.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +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" @@ -17808,12 +18095,12 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.1.tgz#eb78f0b945c7bcfa2082b3565e8db3548011dc4f" - integrity sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg== +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" scrypt-js@^2.0.3, scrypt-js@^2.0.4: @@ -17858,12 +18145,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" @@ -17872,7 +18159,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 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.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== @@ -17882,11 +18169,21 @@ semver@4.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= +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@^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" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -17914,15 +18211,20 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" -serialize-javascript@^1.4.0, serialize-javascript@^1.5.0, serialize-javascript@^1.7.0: +serialize-javascript@^1.5.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.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.1.tgz#952907a04a3e3a75af7f73d92d15e233862048b2" - integrity sha512-MPLPRpD4FNqWq9tTIjYG5LesFouDhdyH0EPY3gVK4DRD5+g4aDqdNSzLIwceulo3Yj+PL1bPh6laE5+H6LTcrQ== +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@^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" @@ -17962,9 +18264,9 @@ serve-static@1.14.1: send "0.17.1" serve@^11.1.0, serve@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-11.2.0.tgz#0405ce95c4e4a6abd9cd3d3a04ebaa7d94638627" - integrity sha512-THZcLzDGk3vJqjhAbLkLag43tiE3V0B7wVe98Xtl+1KyAsr+4iShg+9hke4pLZmrCJu0pUg0TrbhJmdqn/MKoA== + 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" @@ -18064,9 +18366,9 @@ shorthash@^0.0.2: 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" @@ -18094,10 +18396,10 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sisteransi@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" - integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== +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" @@ -18131,9 +18433,9 @@ slice-ansi@0.0.4: integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= slugify@^1.3.3: - version "1.3.6" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.6.tgz#ba5fd6159b570fe4811d02ea9b1f4906677638c3" - integrity sha512-wA9XS475ZmGNlEnYYLPReSfuz/c3VQsEMoU43mi6OnKMCdbnFXd4/Yg7J0lBv8jkPolacMpOrWEaoYxuE1+hoQ== + 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" @@ -18253,10 +18555,11 @@ sockjs@0.3.19: uuid "^3.0.1" 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: @@ -18286,11 +18589,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" @@ -18303,10 +18606,10 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.13, source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: - 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== +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" @@ -18332,9 +18635,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" @@ -18372,9 +18675,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" @@ -18407,9 +18710,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" @@ -18454,13 +18757,12 @@ sql-summary@^1.0.1: integrity sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww== sqlite3@^4.0.4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.1.1.tgz#539a42e476640796578e22d589b3283c28055242" - integrity sha512-CvT5XY+MWnn0HkbwVKJAyWEMfzpAPwnTiB3TobA5Mri44SrTovmmh499NPQP+gatkeOipqPlBLel7rn4E/PCQg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.2.0.tgz#49026d665e9fc4f922e56fb9711ba5b4c85c4901" + integrity sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg== dependencies: nan "^2.12.1" node-pre-gyp "^0.11.0" - request "^2.87.0" sshpk@^1.7.0: version "1.16.1" @@ -18579,9 +18881,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" @@ -18644,7 +18946,7 @@ 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: +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== @@ -18653,21 +18955,39 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.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" @@ -18784,9 +19104,9 @@ strip-final-newline@^2.0.0: integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 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== + 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: version "2.0.1" @@ -18882,7 +19202,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.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== @@ -18952,12 +19272,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" @@ -18975,17 +19295,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, tar@^4.4.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -19022,25 +19342,27 @@ tdigest@^0.1.1: dependencies: bintrees "1.0.1" -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" teeny-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.2.tgz#da0a6ba6fce4a9dab772ef84b04e417157c56fe7" - integrity sha512-B6fxA0fSnY/bul06NggdN1nywtr5U5Uvt96pHfTi8pi4MNe6++VUWcAAFBrcMeha94s+gULwA5WvagoSZ+AcYg== + version "6.0.3" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.3.tgz#b617f9d5b7ba95c76a3f257f6ba2342b70228b1f" + integrity sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw== dependencies: http-proxy-agent "^4.0.0" https-proxy-agent "^5.0.0" node-fetch "^2.2.0" stream-events "^1.0.5" - uuid "^3.3.2" + uuid "^7.0.0" term-size@^1.2.0: version "1.2.0" @@ -19049,6 +19371,11 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +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" @@ -19059,39 +19386,40 @@ ternary-stream@^3.0.0: merge-stream "^2.0.0" through2 "^3.0.1" -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== +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.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz#5569e6c7d8be79e5e43d6da23acc3b6ba77d22bd" - integrity sha512-jwdauV5Al7zopR6OAYvIIRcxXCSvLjZjr7uZE8l2tIWb/ryrGN48sJftqGf5k9z09tWhajx53ldp0XPI080YnA== + 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.4.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" - integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== +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" @@ -19151,11 +19479,11 @@ thread-loader@^2.1.3: 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== + version "3.12.0" + resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.12.0.tgz#30857847755e7f036b2e0a79d11c9f55075539d9" + integrity sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw== dependencies: - bufrw "^1.2.1" + bufrw "^1.3.0" error "7.0.2" long "^2.4.0" @@ -19223,11 +19551,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= @@ -19258,9 +19586,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" @@ -19346,6 +19674,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" @@ -19412,7 +19745,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.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== @@ -19436,14 +19769,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== + 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" @@ -19458,9 +19791,9 @@ trim-right@^1.0.1: integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 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" @@ -19475,9 +19808,9 @@ ts-invariant@^0.4.0: tslib "^1.9.3" ts-jest@^24.1.0: - version "24.2.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.2.0.tgz#7abca28c2b4b0a1fdd715cd667d65d047ea4e768" - integrity sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag== + 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" @@ -19491,9 +19824,9 @@ ts-jest@^24.1.0: yargs-parser "10.x" ts-loader@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" - integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== + 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" @@ -19502,21 +19835,26 @@ ts-loader@^6.1.0: semver "^6.0.0" ts-node@^8.4.1: - version "8.5.4" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" - integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== + 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" @@ -19584,10 +19922,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" @@ -19641,6 +19979,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +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" @@ -19669,7 +20012,7 @@ type@^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== @@ -19697,9 +20040,9 @@ typescript@3.8.1-rc: integrity sha512-aOIe066DyZn2uYIiND6fXMUUJ70nxwu/lKhA92QuQzXyC86fr0ywo1qvO8l2m0EnDcfjprYPuFRgNgDj7U2GlQ== typescript@^3.2.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" - integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== + 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" @@ -19707,9 +20050,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" @@ -19724,18 +20067,10 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^3.1.4: - version "3.7.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" - integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - 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" @@ -19746,9 +20081,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" @@ -19790,15 +20125,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" @@ -19856,13 +20191,6 @@ 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" - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -19881,9 +20209,9 @@ unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-stringify-position@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12" - integrity sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA== + 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: "@types/unist" "^2.0.2" @@ -19910,11 +20238,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" @@ -19928,21 +20251,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" @@ -19991,13 +20317,6 @@ url-loader@^3.0.0: mime "^2.4.4" 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= - dependencies: - prepend-http "^1.0.1" - url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" @@ -20033,15 +20352,15 @@ 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.2" - resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.2.tgz#4ed7f0d8631c70192b33635f6a4e700d9e6bfe62" - integrity sha512-KcovLXRQuH63iEtnqXyDQGOi5dXHpLM5lZBIUsqSJQToua8nL2sVCieQTkzQBfLe5mCuvk40MgKciI61lgevWw== + 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" @@ -20057,7 +20376,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@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== @@ -20065,6 +20384,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" @@ -20079,6 +20408,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" @@ -20089,16 +20430,21 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@3.2.1: - version "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== +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: version "3.1.3" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" @@ -20142,9 +20488,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" @@ -20156,9 +20502,9 @@ verror@1.10.0: extsprintf "^1.2.0" vfile-message@*: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.2.tgz#75ba05090ec758fa8420f2c11ce049bcddd8cf3e" - integrity sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA== + 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" @@ -20248,11 +20594,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" @@ -20268,19 +20614,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" @@ -20292,9 +20638,9 @@ wbuf@^1.1.0, wbuf@^1.7.3: minimalistic-assert "^1.0.0" 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" @@ -20302,12 +20648,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" @@ -20332,9 +20678,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" @@ -20351,7 +20697,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" @@ -20370,14 +20716,16 @@ webpack-dev-server@^3.8.0: ws "^6.2.1" yargs "12.0.5" -webpack-external-import@^0.3.0-beta.0: - version "0.3.0-beta.0" - resolved "https://registry.yarnpkg.com/webpack-external-import/-/webpack-external-import-0.3.0-beta.0.tgz#bceccdafb9572931ee93ffa84e39eea9f6d15dca" - integrity sha512-58uSxZEi1Y2HGktQficlwSVHcvml1p6fpXrFEMEgi8nR/eLWlHcoYyILGRzZFSq8jfFqhAbHlm4fcnAIVA5Epg== +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: + assert "^2.0.0" dimport "^1.0.0" fs-extra "^8.1.0" - loadjs "^3.6.1" + loadjs "^4.2.0" + pkg-up "^3.1.0" webpack-flush-chunks@^2.0.3: version "2.0.3" @@ -20406,15 +20754,15 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack- source-map "~0.6.1" webpack@^4.39.2, webpack@^4.40.2: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== - 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" + 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.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" @@ -20425,13 +20773,13 @@ webpack@^4.39.2, webpack@^4.40.2: 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: @@ -20512,6 +20860,18 @@ 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-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" @@ -20540,6 +20900,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" @@ -20547,11 +20914,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= - winston@^2.1.1: version "2.4.4" resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.4.tgz#a01e4d1d0a103cf4eada6fc1f886b3110d71c34b" @@ -20741,7 +21103,7 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.0.0: +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== @@ -20764,7 +21126,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.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== @@ -20805,11 +21167,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" @@ -20828,11 +21188,6 @@ 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" @@ -20864,11 +21219,11 @@ xorshift@^0.2.0: 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" @@ -20882,7 +21237,7 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" -y18n@^3.2.0, y18n@^3.2.1: +y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= @@ -20908,11 +21263,11 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" - integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== + version "1.9.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== dependencies: - "@babel/runtime" "^7.6.3" + "@babel/runtime" "^7.9.2" yargs-parser@10.x: version "10.1.0" @@ -20929,18 +21284,26 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -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== +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.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@^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" @@ -20978,9 +21341,9 @@ yargs@12.0.5, yargs@^12.0.5: yargs-parser "^11.1.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== + 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" @@ -20991,12 +21354,12 @@ 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.2.0: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== + 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" @@ -21008,20 +21371,24 @@ 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" @@ -21086,15 +21453,15 @@ 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" @@ -21105,6 +21472,6 @@ zen-observable@^0.8.0: 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/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-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-node-tools/src/restore.ts b/packages/neo-one-node-tools/src/restore.ts index c0c307976a..330f782520 100644 --- a/packages/neo-one-node-tools/src/restore.ts +++ b/packages/neo-one-node-tools/src/restore.ts @@ -1,6 +1,7 @@ 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 { 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\\", From a447a06fb5e03b3c8b838ed23def314bc3348a5c Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 5 May 2020 11:40:52 -0700 Subject: [PATCH 040/141] chore(ts): update and unpin typescript dep (#2027) --- .../cli/update-ts-dep_2020-05-04-22-59.json | 11 ++ .../update-ts-dep_2020-05-04-22-59.json | 11 ++ .../update-ts-dep_2020-05-04-22-59.json | 11 ++ .../update-ts-dep_2020-05-04-22-59.json | 11 ++ .../update-ts-dep_2020-05-04-22-59.json | 11 ++ .../update-ts-dep_2020-05-04-22-59.json | 11 ++ .../utils/update-ts-dep_2020-05-04-22-59.json | 11 ++ common/config/rush/common-versions.json | 2 +- common/config/rush/yarn.lock | 151 ++++++++---------- packages/neo-one-build-tools-web/package.json | 2 +- packages/neo-one-build-tools/package.json | 2 +- packages/neo-one-cli/package.json | 2 +- packages/neo-one-editor/package.json | 2 +- packages/neo-one-local-browser/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/neo-one-ts-utils/package.json | 2 +- .../package.json | 2 +- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 2 +- .../neo-one-website/src/components/Hero.tsx | 2 +- .../components/course/courses/CoursesView.tsx | 2 +- .../src/components/home/Home.tsx | 2 +- 24 files changed, 163 insertions(+), 97 deletions(-) create mode 100644 common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json create mode 100644 common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json diff --git a/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..2acd363556 --- /dev/null +++ b/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..cadb1dba76 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler-node", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..6cb5ee4751 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..4851a6046a --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-typescript-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..bb9bedf821 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/ts-utils", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..cd2c5e06ff --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/typescript-concatenator", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json new file mode 100644 index 0000000000..48cd99953a --- /dev/null +++ b/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index 3874ce95c4..6780248dd5 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -17,7 +17,7 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "implicitlyPreferredVersions": true, diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 4cc756a00b..a0c8231200 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2013,7 +2013,7 @@ "@rush-temp/build-tests@file:./projects/build-tests.tgz": version "0.0.0" - resolved "file:./projects/build-tests.tgz#a8f0c526234b9dae0477d17e4b54c2cb1f3cfcae" + resolved "file:./projects/build-tests.tgz" dependencies: "@babel/preset-env" "^7.6.3" app-root-dir "^1.0.2" @@ -2032,7 +2032,7 @@ "@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": version "0.0.0" - resolved "file:./projects/build-tools-web.tgz#ab86c99e585f6ba372c4c42eaeb26f5d9298d1ac" + resolved "file:./projects/build-tools-web.tgz" dependencies: "@babel/core" "^7.6.2" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2106,7 +2106,7 @@ "@rush-temp/build-tools@file:./projects/build-tools.tgz": version "0.0.0" - resolved "file:./projects/build-tools.tgz#fed21ef6169c4c2b9d78d27ae3315dd49465fd4f" + resolved "file:./projects/build-tools.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/gulp" "^4.0.6" @@ -2153,7 +2153,7 @@ "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": version "0.0.0" - resolved "file:./projects/cli-common-node.tgz#d871bbaf28462a936ab5435c6f6500258b0a52b1" + resolved "file:./projects/cli-common-node.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/lodash" "^4.14.138" @@ -2170,7 +2170,7 @@ "@rush-temp/cli-common@file:./projects/cli-common.tgz": version "0.0.0" - resolved "file:./projects/cli-common.tgz#726a9cb43931537d7eb95f12390e5d553c961191" + resolved "file:./projects/cli-common.tgz" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2178,7 +2178,7 @@ "@rush-temp/cli@file:./projects/cli.tgz": version "0.0.0" - resolved "file:./projects/cli.tgz#a7c416a0eb502a57579c7aa0c03c7abb1c4260ec" + resolved "file:./projects/cli.tgz" dependencies: "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" @@ -2215,7 +2215,7 @@ "@rush-temp/client-common@file:./projects/client-common.tgz": version "0.0.0" - resolved "file:./projects/client-common.tgz#3ec2c2cf17152825b0f8d43b34aa0bcc37bb15d0" + resolved "file:./projects/client-common.tgz" dependencies: "@neo-one/ec-key" "^0.1.0" "@types/bn.js" "^4.11.5" @@ -2244,7 +2244,7 @@ "@rush-temp/client-core@file:./projects/client-core.tgz": version "0.0.0" - resolved "file:./projects/client-core.tgz#f91d4c964e661795df6b44246971b52a49cd6249" + resolved "file:./projects/client-core.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2267,7 +2267,7 @@ "@rush-temp/client-full-common@file:./projects/client-full-common.tgz": version "0.0.0" - resolved "file:./projects/client-full-common.tgz#5856ca79a8b2c7421708a6ce745d80cc8a3154ae" + resolved "file:./projects/client-full-common.tgz" dependencies: "@types/jest" "^24.0.18" gulp "~4.0.2" @@ -2275,7 +2275,7 @@ "@rush-temp/client-full-core@file:./projects/client-full-core.tgz": version "0.0.0" - resolved "file:./projects/client-full-core.tgz#5d68aa8f40c33525dba1571805e22b9b8d3253c7" + resolved "file:./projects/client-full-core.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@types/bn.js" "^4.11.5" @@ -2290,13 +2290,13 @@ "@rush-temp/client-full@file:./projects/client-full.tgz": version "0.0.0" - resolved "file:./projects/client-full.tgz#dd1aaa9ebb5a090c8b133593d0cda42edd7e09e9" + 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#31272ddd2b1f342ad469e3337ae4dc90fbedbbdf" + resolved "file:./projects/client-switch.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" @@ -2323,13 +2323,13 @@ "@rush-temp/client@file:./projects/client.tgz": version "0.0.0" - resolved "file:./projects/client.tgz#a7b120260bba5821e5f3d6ea65f9331e00dc771e" + 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#a95015b1b6b2cc0e0c429388ca4dca585a8ad22b" + resolved "file:./projects/developer-tools-frame.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2358,7 +2358,7 @@ "@rush-temp/developer-tools@file:./projects/developer-tools.tgz": version "0.0.0" - resolved "file:./projects/developer-tools.tgz#d41407ce77c384dcad1bba45af5bc04a30fac3ee" + resolved "file:./projects/developer-tools.tgz" dependencies: gulp "~4.0.2" resize-observer-polyfill "^1.5.0" @@ -2366,7 +2366,7 @@ "@rush-temp/editor-server@file:./projects/editor-server.tgz": version "0.0.0" - resolved "file:./projects/editor-server.tgz#d4aa3c5a8d9e0684cc33c0bc1bdc285e190267d7" + resolved "file:./projects/editor-server.tgz" dependencies: "@types/graphlib" "^2.1.5" "@types/jest" "^24.0.18" @@ -2395,7 +2395,7 @@ "@rush-temp/editor@file:./projects/editor.tgz": version "0.0.0" - resolved "file:./projects/editor.tgz#fbaa8a4420ec977cc27cd630f6765db44ad80942" + resolved "file:./projects/editor.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" @@ -2466,7 +2466,7 @@ "@rush-temp/http-context@file:./projects/http-context.tgz": version "0.0.0" - resolved "file:./projects/http-context.tgz#7e367ed4b82afecc405923c97dbc23d9659f3a21" + resolved "file:./projects/http-context.tgz" dependencies: "@types/koa" "^2.0.49" gulp "~4.0.2" @@ -2475,7 +2475,7 @@ "@rush-temp/http@file:./projects/http.tgz": version "0.0.0" - resolved "file:./projects/http.tgz#c6ff4cba9e166dfa848f00cb9dbe0be579bed02c" + resolved "file:./projects/http.tgz" dependencies: "@types/koa" "^2.0.49" "@types/koa-bodyparser" "^4.3.0" @@ -2490,7 +2490,7 @@ "@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/local-browser-worker.tgz#1e9843ca121af30798adc6194e5106bf32d36844" + resolved "file:./projects/local-browser-worker.tgz" dependencies: "@types/nanoid" "^2.0.0" "@types/pouchdb" "^6.4.0" @@ -2503,7 +2503,7 @@ "@rush-temp/local-browser@file:./projects/local-browser.tgz": version "0.0.0" - resolved "file:./projects/local-browser.tgz#fff50496e96e79a1993e6a46f39dc0fbdd3341ef" + resolved "file:./projects/local-browser.tgz" dependencies: "@types/lodash" "^4.14.138" "@types/nanoid" "^2.0.0" @@ -2521,21 +2521,21 @@ "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" - resolved "file:./projects/local-singleton.tgz#a4d04ed98bcefa5b806d0c271ec6766510949f10" + 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#e08a99cfb217afcd1cede25260d95922c234a65d" + 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#e5ab7458cadc29cb41059032ad7fb19f48aa033e" + resolved "file:./projects/logger.tgz" dependencies: "@types/pino" "^5.8.9" gulp "~4.0.2" @@ -2545,7 +2545,7 @@ "@rush-temp/node-bin@file:./projects/node-bin.tgz": version "0.0.0" - resolved "file:./projects/node-bin.tgz#2ff5a8a6a8811605ec2223d511cfb1f6dc3d7aa6" + resolved "file:./projects/node-bin.tgz" dependencies: "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" @@ -2565,7 +2565,7 @@ "@rush-temp/node-blockchain@file:./projects/node-blockchain.tgz": version "0.0.0" - resolved "file:./projects/node-blockchain.tgz#89e82ec13fc270c31e1462c74d806b9fbbe11ff9" + resolved "file:./projects/node-blockchain.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2580,7 +2580,7 @@ "@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": version "0.0.0" - resolved "file:./projects/node-browser-worker.tgz#1381e1248a89f4e8c455b4521dc13645094b167d" + resolved "file:./projects/node-browser-worker.tgz" dependencies: core-js "^3.2.1" file-loader "^5.0.2" @@ -2588,7 +2588,7 @@ "@rush-temp/node-browser@file:./projects/node-browser.tgz": version "0.0.0" - resolved "file:./projects/node-browser.tgz#8e9e5e8faea6764041ef15851e1c4731ff12831b" + resolved "file:./projects/node-browser.tgz" dependencies: "@types/level-js" "^4.0.1" "@types/levelup" "^3.1.1" @@ -2601,7 +2601,7 @@ "@rush-temp/node-consensus@file:./projects/node-consensus.tgz": version "0.0.0" - resolved "file:./projects/node-consensus.tgz#50d52c24aa5b557ba61204b558acb139233aa326" + resolved "file:./projects/node-consensus.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2616,7 +2616,7 @@ "@rush-temp/node-core@file:./projects/node-core.tgz": version "0.0.0" - resolved "file:./projects/node-core.tgz#5265796f7d1eafeb479fef95452abbb0cca61fdc" + resolved "file:./projects/node-core.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" @@ -2632,7 +2632,7 @@ "@rush-temp/node-http-rpc@file:./projects/node-http-rpc.tgz": version "0.0.0" - resolved "file:./projects/node-http-rpc.tgz#9cb00817164682e235fd972f5ffbef5c94fa99be" + resolved "file:./projects/node-http-rpc.tgz" dependencies: "@types/koa" "^2.0.49" "@types/koa-compose" "^3.2.4" @@ -2653,7 +2653,7 @@ "@rush-temp/node-neo-settings@file:./projects/node-neo-settings.tgz": version "0.0.0" - resolved "file:./projects/node-neo-settings.tgz#dbdab791a4f9f1a43bb4484e4d8a19cc75b9d04b" + resolved "file:./projects/node-neo-settings.tgz" dependencies: "@types/bn.js" "^4.11.5" "@types/lodash" "^4.14.138" @@ -2664,7 +2664,7 @@ "@rush-temp/node-network@file:./projects/node-network.tgz": version "0.0.0" - resolved "file:./projects/node-network.tgz#95cbf9268e818b8b394110e97cc553e26d8fcf0c" + resolved "file:./projects/node-network.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2673,7 +2673,7 @@ "@rush-temp/node-offline@file:./projects/node-offline.tgz": version "0.0.0" - resolved "file:./projects/node-offline.tgz#4d45de028e25ccc8b5c4eccc65a1dbbc09f7b807" + resolved "file:./projects/node-offline.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2682,7 +2682,7 @@ "@rush-temp/node-protocol@file:./projects/node-protocol.tgz": version "0.0.0" - resolved "file:./projects/node-protocol.tgz#2e5349e12f1381d2a28eab60b5a9849701b31c79" + resolved "file:./projects/node-protocol.tgz" dependencies: "@types/bloem" "^0.2.0" "@types/bloom-filter" "^0.2.0" @@ -2703,7 +2703,7 @@ "@rush-temp/node-rpc-handler@file:./projects/node-rpc-handler.tgz": version "0.0.0" - resolved "file:./projects/node-rpc-handler.tgz#7270164da7fd074e4b1e3042f831673a9237e8f3" + resolved "file:./projects/node-rpc-handler.tgz" dependencies: gulp "~4.0.2" rxjs "^6.5.3" @@ -2711,7 +2711,7 @@ "@rush-temp/node-storage-cache@file:./projects/node-storage-cache.tgz": version "0.0.0" - resolved "file:./projects/node-storage-cache.tgz#0aaa002700560d169499b13a36a7a365ec966a77" + resolved "file:./projects/node-storage-cache.tgz" dependencies: "@types/lru-cache" "^5.1.0" gulp "~4.0.2" @@ -2720,14 +2720,14 @@ "@rush-temp/node-storage-common@file:./projects/node-storage-common.tgz": version "0.0.0" - resolved "file:./projects/node-storage-common.tgz#5c7c02b713a9b196c1ab9af833b4148d52d9cfbb" + resolved "file:./projects/node-storage-common.tgz" dependencies: 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#0dd2d2d62107d604b948ba05e3c9f5b498c5538a" + resolved "file:./projects/node-storage-levelup.tgz" dependencies: "@types/jest" "^24.0.18" "@types/levelup" "^3.1.1" @@ -2740,7 +2740,7 @@ "@rush-temp/node-tools@file:./projects/node-tools.tgz": version "0.0.0" - resolved "file:./projects/node-tools.tgz#12da66406deea82d34f8ad274be95a3d156fa6d9" + resolved "file:./projects/node-tools.tgz" dependencies: "@google-cloud/storage" "^4.3.2" "@types/fs-extra" "^8.0.0" @@ -2758,7 +2758,7 @@ "@rush-temp/node-vm@file:./projects/node-vm.tgz": version "0.0.0" - resolved "file:./projects/node-vm.tgz#657dc4e4e5d5a7eb8fb20b5e30e8fa2177c07c10" + resolved "file:./projects/node-vm.tgz" dependencies: "@reactivex/ix-es2015-cjs" "^2.5.3" "@reactivex/ix-esnext-esm" "^2.5.3" @@ -2774,7 +2774,7 @@ "@rush-temp/node@file:./projects/node.tgz": version "0.0.0" - resolved "file:./projects/node.tgz#03258ccc322f50e218b6a73966c8ddd3a7a31071" + resolved "file:./projects/node.tgz" dependencies: "@types/abstract-leveldown" "^5.0.1" "@types/fs-extra" "^8.0.0" @@ -2789,7 +2789,7 @@ "@rush-temp/react-common@file:./projects/react-common.tgz": version "0.0.0" - resolved "file:./projects/react-common.tgz#9ddef1cf92803c56fccd9b3bf49caab01bbb5f71" + resolved "file:./projects/react-common.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2809,7 +2809,7 @@ "@rush-temp/react-core@file:./projects/react-core.tgz": version "0.0.0" - resolved "file:./projects/react-core.tgz#c28d0c1c1ccccd13ae87bac0a38ee91d9eee5c95" + resolved "file:./projects/react-core.tgz" dependencies: "@emotion/core" "^10.0.22" "@emotion/styled" "^10.0.23" @@ -2822,7 +2822,7 @@ "@rush-temp/react@file:./projects/react.tgz": version "0.0.0" - resolved "file:./projects/react.tgz#776b9b2de12a7059f25c7a1fbbf5218e85ff07ca" + resolved "file:./projects/react.tgz" dependencies: "@types/react" "^16.0.0" gulp "~4.0.2" @@ -2832,21 +2832,21 @@ "@rush-temp/smart-contract-codegen@file:./projects/smart-contract-codegen.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-codegen.tgz#c28d2b00f39bd090bfb98246b14c9d3caf3f451b" + 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" + prettier "^1.18.2" 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#198a5bc6c41cc29ee21ff8ec35194e271eb1ad07" + resolved "file:./projects/smart-contract-compiler-node.tgz" dependencies: "@types/app-root-dir" "^0.1.0" "@types/glob" "^7.1.1" @@ -2858,7 +2858,7 @@ "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-compiler.tgz#aba2fa3cb817d81d383687f822c1aafe2b7c160b" + resolved "file:./projects/smart-contract-compiler.tgz" dependencies: "@babel/code-frame" "^7.0.0" "@types/app-root-dir" "^0.1.0" @@ -2882,7 +2882,7 @@ "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-lib.tgz#5f19bac9afc2388cfca9d60562da72d83fd1ec9d" + resolved "file:./projects/smart-contract-lib.tgz" dependencies: "@types/jest" "^24.0.18" bignumber.js "^9.0.0" @@ -2891,14 +2891,14 @@ "@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#be6f032cc0848aaba26ee813367e88317cc9eefa" + resolved "file:./projects/smart-contract-test-browser.tgz" dependencies: core-js "^3.2.1" tslib "^1.10.0" "@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#893dfc5793d2035d645ab927426ef3e73c15c2c8" + resolved "file:./projects/smart-contract-test-common.tgz" dependencies: bignumber.js "^9.0.0" gulp "~4.0.2" @@ -2906,7 +2906,7 @@ "@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": version "0.0.0" - resolved "file:./projects/smart-contract-test.tgz#00eed4df031c76aaf288960f84d6a495cec69611" + resolved "file:./projects/smart-contract-test.tgz" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2919,26 +2919,26 @@ "@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#757cb85d39dd14a36e3d7e7a694f5c7677d76e13" + resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: gulp "~4.0.2" typescript "3.8.1-rc" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" - resolved "file:./projects/smart-contract.tgz#e2dda84ffab87ea38b2c27e856e75b03daae4e0a" + resolved "file:./projects/smart-contract.tgz" dependencies: gulp "~4.0.2" "@rush-temp/suite@file:./projects/suite.tgz": version "0.0.0" - resolved "file:./projects/suite.tgz#a0f9d1e3fdad5c6277628c86fbfc483ca5b24fd8" + resolved "file:./projects/suite.tgz" dependencies: gulp "~4.0.2" "@rush-temp/ts-utils@file:./projects/ts-utils.tgz": version "0.0.0" - resolved "file:./projects/ts-utils.tgz#98055594656857f92c4995da380b62df4c2c7cea" + resolved "file:./projects/ts-utils.tgz" dependencies: "@types/lodash" "^4.14.138" gulp "~4.0.2" @@ -2949,7 +2949,7 @@ "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" - resolved "file:./projects/typescript-concatenator.tgz#8f0abd0d9f9f1a5d5bc64ed6ecfe4be37642bcd0" + resolved "file:./projects/typescript-concatenator.tgz" dependencies: "@types/app-root-dir" "^0.1.0" "@types/fs-extra" "^8.0.0" @@ -2968,7 +2968,7 @@ "@rush-temp/utils-node@file:./projects/utils-node.tgz": version "0.0.0" - resolved "file:./projects/utils-node.tgz#5a2c9a00e0e73f09df288526733039eb16cc114d" + resolved "file:./projects/utils-node.tgz" dependencies: "@types/jest" "^24.0.18" "@types/npm-package-arg" "^6.1.0" @@ -2983,7 +2983,7 @@ "@rush-temp/utils@file:./projects/utils.tgz": version "0.0.0" - resolved "file:./projects/utils.tgz#0c7f5247d3de087c03725e664fbd75723c8a0257" + resolved "file:./projects/utils.tgz" dependencies: "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" @@ -2997,7 +2997,7 @@ "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" - resolved "file:./projects/website.tgz#e9049476dd8d0b33618cb42ec16e7b2c39775cbe" + resolved "file:./projects/website.tgz" dependencies: "@babel/runtime" "^7.6.3" "@emotion/core" "^10.0.22" @@ -3066,7 +3066,7 @@ "@rush-temp/worker@file:./projects/worker.tgz": version "0.0.0" - resolved "file:./projects/worker.tgz#1685cf4ac1b6e6d572c78e7ebf9c3534ae79bb1b" + resolved "file:./projects/worker.tgz" dependencies: core-js "^3.2.1" rxjs "^6.5.3" @@ -12991,7 +12991,7 @@ koa-better-body@^3.1.13: formidable "^1.2.1" koa-body-parsers tunnckocore/body-parsers#patch-1 -"koa-body-parsers@github: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" dependencies: @@ -14700,22 +14700,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - 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.4.2" - node-pre-gyp@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" @@ -16425,6 +16409,11 @@ 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.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + prettier@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" @@ -19305,7 +19294,7 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.4.2: +tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -20039,7 +20028,7 @@ typescript@3.8.1-rc: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.1-rc.tgz#f94333c14da70927ccd887be2e91be652a9a09f6" integrity sha512-aOIe066DyZn2uYIiND6fXMUUJ70nxwu/lKhA92QuQzXyC86fr0ywo1qvO8l2m0EnDcfjprYPuFRgNgDj7U2GlQ== -typescript@^3.2.2: +typescript@3.8.3, typescript@^3.2.2: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index 1ed62ae474..717a72e02a 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -78,7 +78,7 @@ "thread-loader": "^2.1.3", "ts-loader": "^6.1.0", "ts-node": "^8.4.1", - "typescript": "3.8.1-rc", + "typescript": "3.8.3", "url-loader": "^3.0.0", "webpack": "^4.40.2", "webpack-bundle-analyzer": "^3.4.1", diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index ab8d4f3238..51f02cf545 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -71,7 +71,7 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "typescript": "3.8.1-rc", + "typescript": "3.8.3", "yargs": "^14.2.0" }, "devDependencies": { diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index eb3595ab24..062fefc2c6 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -50,7 +50,7 @@ "source-map": "^0.7.3", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.8.1-rc", + "typescript": "3.8.3", "yargs": "^14.2.0" }, "devDependencies": { diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index b24723b1ec..50107749b0 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -75,7 +75,7 @@ "styled-tools": "^1.7.1", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.8.1-rc", + "typescript": "3.8.3", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index abe609348d..cd02a618cf 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -28,7 +28,7 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 9ba324142b..7dafd53088 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -18,7 +18,7 @@ "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index bfb4aa2e99..abe16674d1 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -26,7 +26,7 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index 2c90149d3e..f52259a17d 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -14,7 +14,7 @@ "dependencies": { "@neo-one/smart-contract-compiler": "^2.4.0", "@neo-one/smart-contract-compiler-node": "^2.4.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index d422e41398..75625b82ac 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -15,7 +15,7 @@ "lodash": "^4.17.15", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index b01fa0cc26..b3a184ea63 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -17,7 +17,7 @@ "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 4e692d693b..854edcd1f8 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -24,6 +24,6 @@ "@types/lodash": "^4.14.138", "gulp": "~4.0.2", "jest": "^24.9.0", - "typescript": "3.8.1-rc" + "typescript": "3.8.3" } } diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index e39c03037e..1484c4de3c 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -63,7 +63,7 @@ "styled-tools": "^1.7.1", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.8.1-rc", + "typescript": "3.8.3", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" diff --git a/packages/neo-one-website/src/components/Hero.tsx b/packages/neo-one-website/src/components/Hero.tsx index 52221f3d18..d82d2d94e6 100644 --- a/packages/neo-one-website/src/components/Hero.tsx +++ b/packages/neo-one-website/src/components/Hero.tsx @@ -5,7 +5,7 @@ import { prop } from 'styled-tools'; import { Tagline } from '../elements'; // tslint:disable-next-line: no-any -const StyledBackground = styled(Background)` +const StyledBackground = styled(Background)` display: flex; color: ${prop('theme.gray0')}; justify-content: center; 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 3639e18e32..32d5148ceb 100644 --- a/packages/neo-one-website/src/components/course/courses/CoursesView.tsx +++ b/packages/neo-one-website/src/components/course/courses/CoursesView.tsx @@ -9,7 +9,7 @@ import { CourseExplainer } from './CourseExplainer'; import { CourseSection } from './CourseSection'; // tslint:disable-next-line: no-any -const StyledBackground = styled(Background)` +const StyledBackground = styled(Background)` display: flex; color: ${prop('theme.gray0')}; justify-content: center; diff --git a/packages/neo-one-website/src/components/home/Home.tsx b/packages/neo-one-website/src/components/home/Home.tsx index 982ccb5cc3..59b399eefa 100644 --- a/packages/neo-one-website/src/components/home/Home.tsx +++ b/packages/neo-one-website/src/components/home/Home.tsx @@ -11,7 +11,7 @@ import { Proof } from './Proof'; import { Testing } from './Testing'; // tslint:disable-next-line: no-any -const StyledBackground = styled(Background)` +const StyledBackground = styled(Background)` display: grid; place-content: center; place-items: center; From 5f72104adede205e33e23e577a08dc8ae9dc24bc Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 14 May 2020 13:07:22 -0700 Subject: [PATCH 041/141] feat(node): remove opencensus (#2031) --- .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../remove-oc_2020-05-14-19-32.json | 11 + .../node/remove-oc_2020-05-14-19-32.json | 11 + .../utils/remove-oc_2020-05-14-19-32.json | 11 + .../src/provider/JSONRPCHTTPProvider.ts | 70 ++----- .../src/user/UserAccountProviderBase.ts | 122 +---------- packages/neo-one-client-switch/package.json | 8 - .../src/browser/index.ts | 1 - .../src/browser/tracing.ts | 136 ------------- .../neo-one-client-switch/src/node/index.ts | 1 - .../neo-one-client-switch/src/node/tracing.ts | 189 ------------------ packages/neo-one-http-context/src/context.ts | 80 +------- .../neo-one-node-blockchain/src/Blockchain.ts | 106 ---------- packages/neo-one-node-network/src/Network.ts | 94 +-------- packages/neo-one-node-protocol/src/Node.ts | 61 +----- .../src/createHandler.ts | 46 +---- packages/neo-one-node/src/startFullNode.ts | 49 +---- packages/neo-one-utils/src/labels.ts | 17 -- 23 files changed, 134 insertions(+), 945 deletions(-) create mode 100644 common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json create mode 100644 common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json delete mode 100644 packages/neo-one-client-switch/src/browser/tracing.ts delete mode 100644 packages/neo-one-client-switch/src/node/tracing.ts diff --git a/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..e65dea2fa9 --- /dev/null +++ b/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..223cd9ab5c --- /dev/null +++ b/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..e04d302ade --- /dev/null +++ b/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/http-context" + } + ], + "packageName": "@neo-one/http-context", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..7a4f4a9630 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..0c7ffa81fa --- /dev/null +++ b/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/node-network" + } + ], + "packageName": "@neo-one/node-network", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..da8bed873a --- /dev/null +++ b/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..ccead77ad5 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..06e4fd6ea9 --- /dev/null +++ b/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json new file mode 100644 index 0000000000..b897fe29ce --- /dev/null +++ b/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "remove opencensus metrics temporarily", + "type": "major", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts b/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts index 74d91fedba..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,26 +257,20 @@ 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; @@ -315,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/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index c72365537f..ac0737122a 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -43,15 +43,8 @@ import { Witness, WitnessModel, } from '@neo-one/client-common'; -import { - AggregationType, - getTagMap, - globalStats, - Measure, - MeasureUnit, - processActionsAndMessage, -} from '@neo-one/client-switch'; -import { Labels, labelToTag, utils as commonUtils } from '@neo-one/utils'; +import { processActionsAndMessage } from '@neo-one/client-switch'; +import { Labels, utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import debug from 'debug'; import _ from 'lodash'; @@ -72,7 +65,6 @@ import { import { converters } from './converters'; const logger = debug('NEOONE:LocalUserAccountProvider'); -const invokeTag = labelToTag(Labels.INVOKE_RAW_METHOD); export interface InvokeMethodOptions { readonly contract: AddressString; @@ -179,70 +171,6 @@ const NEO_ONE_ATTRIBUTE: Attribute = { 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; } @@ -301,10 +229,6 @@ export abstract class UserAccountProviderBase { return this.capture(async () => this.executeTransfer(transfers, from, attributes, networkFee), { name: 'neo_transfer', - measures: { - total: transferDurationSec, - error: transferFailures, - }, }); } @@ -313,10 +237,6 @@ export abstract class UserAccountProviderBase { return this.capture(async () => this.executeClaim(from, attributes, networkFee), { name: 'neo_claim', - measures: { - total: claimDurationSec, - error: claimFailures, - }, }); } @@ -603,10 +523,6 @@ export abstract class UserAccountProviderBase { }, { name: 'neo_invoke_claim', - measures: { - total: claimDurationSec, - error: claimFailures, - }, }, ); } @@ -1189,58 +1105,28 @@ 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 = await getTagMap(); 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'); } - 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; } @@ -1429,10 +1315,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-switch/package.json b/packages/neo-one-client-switch/package.json index 088a881efd..ad6a800bc3 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -17,14 +17,6 @@ "@neo-one/client-common": "^2.5.0", "@neo-one/node-vm": "^2.4.0", "@neo-one/utils": "^2.4.0", - "@opencensus/core": "^0.0.19", - "@opencensus/exporter-jaeger": "^0.0.19", - "@opencensus/exporter-prometheus": "^0.0.19", - "@opencensus/nodejs-base": "^0.0.19", - "@opencensus/propagation-tracecontext": "^0.0.19", - "@opencensus/web-core": "^0.0.7", - "@opencensus/web-propagation-tracecontext": "^0.0.7", - "@opencensus/web-types": "^0.0.7", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", "source-map": "^0.7.3", diff --git a/packages/neo-one-client-switch/src/browser/index.ts b/packages/neo-one-client-switch/src/browser/index.ts index 11deb78012..3eb308bcfa 100644 --- a/packages/neo-one-client-switch/src/browser/index.ts +++ b/packages/neo-one-client-switch/src/browser/index.ts @@ -2,4 +2,3 @@ export * from './createConsoleLogMessages'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; export * from './LedgerTransport'; -export * from './tracing'; 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 b5bcd88d58..0000000000 --- a/packages/neo-one-client-switch/src/browser/tracing.ts +++ /dev/null @@ -1,136 +0,0 @@ -// tslint:disable no-submodule-imports readonly-keyword readonly-array no-any no-let -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'; - -const noOp = (..._args: readonly any[]): any => { - // -}; - -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: { - extract: noOp, - inject: noOp, - } as any, - eventListeners: [], - start: noOp, - stop: noOp, - registerSpanEventListener: noOp, - unregisterSpanEventListener: noOp, - setCurrentRootSpan: noOp, - onStartSpan: noOp, - onEndSpan: noOp, -}; - -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(); - } - }; -}; - -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, -}; - -export interface PrometheusExporterOptions extends ExporterConfig { - prefix?: string; - port?: number; - startServer?: boolean; -} - -class PrometheusStatsExporter { - public onRegisterView = noOp; - public onRecord = noOp; - public start = noOp; - public stop = noOp; - public stopServer = noOp; - // tslint:disable-next-line: unnecessary-constructor - public constructor(..._args: any[]) { - // do nothing - } -} - -const getPrometheusExporter = async (...args: any[]) => Promise.resolve(new PrometheusStatsExporter(args)); - -export interface JaegerTraceExporterOptions extends ExporterConfig { - serviceName: string; - // tslint:disable-next-line no-any - tags?: any[]; - host?: string; - port?: number; - maxPacketSize?: number; -} - -class JaegerTraceExporter extends NoopExporter { - public constructor(..._args: any[]) { - super(); - } -} - -const getJaegerTraceExporter = async (...args: any[]) => Promise.resolve(new JaegerTraceExporter(args)); - -const getTagMap = async () => Promise.resolve(new TagMap()); - -export { - AggregationType, - Config as TracingConfig, - globalStats, - getJaegerTraceExporter, - Measure, - MeasureUnit, - getPrometheusExporter, - Span, - SpanKind, - startTracing, - getTagMap, - getNewPropagation, - tracer, -}; diff --git a/packages/neo-one-client-switch/src/node/index.ts b/packages/neo-one-client-switch/src/node/index.ts index 11deb78012..3eb308bcfa 100644 --- a/packages/neo-one-client-switch/src/node/index.ts +++ b/packages/neo-one-client-switch/src/node/index.ts @@ -2,4 +2,3 @@ export * from './createConsoleLogMessages'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; export * from './LedgerTransport'; -export * from './tracing'; 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 9af17fbf03..0000000000 --- a/packages/neo-one-client-switch/src/node/tracing.ts +++ /dev/null @@ -1,189 +0,0 @@ -// tslint:disable: no-let no-any -import type { Config, Measure, Span, Stats, StatsEventListener, TracerBase } from '@opencensus/core'; -import type { JaegerTraceExporter, JaegerTraceExporterOptions } from '@opencensus/exporter-jaeger'; -import type { PrometheusExporterOptions, PrometheusStatsExporter } from '@opencensus/exporter-prometheus'; -import type { TraceContextFormat } from '@opencensus/propagation-tracecontext'; - -const noOp = (..._args: readonly any[]): any => { - // -}; - -let tracer: TracerBase = { - sampler: {} as any, - logger: {} as any, - activeTraceParams: {} as any, - propagation: { - extract: noOp, - inject: noOp, - } as any, - eventListeners: [], - active: false, - start: noOp, - stop: noOp, - startRootSpan: (_options: any, func: (root: any) => T) => { - const span = { - addAttribute: noOp, - spanContext: {}, - end: noOp, - }; - - return func(span); - }, - startChildSpan: noOp, - registerSpanEventListener: noOp, - unregisterSpanEventListener: noOp, - setCurrentRootSpan: noOp, - onStartSpan: noOp, - onEndSpan: noOp, -}; - -// enums copied from types directly -enum MeasureUnit { - UNIT = '1', - BYTE = 'by', - KBYTE = 'kb', - SEC = 's', - MS = 'ms', - NS = 'ns', -} - -enum AggregationType { - COUNT = 0, - SUM = 1, - LAST_VALUE = 2, - DISTRIBUTION = 3, -} - -enum SpanKind { - UNSPECIFIED = 0, - SERVER = 1, - CLIENT = 2, -} - -let globalStatsCache: Omit & { - readonly registerExporter?: (listener: StatsEventListener) => void; -} = { - createView: noOp, - registerView: noOp, - createMeasureDouble: noOp, - createMeasureInt64: noOp, - record: noOp, - clear: noOp, - getMetrics: noOp, - registerExporter: noOp, - unregisterExporter: noOp, - withTagContext: noOp, - getCurrentTagContext: noOp, -}; - -let coreImportCache: Promise | undefined; -const globalStats: Omit & { - readonly registerExporter: (listener: StatsEventListener) => Promise; -} = { - createView: globalStatsCache.createView, - registerView: globalStatsCache.registerView, - createMeasureDouble: globalStatsCache.createMeasureDouble, - createMeasureInt64: globalStatsCache.createMeasureInt64, - record: globalStatsCache.record, - clear: globalStatsCache.clear, - getMetrics: globalStatsCache.getMetrics, - registerExporter: async (listener: StatsEventListener) => { - if (coreImportCache === undefined) { - coreImportCache = import('@opencensus/core'); - } - - if (globalStatsCache.registerExporter === undefined) { - const coreImport = await coreImportCache; - globalStatsCache = coreImport.globalStats; - } - - if (globalStatsCache.registerExporter === undefined) { - throw new Error('For TS, should always be defined unless import fails'); - } - - globalStatsCache.registerExporter(listener); - }, - unregisterExporter: globalStatsCache.unregisterExporter, - withTagContext: globalStatsCache.withTagContext, - getCurrentTagContext: globalStatsCache.getCurrentTagContext, -}; - -let TracingBaseCache: Promise | undefined; -const startTracing = async (config: Config) => { - if (TracingBaseCache === undefined) { - TracingBaseCache = import('@opencensus/nodejs-base'); - } - - const { TracingBase } = await TracingBaseCache; - const tracing = TracingBase.instance; - tracing.start(config); - tracer = tracing.tracer; - - return () => { - if (config.exporter !== undefined) { - tracing.unregisterExporter(config.exporter); - } - - tracing.stop(); - }; -}; - -let TraceContextFormatCache: Promise | undefined; -const getNewPropagation = async (): Promise => { - if (TraceContextFormatCache === undefined) { - TraceContextFormatCache = import('@opencensus/propagation-tracecontext'); - } - const { TraceContextFormat: ImportedTraceContextFormat } = await TraceContextFormatCache; - - return new ImportedTraceContextFormat(); -}; - -let JaegerTraceExporterCache: Promise | undefined; -const getJaegerTraceExporter = async (options: JaegerTraceExporterOptions): Promise => { - if (JaegerTraceExporterCache === undefined) { - JaegerTraceExporterCache = import('@opencensus/exporter-jaeger'); - } - - const { JaegerTraceExporter: ImportedJaegerTraceExporter } = await JaegerTraceExporterCache; - - return new ImportedJaegerTraceExporter(options); -}; - -let PrometheusExporterCache: Promise | undefined; -const getPrometheusExporter = async (options: PrometheusExporterOptions): Promise => { - if (PrometheusExporterCache === undefined) { - PrometheusExporterCache = import('@opencensus/exporter-prometheus'); - } - - const { PrometheusStatsExporter: PrometheusExporter } = await PrometheusExporterCache; - - return new PrometheusExporter(options); -}; - -const getTagMap = async () => { - if (coreImportCache === undefined) { - coreImportCache = import('@opencensus/core'); - } - - const { TagMap: ImportTagMap } = await coreImportCache; - - return new ImportTagMap(); -}; - -export { - AggregationType, - Config as TracingConfig, - globalStats, - getJaegerTraceExporter, - JaegerTraceExporterOptions, - getPrometheusExporter, - PrometheusExporterOptions, - Measure, - MeasureUnit, - Span, - SpanKind, - startTracing, - getTagMap, - getNewPropagation, - tracer, -}; diff --git a/packages/neo-one-http-context/src/context.ts b/packages/neo-one-http-context/src/context.ts index 809f8571c9..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, @@ -50,52 +24,18 @@ const getContextLabels = (ctx: Context) => { }; type ContextFunctionType = (logger: Logger) => (ctx: Context, next: () => Promise) => Promise; export const context: ContextFunctionType = (logger) => async (ctx, next) => { - const spanExtract = tracer.propagation.extract({ getHeader: (name: string) => ctx.headers[name] }); - const spanContext = spanExtract !== null ? spanExtract : undefined; - const { spanLabels, logLabels } = getContextLabels(ctx); + 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; + } }; type OnErrorFunctionType = (logger: Logger) => (err: Error, ctx?: Context) => void; diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index ca3af0dbb6..c9fd0f4a5c 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,5 +1,4 @@ import { common, crypto, ECPoint, ScriptBuilder, UInt160, VMState } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit } from '@neo-one/client-switch'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Action, @@ -73,68 +72,6 @@ interface Entry { readonly unsafe: 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 class Blockchain { public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { const [currentBlock, currentHeader] = await Promise.all([ @@ -194,17 +131,6 @@ export class Blockchain { 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.deserializeWireContext = { @@ -613,8 +539,6 @@ 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, @@ -623,37 +547,14 @@ export class Blockchain { try { await this.persistBlockInternal(entryNonNull.block, entryNonNull.unsafe); logger.debug(logData); - globalStats.record([ - { - measure: blockDurationMs, - value: Date.now() - startTime, - }, - ]); } 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(); } @@ -936,13 +837,6 @@ export class Blockchain { // }; private async persistBlockInternal(block: Block, unsafe?: boolean): Promise { - globalStats.record([ - { - measure: blockProgress, - value: block.index, - }, - ]); - if (!unsafe) { await this.verifyBlock(block); } diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index 8e8977fc55..a13b6d9fa6 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; @@ -446,12 +394,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 +407,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 +452,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 +492,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; @@ -590,12 +504,6 @@ export class Network { { [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-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index bbce56affc..b835d32bf3 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -1,5 +1,4 @@ import { common, crypto, UInt256Hex, utils } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit } from '@neo-one/client-switch'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Consensus, ConsensusOptions } from '@neo-one/node-consensus'; import { @@ -24,14 +23,7 @@ import { TransactionType, VerifyTransactionResult, } 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'; @@ -60,39 +52,6 @@ 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; @@ -256,12 +215,6 @@ export class Node implements INode { // tslint:disable-next-line no-dynamic-delete delete this.mutableMemPool[hash]; }); - globalStats.record([ - { - measure: mempoolSize, - value: Object.keys(this.mutableMemPool).length, - }, - ]); } }, TRIM_MEMPOOL_THROTTLE); @@ -406,12 +359,6 @@ export class Node implements INode { if (verified) { this.mutableMemPool[transaction.hashHex] = transaction; - globalStats.record([ - { - measure: mempoolSize, - value: Object.keys(this.mutableMemPool).length, - }, - ]); if (this.mutableConsensus !== undefined) { this.mutableConsensus.onTransactionReceived(transaction); } @@ -875,12 +822,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); } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index aae7e7eb77..e4ceb79add 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,5 +1,4 @@ import { common, crypto, JSONHelper, RelayTransactionResultJSON, TransactionJSON, utils } from '@neo-one/client-common'; -import { AggregationType, getTagMap, globalStats, MeasureUnit } from '@neo-one/client-switch'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Account, @@ -14,7 +13,7 @@ import { TransactionData, TransactionType, } from '@neo-one/node-core'; -import { Labels, labelToTag, utils as commonUtils } from '@neo-one/utils'; +import { Labels } from '@neo-one/utils'; import { filter, switchMap, take, timeout, toArray } from 'rxjs/operators'; const logger = createChild(nodeLogger, { component: 'rpc-handler' }); @@ -94,30 +93,6 @@ 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 createJSONRPCHandler = (handlers: Handlers) => { // tslint:disable-next-line no-any const validateRequest = (request: any): JSONRPCRequest => { @@ -138,7 +113,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 +150,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 +157,6 @@ const createJSONRPCHandler = (handlers: Handlers) => { }; } catch (err) { logger.error({ name: 'jsonrpc_server_single_request', ...labels, err }); - const tags = await getTagMap(); - tags.set(rpcTag, { value: method }); - globalStats.record( - [ - { - measure: requestErrors, - value: 1, - }, - ], - tags, - ); throw err; } diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index 1cb197cafa..bf41b526e4 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -1,13 +1,3 @@ -import { - getJaegerTraceExporter, - getNewPropagation, - getPrometheusExporter, - globalStats, - JaegerTraceExporterOptions, - PrometheusExporterOptions, - 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'; @@ -29,9 +19,6 @@ export interface LoggingOptions { export interface TelemetryOptions { readonly logging?: LoggingOptions; - readonly prometheus?: Omit; - readonly jaeger?: Omit; - readonly tracing?: Omit; } export interface Options { @@ -67,40 +54,8 @@ export const startFullNode = async ({ 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 = await getPrometheusExporter({ - ...telemetry.prometheus, - startServer: true, - }); - - await 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 = await getJaegerTraceExporter({ - ...telemetry.jaeger, - serviceName: 'NEO-ONE', - }); - - const propagation = await getNewPropagation(); - const stopTracing = await startTracing({ - ...telemetry.tracing, - propagation, - exporter, - }); - - 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; 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); - }); -}; From 42b8a57b0f0b432c22cb94aff6ea103aa8696c6c Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 14 May 2020 15:20:50 -0700 Subject: [PATCH 042/141] fix(cli): remove the 'SourceMapConsumer.initialize' warning (#2030) --- .../fixup-cli-errors_2020-05-14-20-06.json | 11 +++++++++++ .../src/browser/createConsoleLogMessages.ts | 2 ++ packages/neo-one-client-switch/src/browser/index.ts | 1 + .../src/{common => browser}/initializeSourceMap.ts | 0 .../src/browser/processActionsAndMessage.ts | 3 +++ .../src/browser/processConsoleLogMessages.ts | 2 ++ .../src/common/createConsoleLogMessages.ts | 2 -- packages/neo-one-client-switch/src/common/index.ts | 1 - .../src/common/processActionsAndMessage.ts | 2 -- .../src/common/processConsoleLogMessages.ts | 2 -- packages/neo-one-client-switch/src/index.browser.ts | 1 - packages/neo-one-client-switch/src/index.ts | 1 - packages/neo-one-client-switch/src/node/index.ts | 1 + .../src/node/initializeSourceMap.ts | 3 +++ 14 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json rename packages/neo-one-client-switch/src/{common => browser}/initializeSourceMap.ts (100%) create mode 100644 packages/neo-one-client-switch/src/node/initializeSourceMap.ts diff --git a/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json b/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json new file mode 100644 index 0000000000..daac415532 --- /dev/null +++ b/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix SourceMapConsumer CLI warning message", + "type": "minor", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-client-switch/src/browser/createConsoleLogMessages.ts b/packages/neo-one-client-switch/src/browser/createConsoleLogMessages.ts index 9682152545..867b8b9b10 100644 --- a/packages/neo-one-client-switch/src/browser/createConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/browser/createConsoleLogMessages.ts @@ -1,5 +1,6 @@ import { RawAction } from '@neo-one/client-common'; import { createConsoleLogMessages as createConsoleLogMessagesBase, LogOptions, SourceMaps } from '../common'; +import { initializeSourceMap } from './initializeSourceMap'; export const createConsoleLogMessages = async ( actions: readonly RawAction[], @@ -9,6 +10,7 @@ export const createConsoleLogMessages = async ( if (process.env.NODE_ENV === 'production' && process.env.NEO_ONE_DEV !== 'true') { return []; } + initializeSourceMap(); return createConsoleLogMessagesBase(actions, sourceMaps, options); }; diff --git a/packages/neo-one-client-switch/src/browser/index.ts b/packages/neo-one-client-switch/src/browser/index.ts index 3eb308bcfa..b0d7a4b36e 100644 --- a/packages/neo-one-client-switch/src/browser/index.ts +++ b/packages/neo-one-client-switch/src/browser/index.ts @@ -1,4 +1,5 @@ export * from './createConsoleLogMessages'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; +export * from './initializeSourceMap'; export * from './LedgerTransport'; diff --git a/packages/neo-one-client-switch/src/common/initializeSourceMap.ts b/packages/neo-one-client-switch/src/browser/initializeSourceMap.ts similarity index 100% rename from packages/neo-one-client-switch/src/common/initializeSourceMap.ts rename to packages/neo-one-client-switch/src/browser/initializeSourceMap.ts diff --git a/packages/neo-one-client-switch/src/browser/processActionsAndMessage.ts b/packages/neo-one-client-switch/src/browser/processActionsAndMessage.ts index f6b0affea1..c0af20f684 100644 --- a/packages/neo-one-client-switch/src/browser/processActionsAndMessage.ts +++ b/packages/neo-one-client-switch/src/browser/processActionsAndMessage.ts @@ -1,9 +1,12 @@ import { processActionsAndMessage as processActionsAndMessageBase, ProcessActionsAndMessageOptions } from '../common'; +import { initializeSourceMap } from './initializeSourceMap'; export const processActionsAndMessage = async (options: ProcessActionsAndMessageOptions): Promise => { 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/common/createConsoleLogMessages.ts b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts index 87e4e72b61..ce27edbd61 100644 --- a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts @@ -3,7 +3,6 @@ import { deserializeStackItem, StackItem } from '@neo-one/node-vm'; import { utils } from '@neo-one/utils'; import _ from 'lodash'; import { SourceMaps } from '../common'; -import { initializeSourceMap } from './initializeSourceMap'; import { processTrace } from './processTrace'; export interface LogOptions { @@ -154,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 3eb308bcfa..31fd8aaf58 100644 --- a/packages/neo-one-client-switch/src/node/index.ts +++ b/packages/neo-one-client-switch/src/node/index.ts @@ -2,3 +2,4 @@ export * from './createConsoleLogMessages'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; export * from './LedgerTransport'; +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 +}; From 0d94f548d8bca86ef984e43aaf68c4f3c7e7a468 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 19 May 2020 23:36:08 -0700 Subject: [PATCH 043/141] feat(rush): update npm release process (#2034) --- .circleci/config.yml | 4 +- .gitignore | 6 ++- .huskyrc.js | 17 ++++--- .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../cli/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../client/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../http/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../logger/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../node-vm/rush-export_2020-05-18-21-51.json | 11 ++++ .../node/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../react/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../suite/rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../rush-export_2020-05-18-21-51.json | 11 ++++ .../utils/rush-export_2020-05-18-21-51.json | 11 ++++ common/config/rush/command-line.json | 28 ++++------ packages/neo-one-build-tools-web/gulpfile.js | 4 +- packages/neo-one-build-tools-web/package.json | 2 +- .../src/webpack/tools.ts | 2 +- ...{neo-one-publish.js => neo-one-prepare.js} | 5 +- packages/neo-one-build-tools/gulpfile.js | 4 +- .../build-configs/tsconfig.esnext.esm.json | 6 ++- .../includes/tsconfig.dev.json | 2 +- packages/neo-one-build-tools/package.json | 2 +- packages/neo-one-build-tools/src/build.ts | 33 +++--------- .../src/builds/buildBin.ts | 2 +- .../src/builds/buildTypescript.ts | 2 +- .../src/builds/rollupDevTools.ts | 4 +- packages/neo-one-build-tools/src/clean.ts | 13 ++++- packages/neo-one-build-tools/src/formats.ts | 17 +------ packages/neo-one-build-tools/src/pack.ts | 51 ------------------- packages/neo-one-build-tools/src/prepare.ts | 26 ++++++++++ packages/neo-one-build-tools/src/publish.ts | 46 ----------------- packages/neo-one-cli-common-node/.npmignore | 22 ++++++++ packages/neo-one-cli-common-node/package.json | 3 +- packages/neo-one-cli-common/.npmignore | 22 ++++++++ packages/neo-one-cli-common/package.json | 3 +- packages/neo-one-cli/.npmignore | 22 ++++++++ packages/neo-one-cli/bin/neo-one.js | 2 +- packages/neo-one-cli/package.json | 2 +- packages/neo-one-client-common/.npmignore | 22 ++++++++ packages/neo-one-client-common/package.json | 3 +- packages/neo-one-client-core/.npmignore | 22 ++++++++ packages/neo-one-client-core/package.json | 3 +- .../neo-one-client-full-common/.npmignore | 22 ++++++++ .../neo-one-client-full-common/package.json | 3 +- packages/neo-one-client-full-core/.npmignore | 22 ++++++++ .../neo-one-client-full-core/package.json | 3 +- packages/neo-one-client-full/.npmignore | 22 ++++++++ packages/neo-one-client-full/package.json | 3 +- packages/neo-one-client-switch/.npmignore | 22 ++++++++ packages/neo-one-client-switch/package.json | 5 +- packages/neo-one-client/.npmignore | 22 ++++++++ packages/neo-one-client/package.json | 3 +- .../package.json | 2 +- packages/neo-one-developer-tools/.npmignore | 22 ++++++++ packages/neo-one-developer-tools/package.json | 3 +- .../src/DeveloperToolsDev.ts | 2 +- packages/neo-one-http-context/.npmignore | 22 ++++++++ packages/neo-one-http-context/package.json | 3 +- packages/neo-one-http/.npmignore | 22 ++++++++ packages/neo-one-http/package.json | 3 +- packages/neo-one-logger-config/.npmignore | 22 ++++++++ packages/neo-one-logger-config/package.json | 3 +- packages/neo-one-logger/.npmignore | 22 ++++++++ packages/neo-one-logger/package.json | 3 +- packages/neo-one-node-bin/.npmignore | 22 ++++++++ packages/neo-one-node-bin/bin/neo-one-node.js | 2 +- packages/neo-one-node-blockchain/.npmignore | 22 ++++++++ packages/neo-one-node-blockchain/package.json | 3 +- packages/neo-one-node-consensus/.npmignore | 22 ++++++++ packages/neo-one-node-consensus/package.json | 3 +- packages/neo-one-node-core/.npmignore | 22 ++++++++ packages/neo-one-node-core/package.json | 3 +- packages/neo-one-node-http-rpc/.npmignore | 22 ++++++++ packages/neo-one-node-http-rpc/package.json | 3 +- packages/neo-one-node-neo-settings/.npmignore | 22 ++++++++ .../neo-one-node-neo-settings/package.json | 3 +- packages/neo-one-node-network/.npmignore | 22 ++++++++ packages/neo-one-node-network/package.json | 3 +- packages/neo-one-node-offline/.npmignore | 22 ++++++++ packages/neo-one-node-offline/package.json | 3 +- packages/neo-one-node-protocol/.npmignore | 22 ++++++++ packages/neo-one-node-protocol/package.json | 3 +- packages/neo-one-node-rpc-handler/.npmignore | 22 ++++++++ .../neo-one-node-rpc-handler/package.json | 3 +- .../neo-one-node-storage-cache/.npmignore | 22 ++++++++ .../neo-one-node-storage-cache/package.json | 3 +- .../neo-one-node-storage-common/.npmignore | 22 ++++++++ .../neo-one-node-storage-common/package.json | 3 +- .../neo-one-node-storage-levelup/.npmignore | 22 ++++++++ .../neo-one-node-storage-levelup/package.json | 3 +- .../neo-one-node-tools/bin/node-restore.js | 2 +- packages/neo-one-node-vm/.npmignore | 22 ++++++++ packages/neo-one-node-vm/package.json | 3 +- packages/neo-one-node/.npmignore | 22 ++++++++ packages/neo-one-node/package.json | 3 +- packages/neo-one-react-common/.npmignore | 22 ++++++++ packages/neo-one-react-common/gulpfile.js | 2 +- packages/neo-one-react-common/package.json | 3 +- packages/neo-one-react-core/.npmignore | 22 ++++++++ packages/neo-one-react-core/package.json | 3 +- packages/neo-one-react/.npmignore | 22 ++++++++ packages/neo-one-react/package.json | 3 +- .../neo-one-smart-contract-codegen/.npmignore | 22 ++++++++ .../package.json | 3 +- .../.npmignore | 22 ++++++++ .../package.json | 3 +- .../.npmignore | 22 ++++++++ .../package.json | 3 +- .../neo-one-smart-contract-lib/.npmignore | 21 ++++++++ .../neo-one-smart-contract-lib/gulpfile.js | 9 ---- .../neo-one-smart-contract-lib/package.json | 9 ++-- .../.npmignore | 22 ++++++++ .../package.json | 3 +- .../neo-one-smart-contract-test/.npmignore | 22 ++++++++ .../neo-one-smart-contract-test/package.json | 3 +- .../.npmignore | 22 ++++++++ .../package.json | 3 +- packages/neo-one-smart-contract/.npmignore | 21 ++++++++ packages/neo-one-smart-contract/gulpfile.js | 9 ---- packages/neo-one-smart-contract/package.json | 11 ++-- packages/neo-one-suite/.npmignore | 22 ++++++++ packages/neo-one-ts-utils/.npmignore | 22 ++++++++ packages/neo-one-ts-utils/package.json | 3 +- .../.npmignore | 22 ++++++++ .../package.json | 3 +- packages/neo-one-utils-node/.npmignore | 22 ++++++++ packages/neo-one-utils-node/package.json | 3 +- packages/neo-one-utils/.npmignore | 22 ++++++++ packages/neo-one-utils/package.json | 3 +- scripts/try-publish | 13 ----- 166 files changed, 1705 insertions(+), 277 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json create mode 100644 common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json rename packages/neo-one-build-tools/bin/{neo-one-publish.js => neo-one-prepare.js} (70%) delete mode 100644 packages/neo-one-build-tools/src/pack.ts create mode 100644 packages/neo-one-build-tools/src/prepare.ts delete mode 100644 packages/neo-one-build-tools/src/publish.ts create mode 100644 packages/neo-one-cli-common-node/.npmignore create mode 100644 packages/neo-one-cli-common/.npmignore create mode 100644 packages/neo-one-cli/.npmignore create mode 100644 packages/neo-one-client-common/.npmignore create mode 100644 packages/neo-one-client-core/.npmignore create mode 100644 packages/neo-one-client-full-common/.npmignore create mode 100644 packages/neo-one-client-full-core/.npmignore create mode 100644 packages/neo-one-client-full/.npmignore create mode 100644 packages/neo-one-client-switch/.npmignore create mode 100644 packages/neo-one-client/.npmignore create mode 100644 packages/neo-one-developer-tools/.npmignore create mode 100644 packages/neo-one-http-context/.npmignore create mode 100644 packages/neo-one-http/.npmignore create mode 100644 packages/neo-one-logger-config/.npmignore create mode 100644 packages/neo-one-logger/.npmignore create mode 100644 packages/neo-one-node-bin/.npmignore create mode 100644 packages/neo-one-node-blockchain/.npmignore create mode 100644 packages/neo-one-node-consensus/.npmignore create mode 100644 packages/neo-one-node-core/.npmignore create mode 100644 packages/neo-one-node-http-rpc/.npmignore create mode 100644 packages/neo-one-node-neo-settings/.npmignore create mode 100644 packages/neo-one-node-network/.npmignore create mode 100644 packages/neo-one-node-offline/.npmignore create mode 100644 packages/neo-one-node-protocol/.npmignore create mode 100644 packages/neo-one-node-rpc-handler/.npmignore create mode 100644 packages/neo-one-node-storage-cache/.npmignore create mode 100644 packages/neo-one-node-storage-common/.npmignore create mode 100644 packages/neo-one-node-storage-levelup/.npmignore create mode 100644 packages/neo-one-node-vm/.npmignore create mode 100644 packages/neo-one-node/.npmignore create mode 100644 packages/neo-one-react-common/.npmignore create mode 100644 packages/neo-one-react-core/.npmignore create mode 100644 packages/neo-one-react/.npmignore create mode 100644 packages/neo-one-smart-contract-codegen/.npmignore create mode 100644 packages/neo-one-smart-contract-compiler-node/.npmignore create mode 100644 packages/neo-one-smart-contract-compiler/.npmignore create mode 100644 packages/neo-one-smart-contract-lib/.npmignore delete mode 100644 packages/neo-one-smart-contract-lib/gulpfile.js create mode 100644 packages/neo-one-smart-contract-test-common/.npmignore create mode 100644 packages/neo-one-smart-contract-test/.npmignore create mode 100644 packages/neo-one-smart-contract-typescript-plugin/.npmignore create mode 100644 packages/neo-one-smart-contract/.npmignore delete mode 100644 packages/neo-one-smart-contract/gulpfile.js create mode 100644 packages/neo-one-suite/.npmignore create mode 100644 packages/neo-one-ts-utils/.npmignore create mode 100644 packages/neo-one-typescript-concatenator/.npmignore create mode 100644 packages/neo-one-utils-node/.npmignore create mode 100644 packages/neo-one-utils/.npmignore delete mode 100755 scripts/try-publish diff --git a/.circleci/config.yml b/.circleci/config.yml index 99ebd62129..e5b3214d26 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -66,7 +66,7 @@ aliases: root: ~/neo-one paths: - common/temp/node_modules - - packages/*/lib + - packages/*/dist - packages/*/node_modules - &test10 @@ -107,7 +107,7 @@ aliases: root: ~/neo-one paths: - common/temp/node_modules - - packages/*/lib + - packages/*/dist - packages/*/node_modules - &test12 diff --git a/.gitignore b/.gitignore index 89dd881d41..37a5d424e3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,13 +5,17 @@ /dist/ /build/ /tmp -/packages/*/lib +/packages/*/dist .rpt2_cache /reports .nyc_output .awcache .cache-loader +# Release Files +/packages/*/LICENSE +/packages/*/README.md + # Playground /packages/neo-one-playground diff --git a/.huskyrc.js b/.huskyrc.js index 78bf36e386..30cf4d6908 100644 --- a/.huskyrc.js +++ b/.huskyrc.js @@ -2,11 +2,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', + 'post-checkout': 'rush install', + }; + module.exports = { - hooks: { - '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', - 'post-checkout': 'rush install', - }, + hooks, }; diff --git a/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..1245437de2 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/cli-common-node" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..2272b64068 --- /dev/null +++ b/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/cli-common" + } + ], + "packageName": "@neo-one/cli-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..b28243addb --- /dev/null +++ b/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..94b2181552 --- /dev/null +++ b/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..c385541ff0 --- /dev/null +++ b/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..93898b0497 --- /dev/null +++ b/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-full-common" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..507b6b3ea7 --- /dev/null +++ b/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-full-core" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..1c83647d40 --- /dev/null +++ b/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-full" + } + ], + "packageName": "@neo-one/client-full", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..c5a49c9aa8 --- /dev/null +++ b/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..c913cf5724 --- /dev/null +++ b/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/client" + } + ], + "packageName": "@neo-one/client", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..8551c99d9b --- /dev/null +++ b/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/developer-tools" + } + ], + "packageName": "@neo-one/developer-tools", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..f463aaa3e4 --- /dev/null +++ b/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/http-context" + } + ], + "packageName": "@neo-one/http-context", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..bbfc908ad3 --- /dev/null +++ b/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/http" + } + ], + "packageName": "@neo-one/http", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..60a37d0a71 --- /dev/null +++ b/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/logger-config" + } + ], + "packageName": "@neo-one/logger-config", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..7a0d07460e --- /dev/null +++ b/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/logger" + } + ], + "packageName": "@neo-one/logger", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..f048d9cc9f --- /dev/null +++ b/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-bin" + } + ], + "packageName": "@neo-one/node-bin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..f14806b36a --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..5f67a5dbf2 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-consensus" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..adad1197d9 --- /dev/null +++ b/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..40c4fd0e7e --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-http-rpc" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..2f84a2d4e3 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-neo-settings" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..50faa6c3a1 --- /dev/null +++ b/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-network" + } + ], + "packageName": "@neo-one/node-network", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..81c5096271 --- /dev/null +++ b/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-offline" + } + ], + "packageName": "@neo-one/node-offline", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..4c922708f5 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..ee7ff82c4e --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..5c2bdfc688 --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-storage-cache" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..05850b9213 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-storage-common" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..23471791a8 --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-storage-levelup" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..b2259a513a --- /dev/null +++ b/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node-vm" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..143fb6890d --- /dev/null +++ b/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..28fe7030a2 --- /dev/null +++ b/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/react-common" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..11a515e57f --- /dev/null +++ b/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/react-core" + } + ], + "packageName": "@neo-one/react-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..a0bf684265 --- /dev/null +++ b/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/react" + } + ], + "packageName": "@neo-one/react", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..cbcf2a49eb --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-codegen" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..ebe6e90f4c --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-compiler-node" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..3aa19cdda7 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-compiler" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..ccf2fe3e2f --- /dev/null +++ b/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-lib" + } + ], + "packageName": "@neo-one/smart-contract-lib", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..eeacefc6e7 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-test-common" + } + ], + "packageName": "@neo-one/smart-contract-test-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..3155661dfc --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-test" + } + ], + "packageName": "@neo-one/smart-contract-test", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..20bf9c6359 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract-typescript-plugin" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..7fb7b642bb --- /dev/null +++ b/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/smart-contract" + } + ], + "packageName": "@neo-one/smart-contract", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..d08373e816 --- /dev/null +++ b/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/suite" + } + ], + "packageName": "@neo-one/suite", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..bf3851c894 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/ts-utils" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..3dcaa54c8f --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/typescript-concatenator" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..4d00e7802e --- /dev/null +++ b/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/utils-node" + } + ], + "packageName": "@neo-one/utils-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json new file mode 100644 index 0000000000..777e12380a --- /dev/null +++ b/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "update package release process to take better advantage of rush tooling", + "type": "minor", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 8210ad534c..f26ba7d353 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -248,6 +248,14 @@ "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", @@ -302,24 +310,6 @@ "ignoreDependencyOrder": true, "enableParallelism": true, "ignoreMissingScript": true - }, - { - "commandKind": "bulk", - "name": "pack", - "summary": "pack built files into 'dist'", - "description": "transform sources and other files for npm exporting", - "safeForSimultaneousRushProcesses": false, - "ignoreDependencyOrder": true, - "enableParallelism": true, - "ignoreMissingScript": true - }, - { - "commandKind": "global", - "name": "release", - "summary": "release packed packages with given format", - "description": "try to publish packages in `dist`", - "safeForSimultaneousRushProcesses": false, - "shellCommand": "node packages/neo-one-build-tools/bin/neo-one-publish.js" } ], "parameters": [ @@ -406,7 +396,7 @@ "longName": "--format", "shortName": "-b", "description": "specify an output build format (main, esm, browserify)", - "associatedCommands": ["build", "rebuild", "pack", "release"], + "associatedCommands": ["build", "rebuild"], "alternatives": [ { "name": "main", diff --git a/packages/neo-one-build-tools-web/gulpfile.js b/packages/neo-one-build-tools-web/gulpfile.js index 10a96aeaeb..2512157326 100644 --- a/packages/neo-one-build-tools-web/gulpfile.js +++ b/packages/neo-one-build-tools-web/gulpfile.js @@ -16,14 +16,14 @@ const flattenSource = gulpRename((name) => { .join(path.sep); }); -const clean = async () => fs.remove('lib'); +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('lib')); + .pipe(gulp.dest('dist')); gulp.task('default', async (done) => { await clean(); diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index 717a72e02a..67e574281f 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -2,7 +2,7 @@ "name": "@neo-one/build-tools-web", "version": "1.0.0", "description": "NEO•ONE web build tools.", - "main": "./lib/index", + "main": "./dist/index", "license": "MIT", "scripts": { "build": "gulp", diff --git a/packages/neo-one-build-tools-web/src/webpack/tools.ts b/packages/neo-one-build-tools-web/src/webpack/tools.ts index 1e2aaa343a..10b6039c9a 100644 --- a/packages/neo-one-build-tools-web/src/webpack/tools.ts +++ b/packages/neo-one-build-tools-web/src/webpack/tools.ts @@ -6,7 +6,7 @@ import { plugins } from './plugins'; 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, 'lib'); +const DIST_DIR = path.resolve(TOOLS_PACKAGE, 'dist'); export const tools = ({ stage }: { readonly stage: Stage }): webpack.Configuration => ({ ...common({ stage, bundle: 'tools' }), diff --git a/packages/neo-one-build-tools/bin/neo-one-publish.js b/packages/neo-one-build-tools/bin/neo-one-prepare.js similarity index 70% rename from packages/neo-one-build-tools/bin/neo-one-publish.js rename to packages/neo-one-build-tools/bin/neo-one-prepare.js index 70e4ae6aa1..318039f101 100644 --- a/packages/neo-one-build-tools/bin/neo-one-publish.js +++ b/packages/neo-one-build-tools/bin/neo-one-prepare.js @@ -1,9 +1,10 @@ #!/usr/bin/env node const path = require('path'); + require('ts-node').register({ transpileOnly: true, project: path.resolve(__dirname, '..', 'tsconfig.json'), }); -const publisher = require('../src/publish.ts'); +const runner = require('../src/prepare.ts'); -publisher.publish(); +runner.prepare(); diff --git a/packages/neo-one-build-tools/gulpfile.js b/packages/neo-one-build-tools/gulpfile.js index a6e49980e4..a702e20cec 100644 --- a/packages/neo-one-build-tools/gulpfile.js +++ b/packages/neo-one-build-tools/gulpfile.js @@ -16,14 +16,14 @@ const flattenSource = gulpRename((name) => { .join(path.sep); }); -const clean = async () => fs.remove('lib'); +const clean = async () => fs.remove('dist'); const buildTools = () => gulp .src(['src/**/*.js', 'src/**/*.ts']) .pipe(ts.createProject('./tsconfig.json')()) .pipe(flattenSource) - .pipe(gulp.dest('lib')); + .pipe(gulp.dest('dist')); gulp.task('default', async (done) => { await clean(); 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 index d43a90962f..adb1db63d3 100644 --- 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 @@ -1,6 +1,10 @@ { "extends": "./tsconfig.esm.json", "compilerOptions": { - "target": "esnext" + "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.dev.json b/packages/neo-one-build-tools/includes/tsconfig.dev.json index 7bd957ddca..d6605a43a6 100644 --- a/packages/neo-one-build-tools/includes/tsconfig.dev.json +++ b/packages/neo-one-build-tools/includes/tsconfig.dev.json @@ -6,5 +6,5 @@ "@neo-one/*": ["../neo-one-*/src"] } }, - "exclude": ["./node_modules", "./lib", "./src/__data__/contracts/**/*.ts", "./template/**/*.ts?(x)"] + "exclude": ["./node_modules", "./dist", "./src/__data__/contracts/**/*.ts", "./template/**/*.ts?(x)"] } diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index 51f02cf545..6c3e782f44 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -2,7 +2,7 @@ "name": "@neo-one/build-tools", "version": "1.0.0", "description": "NEO•ONE build tools.", - "main": "./lib/index", + "main": "./dist/index", "license": "MIT", "bin": { "neo-one-lint": "bin/neo-one-lint.js", diff --git a/packages/neo-one-build-tools/src/build.ts b/packages/neo-one-build-tools/src/build.ts index ef2d91172f..9bd44dc66c 100644 --- a/packages/neo-one-build-tools/src/build.ts +++ b/packages/neo-one-build-tools/src/build.ts @@ -5,7 +5,6 @@ import { Format, getFormat } from './formats'; import { buildBin, buildTypescript, rollupDevTools, CompileTypescriptOptions } from './builds'; import yargs from 'yargs'; import { getPackageInfo } from './utils'; -import { pack, copyData, packBin } from './pack'; const defaultBuildFormat = process.env.NEO_ONE_BUILD_FORMAT !== undefined ? process.env.NEO_ONE_BUILD_FORMAT : 'main'; @@ -66,9 +65,11 @@ class BuildTask { interface CopyStaticOptions { readonly dest: string; } + export const copyStaticTask = new BuildTask( - () => (glob, options) => { - gulp.src(glob, { nodir: true }).pipe(gulp.dest(options !== undefined ? options.dest : 'lib')); + (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), ); @@ -79,24 +80,18 @@ export const compileTypescriptTask = new BuildTask( ['src/**/*.ts', 'src/**/*.tsx'].concat(ignoreGlobs), ); -export const cleanTask = async () => Promise.all([fs.remove('lib')]); - export const rollupToolsTask = new BuildTask(rollupDevTools, []); rollupToolsTask.enabled = false; export const compileBinTask = new BuildTask(buildBin); -export const copyDataTask = new BuildTask(copyData); - -export const packTask = new BuildTask(pack, ['lib/**', '!lib/**/*.map']); - -export const packBinTask = new BuildTask(packBin); +export const formatString = argv.format; export const initialize = () => { - const format = getFormat(argv.format); + const format = getFormat(formatString); gulp.task('clean', async () => { - await fs.remove('lib').then(() => fs.ensureDir('lib')); + await fs.remove(`dist/${format.dist}`).then(() => fs.ensureDir(`dist`)); }); gulp.task('copyStatic', async () => { @@ -115,19 +110,5 @@ export const initialize = () => { await rollupToolsTask.execute(format); }); - gulp.task('copyData', async () => { - await copyDataTask.execute(format); - }); - - gulp.task('pack', async () => { - await packTask.execute(format); - }); - - gulp.task('packBin', async () => { - await packBinTask.execute(format); - }); - gulp.task('default', gulp.series('clean', 'copyStatic', 'compileTS', 'compileBin', 'rollupTools')); - - gulp.task('pack', gulp.series('copyData', 'pack', 'packBin')); }; diff --git a/packages/neo-one-build-tools/src/builds/buildBin.ts b/packages/neo-one-build-tools/src/builds/buildBin.ts index aaf90af176..f47ec506d4 100644 --- a/packages/neo-one-build-tools/src/builds/buildBin.ts +++ b/packages/neo-one-build-tools/src/builds/buildBin.ts @@ -43,7 +43,7 @@ const compileBin = (format: Format, binGlob: string) => { .pipe(flattenBin) .pipe(gulpReplaceBin()) .pipe(gulpSourcemaps.write('.', { includeContent: false, sourceRoot: '../src' })) - .pipe(gulp.dest('lib')); + .pipe(gulp.dest('dist/cjs')); }; export const buildBin = (format: Format) => () => { diff --git a/packages/neo-one-build-tools/src/builds/buildTypescript.ts b/packages/neo-one-build-tools/src/builds/buildTypescript.ts index ea8ced4ab0..f4c659aedc 100644 --- a/packages/neo-one-build-tools/src/builds/buildTypescript.ts +++ b/packages/neo-one-build-tools/src/builds/buildTypescript.ts @@ -48,5 +48,5 @@ export const buildTypescript = (format: Format, pkgName?: string) => ( .pipe(flattenSource) .pipe(gulpSourcemaps.write('.', { includeContent: false, sourceRoot: '../src' })) .pipe(filterJS(isToolsPackage)), - ).pipe(gulp.dest('lib')); + ).pipe(gulp.dest(`dist/${format.dist}`)); }; diff --git a/packages/neo-one-build-tools/src/builds/rollupDevTools.ts b/packages/neo-one-build-tools/src/builds/rollupDevTools.ts index 0df8ebd4d9..2a3789537c 100644 --- a/packages/neo-one-build-tools/src/builds/rollupDevTools.ts +++ b/packages/neo-one-build-tools/src/builds/rollupDevTools.ts @@ -14,7 +14,7 @@ export const rollupDevTools = (format: Format) => async () => { external: ['resize-observer-polyfill'], plugins: [ rollupString.string({ - include: path.join(APP_ROOT_DIR, 'neo-one-developer-tools-frame', 'lib', 'tools.raw.js'), + 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), @@ -32,6 +32,6 @@ export const rollupDevTools = (format: Format) => async () => { await bundle.write({ format: format.module, - file: path.join('lib', 'index.js'), + file: path.join('dist', format.dist, 'index.js'), }); }; diff --git a/packages/neo-one-build-tools/src/clean.ts b/packages/neo-one-build-tools/src/clean.ts index 568559844a..1155c94930 100644 --- a/packages/neo-one-build-tools/src/clean.ts +++ b/packages/neo-one-build-tools/src/clean.ts @@ -36,8 +36,8 @@ const deleteAll = (modules: readonly string[]): void => { if (argv.full) { logger(`Removing /.rush: ${path.resolve(dir, '.rush')}`); fs.removeSync(path.resolve(dir, '.rush')); - logger(`Removing /lib: ${path.resolve(dir, 'lib')}`); - fs.removeSync(path.resolve(dir, 'lib')); + logger(`Removing /dist: ${path.resolve(dir, 'dist')}`); + fs.removeSync(path.resolve(dir, 'dist')); } const filesInPackage = fs.readdirSync(dir); filesInPackage.forEach((file) => { @@ -45,6 +45,15 @@ const deleteAll = (modules: readonly string[]): void => { 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.'); diff --git a/packages/neo-one-build-tools/src/formats.ts b/packages/neo-one-build-tools/src/formats.ts index 61e0443f40..c3f2a7eba7 100644 --- a/packages/neo-one-build-tools/src/formats.ts +++ b/packages/neo-one-build-tools/src/formats.ts @@ -15,7 +15,7 @@ const MAIN_FORMAT: Format = { target: 'es2017', module: 'cjs', browser: false, - dist: 'main', + dist: 'cjs', name: '', packageDir: process.cwd(), tsconfig: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.cjs.json'), @@ -26,32 +26,19 @@ const NEXT_FORMAT: Format = { target: 'esnext', module: 'esm', browser: false, - dist: 'next', + 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'), }; -const BROWSERIFY_FORMAT: Format = { - target: 'es2017', - module: 'cjs', - browser: true, - dist: 'browser', - name: 'browserify', - packageDir: process.cwd(), - tsconfig: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.browserify.cjs.json'), - tsconfigESM: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.esm.json'), -}; - export const getFormat = (requestedFormat: string) => { switch (requestedFormat) { case 'main': return MAIN_FORMAT; case 'next': return NEXT_FORMAT; - case 'browserify': - return BROWSERIFY_FORMAT; default: throw new Error(`invalid requested format: ${requestedFormat}`); } diff --git a/packages/neo-one-build-tools/src/pack.ts b/packages/neo-one-build-tools/src/pack.ts deleted file mode 100644 index 983f412de9..0000000000 --- a/packages/neo-one-build-tools/src/pack.ts +++ /dev/null @@ -1,51 +0,0 @@ -import fs from 'fs-extra'; -// tslint:disable-next-line: match-default-export-name -import gulp from 'gulp'; -import path from 'path'; -import { Format } from './formats'; -import { getName, getPackageJSON, gulpReplaceBinPack, gulpReplaceInternalSources, transformPackage } from './utils'; - -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); - -const getPackageDist = (format: Format, pkgName: string) => - path.resolve(APP_ROOT_DIR, 'dist', format.dist, getName(format, pkgName.slice(1).replace('/', '-'))); - -const getTransformSources = (format: Format, internalDeps: readonly string[]) => (glob: string[]) => - gulpReplaceInternalSources(format, internalDeps, gulp.src(glob)); - -const transformPackageJSON = async (format: Format, pkgName: string) => { - const packageJSON = await getPackageJSON(); - await fs.writeFile( - path.resolve(getPackageDist(format, pkgName), 'package.json'), - JSON.stringify(transformPackage(format, packageJSON), undefined, 2), - 'utf-8', - ); -}; - -const copyMetaData = async (format: Format, pkgName: string) => { - const packageDist = getPackageDist(format, pkgName); - - return Promise.all([ - fs.copyFile(path.resolve(APP_ROOT_DIR, 'LICENSE'), path.resolve(packageDist, 'LICENSE')), - fs.copyFile(path.resolve(APP_ROOT_DIR, 'README.md'), path.resolve(packageDist, 'README.md')), - ]); -}; - -export const copyData = (format: Format, pkgName: string) => async () => { - const packageDist = getPackageDist(format, pkgName); - await fs.ensureDir(packageDist); - await Promise.all([transformPackageJSON(format, pkgName), copyMetaData(format, pkgName)]); -}; - -export const pack = (format: Format, pkgName: string, dependencies: readonly string[]) => { - const transformSources = getTransformSources(format, dependencies); - - return (glob: string[]) => transformSources(glob).pipe(gulp.dest(getPackageDist(format, pkgName))); -}; - -export const packBin = (format: Format, pkgName: string) => () => { - gulp - .src('bin/**') - .pipe(gulpReplaceBinPack()) - .pipe(gulp.dest(path.resolve(getPackageDist(format, pkgName), 'bin'))); -}; 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..d80049ce29 --- /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')); +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/publish.ts b/packages/neo-one-build-tools/src/publish.ts deleted file mode 100644 index 8853674b9e..0000000000 --- a/packages/neo-one-build-tools/src/publish.ts +++ /dev/null @@ -1,46 +0,0 @@ -import execa from 'execa'; -import fs from 'fs-extra'; -import path from 'path'; -import yargs from 'yargs'; -import { Format, getFormat } from './formats'; -import { getName } from './utils'; - -const defaultReleaseFormat = process.env.NEO_ONE_BUILD_FORMAT !== undefined ? process.env.NEO_ONE_BUILD_FORMAT : 'main'; - -const { argv } = yargs - .string('format') - .choices('format', ['main', 'next', 'browserify']) - .default('format', defaultReleaseFormat); - -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); -const rushJSON = fs.readJsonSync(path.resolve(APP_ROOT_DIR, 'rush.json')); -const PUBLISH_SCRIPT = path.resolve(APP_ROOT_DIR, 'scripts', 'try-publish'); - -// tslint:disable: no-any -const packages: readonly string[] = rushJSON.projects - .filter((project: any) => project.shouldPublish) - .map((project: any) => project.projectFolder.slice('packages/'.length)); -// tslint:enable no-any - -const publishPackage = async (format: Format, pkgName: string) => { - const packageDist = path.resolve(APP_ROOT_DIR, 'dist', format.dist, getName(format, pkgName)); - const packageExists = await fs.pathExists(packageDist); - - if (!packageExists) { - throw new Error(`no publishable package found at ${packageDist}`); - } - - await execa(PUBLISH_SCRIPT, { - cwd: packageDist, - stdio: ['ignore', 'inherit', 'inherit'], - }); -}; - -export const publish = async () => { - const format = getFormat(argv.format); - await packages.reduce>(async (promise, pkg) => { - await promise; - - return publishPackage(format, pkg); - }, Promise.resolve()); -}; 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/package.json b/packages/neo-one-cli-common-node/package.json index 7e8259c2ac..8bc549ffc7 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/cli-common-node", "version": "2.5.0", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", - "main": "./lib/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", 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/package.json b/packages/neo-one-cli-common/package.json index 71b8277db3..78064a6a77 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/cli-common", "version": "2.5.0", "description": "NEO•ONE code common to the cli and browser.", - "main": "./lib/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", 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/bin/neo-one.js b/packages/neo-one-cli/bin/neo-one.js index d31938c725..efbbf54a8d 100644 --- a/packages/neo-one-cli/bin/neo-one.js +++ b/packages/neo-one-cli/bin/neo-one.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('../lib/neo-one.js'); +require('../dist/cjs/neo-one.js'); diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 062fefc2c6..b0e0da1e60 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -2,7 +2,7 @@ "name": "@neo-one/cli", "version": "2.5.0", "description": "NEO•ONE CLI for developing NEO dapps.", - "main": "./lib/index", + "main": "./dist/cjs/index", "scripts": { "build": "gulp", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", 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/package.json b/packages/neo-one-client-common/package.json index 5af7524f35..eb158e81e7 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client-common", "version": "2.5.0", "description": "NEO•ONE client common code.", - "main": "./lib/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", 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/package.json b/packages/neo-one-client-core/package.json index 6066e838f1..235461e7d4 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client-core", "version": "2.5.0", "description": "NEO•ONE client core types implementation.", - "main": "./lib/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", 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/package.json b/packages/neo-one-client-full-common/package.json index fd6d6ff9c4..5295100438 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client-full-common", "version": "2.4.0", "description": "NEO•ONE full client common code.", - "main": "./lib/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", 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/package.json b/packages/neo-one-client-full-core/package.json index 3d1caa15e9..69fa86515d 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client-full-core", "version": "2.4.1", "description": "NEO•ONE client-full core types implementation.", - "main": "./lib/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", diff --git a/packages/neo-one-client-full/.npmignore b/packages/neo-one-client-full/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-full/.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/package.json b/packages/neo-one-client-full/package.json index 0f091e8ab1..0cd9177e82 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client-full", "version": "2.4.0", "description": "NEO•ONE client extended API.", - "main": "./lib/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", diff --git a/packages/neo-one-client-switch/.npmignore b/packages/neo-one-client-switch/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-switch/.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-switch/package.json b/packages/neo-one-client-switch/package.json index ad6a800bc3..a827ad82b3 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -2,8 +2,9 @@ "name": "@neo-one/client-switch", "version": "2.4.0", "description": "NEO•ONE client library for browser/node differences.", - "main": "./lib/index", - "browser": "./lib/index.browser", + "main": "./dist/cjs/index", + "browser": "./dist/cjs/index.browser", + "module": "./dist/esm/index", "scripts": { "build": "gulp", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", 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/package.json b/packages/neo-one-client/package.json index f9eb327549..bb10bb2e6d 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/client", "version": "2.5.0", "description": "NEO•ONE client API.", - "main": "./lib/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", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 7a4619a19d..5504e92289 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -4,7 +4,7 @@ "description": "NEO•ONE developer tools.", "license": "MIT", "scripts": { - "build": "node ./node_modules/@neo-one/build-tools-web/lib/compile --bundle tools", + "build": "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" 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/package.json b/packages/neo-one-developer-tools/package.json index b20a596fae..b96d689ac8 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/developer-tools", "version": "2.4.0", "description": "NEO•ONE developer tools.", - "main": "./lib/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", diff --git a/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts b/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts index 614e7437e4..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 '@neo-one/developer-tools-frame/lib/tools.raw.js'; +import iframeScript from '@neo-one/developer-tools-frame/dist/tools.raw.js'; // tslint:enable // tslint:disable no-let 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/package.json b/packages/neo-one-http-context/package.json index b05628168b..d5c5a26d13 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/http-context", "version": "2.4.0", "description": "NEO•ONE http context utilities.", - "main": "./lib/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", 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/package.json b/packages/neo-one-http/package.json index cf93c0ada5..67442730c5 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/http", "version": "2.4.0", "description": "NEO•ONE http utilities.", - "main": "./lib/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", 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/package.json b/packages/neo-one-logger-config/package.json index 4bbbfc6b54..7f408f27e5 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/logger-config", "version": "2.4.0", "description": "NEO•ONE logging utility config", - "main": "./lib/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", 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/package.json b/packages/neo-one-logger/package.json index 82b959f347..d006c88480 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/logger", "version": "2.4.0", "description": "NEO•ONE logging utility", - "main": "./lib/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", 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/bin/neo-one-node.js b/packages/neo-one-node-bin/bin/neo-one-node.js index a864933205..5c2363d5f1 100644 --- a/packages/neo-one-node-bin/bin/neo-one-node.js +++ b/packages/neo-one-node-bin/bin/neo-one-node.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('../lib/neo-one-node.js'); +require('../dist/cjs/neo-one-node.js'); 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/package.json b/packages/neo-one-node-blockchain/package.json index 91c45a11a7..02c873e670 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-blockchain", "version": "2.4.0", "description": "NEO•ONE NEO blockchain implementation.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-consensus/package.json index fad97c6944..33ec9c27b1 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-consensus", "version": "2.4.0", "description": "NEO•ONE NEO consensus protocol.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-core/package.json index ff7b5c2bce..0aac0b3c77 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-core", "version": "2.4.0", "description": "NEO•ONE core node types.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-http-rpc/package.json index 9d5d65c902..b3f6fa202a 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-http-rpc", "version": "2.4.0", "description": "NEO•ONE RPC server.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-neo-settings/package.json index 69e32a0eac..c0e76d784f 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-neo-settings", "version": "2.4.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-network/package.json index 37b1ecc1f0..61885b9db6 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-network", "version": "2.4.0", "description": "NEO•ONE NEO network protocol.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-offline/package.json index 9ea7a92ad2..f636b3d4b4 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-offline", "version": "2.4.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-protocol/package.json index 04bdf4bfe7..1aed984cc0 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-protocol", "version": "2.4.0", "description": "NEO•ONE NEO node and consensus protocol.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-rpc-handler/package.json index 9afaec821d..eb214c3ff2 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-rpc-handler", "version": "2.4.0", "description": "NEO•ONE RPC handler.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-storage-cache/package.json index 7c7253be42..395ee3961f 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-storage-cache", "version": "2.4.0", "description": "NEO•ONE node storage cache.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-storage-common/package.json index 646131c618..2273cca7aa 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-storage-common", "version": "2.4.0", "description": "NEO•ONE node storage common.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node-storage-levelup/package.json index c6c04ea6f8..f1b98ce956 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-storage-levelup", "version": "2.4.0", "description": "NEO•ONE levelup node storage.", - "main": "./lib/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", diff --git a/packages/neo-one-node-tools/bin/node-restore.js b/packages/neo-one-node-tools/bin/node-restore.js index e4bff693b9..5e0dc065e7 100644 --- a/packages/neo-one-node-tools/bin/node-restore.js +++ b/packages/neo-one-node-tools/bin/node-restore.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -require('../lib/node-restore.js'); +require('../dist/cjs/node-restore.js'); diff --git a/packages/neo-one-node-vm/.npmignore b/packages/neo-one-node-vm/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-vm/.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-vm/package.json b/packages/neo-one-node-vm/package.json index a2cbf06b7f..5e9bcca11c 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node-vm", "version": "2.4.0", "description": "NEO•ONE NEO VM.", - "main": "./lib/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", 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/package.json b/packages/neo-one-node/package.json index 7a95160a94..5019fb9a4d 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/node", "version": "2.4.0", "description": "NEO•ONE NEO full node.", - "main": "./lib/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", 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/gulpfile.js b/packages/neo-one-react-common/gulpfile.js index 0cad9e9036..f27612b01b 100644 --- a/packages/neo-one-react-common/gulpfile.js +++ b/packages/neo-one-react-common/gulpfile.js @@ -5,7 +5,7 @@ const path = require('path'); build.copyStaticTask.glob = ['static/**/*']; build.copyStaticTask.options = { - dest: path.join('lib', 'static'), + dest: 'static', }; build.copyStaticTask.enabled = true; diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index 37fee2208b..e07b58f01f 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/react-common", "version": "2.4.0", "description": "NEO•ONE shared react.", - "main": "./lib/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", 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/package.json b/packages/neo-one-react-core/package.json index 98adf26061..615ea743c6 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/react-core", "version": "2.4.0", "description": "NEO•ONE shared react.", - "main": "./lib/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", 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/package.json b/packages/neo-one-react/package.json index 77cf09937a..e461da56c0 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/react", "version": "2.4.0", "description": "NEO•ONE React utilities.", - "main": "./lib/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", 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/package.json b/packages/neo-one-smart-contract-codegen/package.json index 1b9e491d12..188d694d6f 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-codegen", "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract codegen.", - "main": "./lib/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", 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/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 7dafd53088..e8f9402a34 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-compiler-node", "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", - "main": "./lib/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", 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/package.json b/packages/neo-one-smart-contract-compiler/package.json index abe16674d1..b9dda9e0d7 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-compiler", "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract compiler.", - "main": "./lib/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", 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/gulpfile.js b/packages/neo-one-smart-contract-lib/gulpfile.js deleted file mode 100644 index 89b00f3052..0000000000 --- a/packages/neo-one-smart-contract-lib/gulpfile.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.copyStaticTask.enabled = true; - -build.compileTypescriptTask.enabled = false; - -build.initialize(); diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 6fa5e5adda..c48afd1234 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -2,23 +2,20 @@ "name": "@neo-one/smart-contract-lib", "version": "2.4.0", "description": "NEO•ONE TypeScript common smart contracts.", - "main": "./lib/index.ts", + "main": "./src/index.ts", "smartContract": true, "scripts": { - "build": "gulp", - "lint": "", - "pack": "gulp pack" + "build": "", + "lint": "" }, "dependencies": { "@neo-one/smart-contract": "^2.4.0" }, "devDependencies": { - "@neo-one/build-tools": "^1.0.0", "@neo-one/client-common": "^2.5.0", "@neo-one/client-core": "^2.5.0", "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", - "gulp": "~4.0.2", "tslib": "^1.10.0" }, "sideEffects": false 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/package.json b/packages/neo-one-smart-contract-test-common/package.json index 41a165a3d9..6aea1efa16 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-test-common", "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract test harness common code.", - "main": "./lib/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", 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/package.json b/packages/neo-one-smart-contract-test/package.json index 867fc50726..8b47da226a 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-test", "version": "2.4.0", "description": "NEO•ONE TypeScript smart contract test harness.", - "main": "./lib/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", 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/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index f52259a17d..eaa8b1247c 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/smart-contract-typescript-plugin", "version": "2.4.0", "description": "NEO•ONE TypeScript typescript plugin.", - "main": "./lib/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", 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/gulpfile.js b/packages/neo-one-smart-contract/gulpfile.js deleted file mode 100644 index 89b00f3052..0000000000 --- a/packages/neo-one-smart-contract/gulpfile.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.copyStaticTask.enabled = true; - -build.compileTypescriptTask.enabled = false; - -build.initialize(); diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index bd3cf9d25e..190734ec14 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -2,15 +2,10 @@ "name": "@neo-one/smart-contract", "version": "2.4.0", "description": "NEO•ONE smart contract apis.", - "main": "./lib/index.d.ts", + "main": "./src/index.d.ts", "scripts": { - "build": "gulp", - "lint": "", - "pack": "gulp pack" - }, - "devDependencies": { - "@neo-one/build-tools": "^1.0.0", - "gulp": "~4.0.2" + "build": "", + "lint": "" }, "smartContract": true, "sideEffects": false diff --git a/packages/neo-one-suite/.npmignore b/packages/neo-one-suite/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-suite/.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/.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/package.json b/packages/neo-one-ts-utils/package.json index 75625b82ac..15b0d31dd6 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/ts-utils", "version": "2.4.0", "description": "NEO•ONE TypeScript utils.", - "main": "./lib/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", 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/package.json b/packages/neo-one-typescript-concatenator/package.json index b3a184ea63..a17a93bd95 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/typescript-concatenator", "version": "2.4.0", "description": "NEO•ONE TypeScript Concatenator", - "main": "./lib/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", 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/package.json b/packages/neo-one-utils-node/package.json index fd41534bef..0ec00309ba 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/utils-node", "version": "2.4.0", "description": "NEO•ONE shared Nodejs utils.", - "main": "./lib/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", 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/package.json b/packages/neo-one-utils/package.json index 854edcd1f8..7f4941fcf7 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -2,7 +2,8 @@ "name": "@neo-one/utils", "version": "2.4.0", "description": "NEO•ONE shared utils.", - "main": "./lib/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", "license": "MIT", "scripts": { "build": "gulp", diff --git a/scripts/try-publish b/scripts/try-publish deleted file mode 100755 index 43ab64a732..0000000000 --- a/scripts/try-publish +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e -# pwd -package=$(cat package.json | node ../../../common/temp/node_modules/.bin/json name) -version=$(cat package.json | node ../../../common/temp/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 From 26b772e4a4998f2389d62e597338264e14bbc8d3 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 20 May 2020 00:11:15 -0700 Subject: [PATCH 044/141] release --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../cli/prettier_2020-03-22-23-31.json | 11 --- .../cli/rush-export_2020-05-18-21-51.json | 11 --- .../cli/update-ts-dep_2020-05-04-22-59.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../fixup-cli-errors_2020-05-14-20-06.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../client/rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../http/rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../logger/rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../node-core/prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../remove-oc_2020-05-14-19-32.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../node-vm/prettier_2020-03-22-23-31.json | 11 --- .../node-vm/rush-export_2020-05-18-21-51.json | 11 --- .../node/remove-oc_2020-05-14-19-32.json | 11 --- .../node/rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../react/rush-export_2020-05-18-21-51.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../update-ts-dep_2020-05-04-22-59.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../update-ts-dep_2020-05-04-22-59.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../update-ts-dep_2020-05-04-22-59.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../suite/rush-export_2020-05-18-21-51.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../update-ts-dep_2020-05-04-22-59.json | 11 --- .../prettier_2020-03-22-23-31.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../update-ts-dep_2020-05-04-22-59.json | 11 --- .../rush-export_2020-05-18-21-51.json | 11 --- .../utils/remove-oc_2020-05-14-19-32.json | 11 --- .../utils/rush-export_2020-05-18-21-51.json | 11 --- .../utils/update-ts-dep_2020-05-04-22-59.json | 11 --- packages/neo-one-build-tests/package.json | 2 +- .../neo-one-cli-common-node/CHANGELOG.json | 23 ++++++ packages/neo-one-cli-common-node/CHANGELOG.md | 9 ++- packages/neo-one-cli-common-node/package.json | 8 +- packages/neo-one-cli-common/CHANGELOG.json | 26 +++++++ packages/neo-one-cli-common/CHANGELOG.md | 9 ++- packages/neo-one-cli-common/package.json | 10 +-- packages/neo-one-cli/CHANGELOG.json | 74 +++++++++++++++++++ packages/neo-one-cli/CHANGELOG.md | 9 ++- packages/neo-one-cli/package.json | 42 +++++------ packages/neo-one-client-common/CHANGELOG.json | 17 +++++ packages/neo-one-client-common/CHANGELOG.md | 9 ++- packages/neo-one-client-common/package.json | 4 +- packages/neo-one-client-core/CHANGELOG.json | 26 +++++++ packages/neo-one-client-core/CHANGELOG.md | 10 ++- packages/neo-one-client-core/package.json | 8 +- .../neo-one-client-full-common/CHANGELOG.json | 20 +++++ .../neo-one-client-full-common/CHANGELOG.md | 9 ++- .../neo-one-client-full-common/package.json | 6 +- .../neo-one-client-full-core/CHANGELOG.json | 32 ++++++++ .../neo-one-client-full-core/CHANGELOG.md | 9 ++- .../neo-one-client-full-core/package.json | 14 ++-- packages/neo-one-client-full/CHANGELOG.json | 20 +++++ packages/neo-one-client-full/CHANGELOG.md | 9 ++- packages/neo-one-client-full/package.json | 6 +- packages/neo-one-client-switch/CHANGELOG.json | 29 ++++++++ packages/neo-one-client-switch/CHANGELOG.md | 11 ++- packages/neo-one-client-switch/package.json | 8 +- packages/neo-one-client/CHANGELOG.json | 23 ++++++ packages/neo-one-client/CHANGELOG.md | 9 ++- packages/neo-one-client/package.json | 8 +- .../package.json | 10 +-- .../neo-one-developer-tools/CHANGELOG.json | 17 +++++ packages/neo-one-developer-tools/CHANGELOG.md | 9 ++- packages/neo-one-developer-tools/package.json | 4 +- packages/neo-one-editor-server/package.json | 8 +- packages/neo-one-editor/package.json | 12 +-- packages/neo-one-http-context/CHANGELOG.json | 26 +++++++ packages/neo-one-http-context/CHANGELOG.md | 10 ++- packages/neo-one-http-context/package.json | 8 +- packages/neo-one-http/CHANGELOG.json | 12 +++ packages/neo-one-http/CHANGELOG.md | 9 ++- packages/neo-one-http/package.json | 2 +- packages/neo-one-local-browser/package.json | 12 +-- packages/neo-one-logger-config/CHANGELOG.json | 12 +++ packages/neo-one-logger-config/CHANGELOG.md | 9 ++- packages/neo-one-logger-config/package.json | 2 +- packages/neo-one-logger/CHANGELOG.json | 17 +++++ packages/neo-one-logger/CHANGELOG.md | 9 ++- packages/neo-one-logger/package.json | 4 +- packages/neo-one-node-bin/CHANGELOG.json | 35 +++++++++ packages/neo-one-node-bin/CHANGELOG.md | 9 ++- packages/neo-one-node-bin/package.json | 16 ++-- .../neo-one-node-blockchain/CHANGELOG.json | 32 ++++++++ packages/neo-one-node-blockchain/CHANGELOG.md | 10 ++- packages/neo-one-node-blockchain/package.json | 12 +-- packages/neo-one-node-browser/package.json | 20 ++--- .../neo-one-node-consensus/CHANGELOG.json | 26 +++++++ packages/neo-one-node-consensus/CHANGELOG.md | 9 ++- packages/neo-one-node-consensus/package.json | 10 +-- packages/neo-one-node-core/CHANGELOG.json | 23 ++++++ packages/neo-one-node-core/CHANGELOG.md | 9 ++- packages/neo-one-node-core/package.json | 8 +- packages/neo-one-node-http-rpc/CHANGELOG.json | 35 +++++++++ packages/neo-one-node-http-rpc/CHANGELOG.md | 9 ++- packages/neo-one-node-http-rpc/package.json | 16 ++-- .../neo-one-node-neo-settings/CHANGELOG.json | 23 ++++++ .../neo-one-node-neo-settings/CHANGELOG.md | 9 ++- .../neo-one-node-neo-settings/package.json | 8 +- packages/neo-one-node-network/CHANGELOG.json | 29 ++++++++ packages/neo-one-node-network/CHANGELOG.md | 10 ++- packages/neo-one-node-network/package.json | 10 +-- packages/neo-one-node-offline/CHANGELOG.json | 23 ++++++ packages/neo-one-node-offline/CHANGELOG.md | 9 ++- packages/neo-one-node-offline/package.json | 8 +- packages/neo-one-node-protocol/CHANGELOG.json | 35 +++++++++ packages/neo-one-node-protocol/CHANGELOG.md | 10 ++- packages/neo-one-node-protocol/package.json | 14 ++-- .../neo-one-node-rpc-handler/CHANGELOG.json | 32 ++++++++ .../neo-one-node-rpc-handler/CHANGELOG.md | 10 ++- .../neo-one-node-rpc-handler/package.json | 12 +-- .../neo-one-node-storage-cache/CHANGELOG.json | 26 +++++++ .../neo-one-node-storage-cache/CHANGELOG.md | 9 ++- .../neo-one-node-storage-cache/package.json | 10 +-- .../CHANGELOG.json | 23 ++++++ .../neo-one-node-storage-common/CHANGELOG.md | 9 ++- .../neo-one-node-storage-common/package.json | 8 +- .../CHANGELOG.json | 26 +++++++ .../neo-one-node-storage-levelup/CHANGELOG.md | 9 ++- .../neo-one-node-storage-levelup/package.json | 10 +-- packages/neo-one-node-tools/package.json | 4 +- packages/neo-one-node-vm/CHANGELOG.json | 26 +++++++ packages/neo-one-node-vm/CHANGELOG.md | 9 ++- packages/neo-one-node-vm/package.json | 10 +-- packages/neo-one-node/CHANGELOG.json | 50 +++++++++++++ packages/neo-one-node/CHANGELOG.md | 10 ++- packages/neo-one-node/package.json | 24 +++--- packages/neo-one-react-common/CHANGELOG.json | 17 +++++ packages/neo-one-react-common/CHANGELOG.md | 9 ++- packages/neo-one-react-common/package.json | 4 +- packages/neo-one-react-core/CHANGELOG.json | 12 +++ packages/neo-one-react-core/CHANGELOG.md | 9 ++- packages/neo-one-react-core/package.json | 2 +- packages/neo-one-react/CHANGELOG.json | 12 +++ packages/neo-one-react/CHANGELOG.md | 9 ++- packages/neo-one-react/package.json | 2 +- .../CHANGELOG.json | 26 +++++++ .../CHANGELOG.md | 9 ++- .../package.json | 10 +-- .../CHANGELOG.json | 23 ++++++ .../CHANGELOG.md | 9 ++- .../package.json | 8 +- .../CHANGELOG.json | 56 ++++++++++++++ .../CHANGELOG.md | 9 ++- .../package.json | 30 ++++---- .../neo-one-smart-contract-lib/CHANGELOG.json | 23 ++++++ .../neo-one-smart-contract-lib/CHANGELOG.md | 9 ++- .../neo-one-smart-contract-lib/package.json | 8 +- .../package.json | 6 +- .../CHANGELOG.json | 35 +++++++++ .../CHANGELOG.md | 9 ++- .../package.json | 16 ++-- .../CHANGELOG.json | 41 ++++++++++ .../neo-one-smart-contract-test/CHANGELOG.md | 9 ++- .../neo-one-smart-contract-test/package.json | 20 ++--- .../CHANGELOG.json | 20 +++++ .../CHANGELOG.md | 9 ++- .../package.json | 6 +- .../neo-one-smart-contract/CHANGELOG.json | 12 +++ packages/neo-one-smart-contract/CHANGELOG.md | 9 ++- packages/neo-one-smart-contract/package.json | 2 +- packages/neo-one-suite/CHANGELOG.json | 32 ++++++++ packages/neo-one-suite/CHANGELOG.md | 9 ++- packages/neo-one-suite/package.json | 14 ++-- packages/neo-one-ts-utils/CHANGELOG.json | 12 +++ packages/neo-one-ts-utils/CHANGELOG.md | 9 ++- packages/neo-one-ts-utils/package.json | 2 +- .../CHANGELOG.json | 23 ++++++ .../CHANGELOG.md | 9 ++- .../package.json | 8 +- packages/neo-one-utils-node/CHANGELOG.json | 17 +++++ packages/neo-one-utils-node/CHANGELOG.md | 9 ++- packages/neo-one-utils-node/package.json | 4 +- packages/neo-one-utils/CHANGELOG.json | 15 ++++ packages/neo-one-utils/CHANGELOG.md | 10 ++- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 8 +- 222 files changed, 1837 insertions(+), 1136 deletions(-) delete mode 100644 common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json delete mode 100644 common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json delete mode 100644 common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json delete mode 100644 common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json delete mode 100644 common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json diff --git a/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 1245437de2..0000000000 --- a/common/changes/@neo-one/cli-common-node/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/cli-common-node" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 2272b64068..0000000000 --- a/common/changes/@neo-one/cli-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/cli-common" - } - ], - "packageName": "@neo-one/cli-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json deleted file mode 100644 index 2acd363556..0000000000 --- a/common/changes/@neo-one/cli/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json deleted file mode 100644 index b28243addb..0000000000 --- a/common/changes/@neo-one/cli/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/cli" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index 2acd363556..0000000000 --- a/common/changes/@neo-one/cli/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json deleted file mode 100644 index 4d1e4ee6f0..0000000000 --- a/common/changes/@neo-one/client-common/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 94b2181552..0000000000 --- a/common/changes/@neo-one/client-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-common" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json deleted file mode 100644 index fbcc29da87..0000000000 --- a/common/changes/@neo-one/client-core/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index e65dea2fa9..0000000000 --- a/common/changes/@neo-one/client-core/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json deleted file mode 100644 index c385541ff0..0000000000 --- a/common/changes/@neo-one/client-core/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 93898b0497..0000000000 --- a/common/changes/@neo-one/client-full-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-full-common" - } - ], - "packageName": "@neo-one/client-full-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 507b6b3ea7..0000000000 --- a/common/changes/@neo-one/client-full-core/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-full-core" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 1c83647d40..0000000000 --- a/common/changes/@neo-one/client-full/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-full" - } - ], - "packageName": "@neo-one/client-full", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json b/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json deleted file mode 100644 index daac415532..0000000000 --- a/common/changes/@neo-one/client-switch/fixup-cli-errors_2020-05-14-20-06.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "fix SourceMapConsumer CLI warning message", - "type": "minor", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json deleted file mode 100644 index 1474609a2c..0000000000 --- a/common/changes/@neo-one/client-switch/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-switch", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-switch", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index 223cd9ab5c..0000000000 --- a/common/changes/@neo-one/client-switch/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json deleted file mode 100644 index c5a49c9aa8..0000000000 --- a/common/changes/@neo-one/client-switch/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json deleted file mode 100644 index c913cf5724..0000000000 --- a/common/changes/@neo-one/client/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/client" - } - ], - "packageName": "@neo-one/client", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 8551c99d9b..0000000000 --- a/common/changes/@neo-one/developer-tools/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/developer-tools" - } - ], - "packageName": "@neo-one/developer-tools", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index e04d302ade..0000000000 --- a/common/changes/@neo-one/http-context/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/http-context" - } - ], - "packageName": "@neo-one/http-context", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json deleted file mode 100644 index f463aaa3e4..0000000000 --- a/common/changes/@neo-one/http-context/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/http-context" - } - ], - "packageName": "@neo-one/http-context", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json deleted file mode 100644 index bbfc908ad3..0000000000 --- a/common/changes/@neo-one/http/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/http" - } - ], - "packageName": "@neo-one/http", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 60a37d0a71..0000000000 --- a/common/changes/@neo-one/logger-config/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/logger-config" - } - ], - "packageName": "@neo-one/logger-config", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 7a0d07460e..0000000000 --- a/common/changes/@neo-one/logger/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/logger" - } - ], - "packageName": "@neo-one/logger", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json deleted file mode 100644 index f048d9cc9f..0000000000 --- a/common/changes/@neo-one/node-bin/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-bin" - } - ], - "packageName": "@neo-one/node-bin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json deleted file mode 100644 index 6660c5f267..0000000000 --- a/common/changes/@neo-one/node-blockchain/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-blockchain", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index 7a4f4a9630..0000000000 --- a/common/changes/@neo-one/node-blockchain/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/node-blockchain" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json deleted file mode 100644 index f14806b36a..0000000000 --- a/common/changes/@neo-one/node-blockchain/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-blockchain" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json deleted file mode 100644 index 71a68db642..0000000000 --- a/common/changes/@neo-one/node-consensus/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-consensus", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 5f67a5dbf2..0000000000 --- a/common/changes/@neo-one/node-consensus/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-consensus" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json deleted file mode 100644 index 9fa56bb055..0000000000 --- a/common/changes/@neo-one/node-core/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json deleted file mode 100644 index adad1197d9..0000000000 --- a/common/changes/@neo-one/node-core/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-core" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 40c4fd0e7e..0000000000 --- a/common/changes/@neo-one/node-http-rpc/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-http-rpc" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 2f84a2d4e3..0000000000 --- a/common/changes/@neo-one/node-neo-settings/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-neo-settings" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index 0c7ffa81fa..0000000000 --- a/common/changes/@neo-one/node-network/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/node-network" - } - ], - "packageName": "@neo-one/node-network", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 50faa6c3a1..0000000000 --- a/common/changes/@neo-one/node-network/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-network" - } - ], - "packageName": "@neo-one/node-network", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 81c5096271..0000000000 --- a/common/changes/@neo-one/node-offline/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-offline" - } - ], - "packageName": "@neo-one/node-offline", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index da8bed873a..0000000000 --- a/common/changes/@neo-one/node-protocol/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/node-protocol" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 4c922708f5..0000000000 --- a/common/changes/@neo-one/node-protocol/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-protocol" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json deleted file mode 100644 index b659d6fe7a..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-rpc-handler", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index ccead77ad5..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/node-rpc-handler" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json deleted file mode 100644 index ee7ff82c4e..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-rpc-handler" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 5c2bdfc688..0000000000 --- a/common/changes/@neo-one/node-storage-cache/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-storage-cache" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 05850b9213..0000000000 --- a/common/changes/@neo-one/node-storage-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-storage-common" - } - ], - "packageName": "@neo-one/node-storage-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 23471791a8..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-storage-levelup" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json deleted file mode 100644 index 22f1d17899..0000000000 --- a/common/changes/@neo-one/node-vm/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-vm", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-vm", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json deleted file mode 100644 index b2259a513a..0000000000 --- a/common/changes/@neo-one/node-vm/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node-vm" - } - ], - "packageName": "@neo-one/node-vm", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index 06e4fd6ea9..0000000000 --- a/common/changes/@neo-one/node/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/node" - } - ], - "packageName": "@neo-one/node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 143fb6890d..0000000000 --- a/common/changes/@neo-one/node/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/node" - } - ], - "packageName": "@neo-one/node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 28fe7030a2..0000000000 --- a/common/changes/@neo-one/react-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/react-common" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 11a515e57f..0000000000 --- a/common/changes/@neo-one/react-core/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/react-core" - } - ], - "packageName": "@neo-one/react-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json deleted file mode 100644 index a0bf684265..0000000000 --- a/common/changes/@neo-one/react/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/react" - } - ], - "packageName": "@neo-one/react", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json deleted file mode 100644 index 71600abe5b..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-codegen", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json deleted file mode 100644 index cbcf2a49eb..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-codegen" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json deleted file mode 100644 index ebe6e90f4c..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-compiler-node" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index cadb1dba76..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler-node", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json deleted file mode 100644 index 6cb5ee4751..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 3aa19cdda7..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-compiler" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index 6cb5ee4751..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json deleted file mode 100644 index ccf2fe3e2f..0000000000 --- a/common/changes/@neo-one/smart-contract-lib/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-lib" - } - ], - "packageName": "@neo-one/smart-contract-lib", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json deleted file mode 100644 index eeacefc6e7..0000000000 --- a/common/changes/@neo-one/smart-contract-test-common/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-test-common" - } - ], - "packageName": "@neo-one/smart-contract-test-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 3155661dfc..0000000000 --- a/common/changes/@neo-one/smart-contract-test/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-test" - } - ], - "packageName": "@neo-one/smart-contract-test", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 20bf9c6359..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract-typescript-plugin" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index 4851a6046a..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-typescript-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 7fb7b642bb..0000000000 --- a/common/changes/@neo-one/smart-contract/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/smart-contract" - } - ], - "packageName": "@neo-one/smart-contract", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json deleted file mode 100644 index d08373e816..0000000000 --- a/common/changes/@neo-one/suite/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/suite" - } - ], - "packageName": "@neo-one/suite", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json deleted file mode 100644 index bf3851c894..0000000000 --- a/common/changes/@neo-one/ts-utils/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/ts-utils" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index bb9bedf821..0000000000 --- a/common/changes/@neo-one/ts-utils/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/ts-utils", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json b/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json deleted file mode 100644 index cd2c5e06ff..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/prettier_2020-03-22-23-31.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/typescript-concatenator", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 3dcaa54c8f..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/typescript-concatenator" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index cd2c5e06ff..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/typescript-concatenator", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 4d00e7802e..0000000000 --- a/common/changes/@neo-one/utils-node/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/utils-node" - } - ], - "packageName": "@neo-one/utils-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json b/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json deleted file mode 100644 index b897fe29ce..0000000000 --- a/common/changes/@neo-one/utils/remove-oc_2020-05-14-19-32.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "remove opencensus metrics temporarily", - "type": "major", - "packageName": "@neo-one/utils" - } - ], - "packageName": "@neo-one/utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json b/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json deleted file mode 100644 index 777e12380a..0000000000 --- a/common/changes/@neo-one/utils/rush-export_2020-05-18-21-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "update package release process to take better advantage of rush tooling", - "type": "minor", - "packageName": "@neo-one/utils" - } - ], - "packageName": "@neo-one/utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json b/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json deleted file mode 100644 index 48cd99953a..0000000000 --- a/common/changes/@neo-one/utils/update-ts-dep_2020-05-04-22-59.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index 08539144d5..8323b026e6 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@babel/preset-env": "^7.6.3", "@neo-one/build-tools": "^1.0.0", - "@neo-one/logger": "^2.4.0", + "@neo-one/logger": "^2.5.0", "app-root-dir": "^1.0.2", "babel-jest": "^24.9.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-cli-common-node/CHANGELOG.json b/packages/neo-one-cli-common-node/CHANGELOG.json index db4b553ebb..76704af21f 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.json +++ b/packages/neo-one-cli-common-node/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/cli-common-node", "entries": [ + { + "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", diff --git a/packages/neo-one-cli-common-node/CHANGELOG.md b/packages/neo-one-cli-common-node/CHANGELOG.md index 0f49c19ded..6bbdfa69d7 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.md +++ b/packages/neo-one-cli-common-node/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/cli-common-node -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 8bc549ffc7..2b7841d44c 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common-node", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full-core": "^2.4.1", + "@neo-one/cli-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/client-full-core": "^2.5.0", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", diff --git a/packages/neo-one-cli-common/CHANGELOG.json b/packages/neo-one-cli-common/CHANGELOG.json index 3cb3592682..16d3213494 100644 --- a/packages/neo-one-cli-common/CHANGELOG.json +++ b/packages/neo-one-cli-common/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/cli-common", "entries": [ + { + "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", diff --git a/packages/neo-one-cli-common/CHANGELOG.md b/packages/neo-one-cli-common/CHANGELOG.md index a17e3d13fd..236d6d8b35 100644 --- a/packages/neo-one-cli-common/CHANGELOG.md +++ b/packages/neo-one-cli-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/cli-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index 78064a6a77..658e0241c0 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE code common to the cli and browser.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full-core": "^2.4.1", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/client-full-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-cli/CHANGELOG.json b/packages/neo-one-cli/CHANGELOG.json index 0f3cd46afa..9ee326f9a7 100644 --- a/packages/neo-one-cli/CHANGELOG.json +++ b/packages/neo-one-cli/CHANGELOG.json @@ -1,6 +1,80 @@ { "name": "@neo-one/cli", "entries": [ + { + "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", diff --git a/packages/neo-one-cli/CHANGELOG.md b/packages/neo-one-cli/CHANGELOG.md index 081a7df70a..956d85e158 100644 --- a/packages/neo-one-cli/CHANGELOG.md +++ b/packages/neo-one-cli/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/cli -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index b0e0da1e60..8414f6a923 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE CLI for developing NEO dapps.", "main": "./dist/cjs/index", "scripts": { @@ -17,24 +17,24 @@ "dependencies": { "@babel/core": "^7.6.2", "@babel/register": "^7.5.5", - "@neo-one/cli-common": "^2.5.0", - "@neo-one/cli-common-node": "^2.5.0", - "@neo-one/client": "^2.5.0", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full": "^2.4.0", - "@neo-one/client-full-core": "^2.4.1", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/logger-config": "^2.4.0", - "@neo-one/node": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-neo-settings": "^2.4.0", - "@neo-one/smart-contract-codegen": "^2.4.0", - "@neo-one/smart-contract-compiler": "^2.4.0", - "@neo-one/smart-contract-compiler-node": "^2.4.0", - "@neo-one/utils": "^2.4.0", - "@neo-one/utils-node": "^2.4.0", + "@neo-one/cli-common": "^2.6.0", + "@neo-one/cli-common-node": "^2.6.0", + "@neo-one/client": "^2.6.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/client-full": "^2.5.0", + "@neo-one/client-full-core": "^2.5.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/logger-config": "^2.5.0", + "@neo-one/node": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-neo-settings": "^2.5.0", + "@neo-one/smart-contract-codegen": "^2.5.0", + "@neo-one/smart-contract-compiler": "^2.5.0", + "@neo-one/smart-contract-compiler-node": "^2.5.0", + "@neo-one/utils": "^2.5.0", + "@neo-one/utils-node": "^2.5.0", "@neotracker/core": "1.3.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", @@ -56,8 +56,8 @@ "devDependencies": { "@angular/core": "^8.2.7", "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract": "^2.4.0", - "@neo-one/smart-contract-test": "^2.4.0", + "@neo-one/smart-contract": "^2.5.0", + "@neo-one/smart-contract-test": "^2.5.0", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json index 1af17d1962..0f17e7a87c 100644 --- a/packages/neo-one-client-common/CHANGELOG.json +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/client-common", "entries": [ + { + "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", diff --git a/packages/neo-one-client-common/CHANGELOG.md b/packages/neo-one-client-common/CHANGELOG.md index 60c35b7146..209337e3b1 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-common -This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index eb158e81e7..20457d7f07 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/utils": "^2.5.0", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "bs58": "^4.0.1", diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json index 33744e9fc3..62f079207f 100644 --- a/packages/neo-one-client-core/CHANGELOG.json +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/client-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-core/CHANGELOG.md b/packages/neo-one-client-core/CHANGELOG.md index b06e632df2..e4fa95d888 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/client-core -This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 2.6.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.5.0 Thu, 23 Apr 2020 20:37:45 GMT diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 235461e7d4..b58db80d5f 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-core", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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", diff --git a/packages/neo-one-client-full-common/CHANGELOG.json b/packages/neo-one-client-full-common/CHANGELOG.json index 941294841a..e47cb5332d 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.json +++ b/packages/neo-one-client-full-common/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/client-full-common", "entries": [ + { + "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", diff --git a/packages/neo-one-client-full-common/CHANGELOG.md b/packages/neo-one-client-full-common/CHANGELOG.md index e77b250fb1..64f8f3490d 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.md +++ b/packages/neo-one-client-full-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-full-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index 5295100438..aa1e8804e6 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE full client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,8 +12,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/utils": "^2.5.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-client-full-core/CHANGELOG.json b/packages/neo-one-client-full-core/CHANGELOG.json index d94ef731a1..056dddc9b7 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.json +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -1,6 +1,38 @@ { "name": "@neo-one/client-full-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-full-core/CHANGELOG.md b/packages/neo-one-client-full-core/CHANGELOG.md index d2593e6f8e..961c2a5ae0 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-full-core -This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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.1 Thu, 23 Apr 2020 20:37:45 GMT diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index 69fa86515d..9106ffd778 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.4.1", + "version": "2.5.0", "description": "NEO•ONE client-full core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,18 +12,18 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full-common": "^2.4.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-core": "^2.4.0", + "@neo-one/node-core": "^2.5.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-full/CHANGELOG.json b/packages/neo-one-client-full/CHANGELOG.json index 44a366ca86..2caea82c47 100644 --- a/packages/neo-one-client-full/CHANGELOG.json +++ b/packages/neo-one-client-full/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/client-full", "entries": [ + { + "version": "2.5.0", + "tag": "@neo-one/client-full_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\" 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.4.0", "tag": "@neo-one/client-full_v2.4.0", diff --git a/packages/neo-one-client-full/CHANGELOG.md b/packages/neo-one-client-full/CHANGELOG.md index 519d252b6b..fa3585764d 100644 --- a/packages/neo-one-client-full/CHANGELOG.md +++ b/packages/neo-one-client-full/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-full -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index 0cd9177e82..cb6d5bf51c 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE client extended API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,8 +12,8 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client": "^2.5.0", - "@neo-one/client-full-core": "^2.4.1" + "@neo-one/client": "^2.6.0", + "@neo-one/client-full-core": "^2.5.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.json b/packages/neo-one-client-switch/CHANGELOG.json index 84f4b56b6b..df84170bb2 100644 --- a/packages/neo-one-client-switch/CHANGELOG.json +++ b/packages/neo-one-client-switch/CHANGELOG.json @@ -1,6 +1,35 @@ { "name": "@neo-one/client-switch", "entries": [ + { + "version": "2.5.0", + "tag": "@neo-one/client-switch_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "fix SourceMapConsumer CLI warning message" + }, + { + "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/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/client-switch_v2.4.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.md b/packages/neo-one-client-switch/CHANGELOG.md index f255d3ec2b..fec5b71cf4 100644 --- a/packages/neo-one-client-switch/CHANGELOG.md +++ b/packages/neo-one-client-switch/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log - @neo-one/client-switch -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT + +### Minor changes + +- fix SourceMapConsumer CLI warning message +- 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 diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index a827ad82b3..c44940ff67 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-switch", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE client library for browser/node differences.", "main": "./dist/cjs/index", "browser": "./dist/cjs/index.browser", @@ -15,9 +15,9 @@ "dependencies": { "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", - "@neo-one/client-common": "^2.5.0", - "@neo-one/node-vm": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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", diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json index 2b4cd3df21..3f8ff59686 100644 --- a/packages/neo-one-client/CHANGELOG.json +++ b/packages/neo-one-client/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/client", "entries": [ + { + "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", diff --git a/packages/neo-one-client/CHANGELOG.md b/packages/neo-one-client/CHANGELOG.md index c91b903370..f87aaf2b9d 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client -This log was last generated on Thu, 23 Apr 2020 20:37:45 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index bb10bb2e6d..f51f412f0d 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/developer-tools": "^2.4.0" + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/developer-tools": "^2.5.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 5504e92289..a956680867 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -14,11 +14,11 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/react": "^2.4.0", - "@neo-one/react-common": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/react": "^2.5.0", + "@neo-one/react-common": "^2.5.0", + "@neo-one/utils": "^2.5.0", "@reactivex/ix-esnext-esm": "^2.5.3", "@render-props/size-observer": "^0.1.18", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-developer-tools/CHANGELOG.json b/packages/neo-one-developer-tools/CHANGELOG.json index a2fcd908ad..1bccc476ae 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.json +++ b/packages/neo-one-developer-tools/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/developer-tools", "entries": [ + { + "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", diff --git a/packages/neo-one-developer-tools/CHANGELOG.md b/packages/neo-one-developer-tools/CHANGELOG.md index 6a5bf7fb36..306252cc5b 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.md +++ b/packages/neo-one-developer-tools/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/developer-tools -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index b96d689ac8..5b78ea689f 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/developer-tools", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE developer tools.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,7 +12,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.5.0", + "@neo-one/client-core": "^2.6.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index 3d88216253..86aeab6720 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -10,10 +10,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/http": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/utils": "^2.4.0", - "@neo-one/utils-node": "^2.4.0", + "@neo-one/http": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/utils": "^2.5.0", + "@neo-one/utils-node": "^2.5.0", "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 50107749b0..3861c77b08 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -28,17 +28,17 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", - "@neo-one/client": "^2.5.0", - "@neo-one/client-switch": "^2.4.0", + "@neo-one/client": "^2.6.0", + "@neo-one/client-switch": "^2.5.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.4.0", - "@neo-one/react-common": "^2.4.0", - "@neo-one/smart-contract-compiler": "^2.4.0", + "@neo-one/react": "^2.5.0", + "@neo-one/react-common": "^2.5.0", + "@neo-one/smart-contract-compiler": "^2.5.0", "@neo-one/smart-contract-test-browser": "^2.3.1", - "@neo-one/utils": "^2.4.0", + "@neo-one/utils": "^2.5.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", diff --git a/packages/neo-one-http-context/CHANGELOG.json b/packages/neo-one-http-context/CHANGELOG.json index 3dd3a6bddd..9280912093 100644 --- a/packages/neo-one-http-context/CHANGELOG.json +++ b/packages/neo-one-http-context/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/http-context", "entries": [ + { + "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", diff --git a/packages/neo-one-http-context/CHANGELOG.md b/packages/neo-one-http-context/CHANGELOG.md index 1303184702..54b64fdfc8 100644 --- a/packages/neo-one-http-context/CHANGELOG.md +++ b/packages/neo-one-http-context/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/http-context -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index d5c5a26d13..2a4705cc32 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http-context", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE http context utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/utils": "^2.5.0", "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-http/CHANGELOG.json b/packages/neo-one-http/CHANGELOG.json index 18c0c7f3e1..f8a8a63d1b 100644 --- a/packages/neo-one-http/CHANGELOG.json +++ b/packages/neo-one-http/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/http", "entries": [ + { + "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", diff --git a/packages/neo-one-http/CHANGELOG.md b/packages/neo-one-http/CHANGELOG.md index d96b7743af..32aa03090e 100644 --- a/packages/neo-one-http/CHANGELOG.md +++ b/packages/neo-one-http/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/http -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-http/package.json b/packages/neo-one-http/package.json index 67442730c5..e1483fdacc 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE http utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index cd02a618cf..9833695bdc 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -11,13 +11,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", + "@neo-one/cli-common": "^2.6.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", "@neo-one/node-browser": "^2.3.0", - "@neo-one/smart-contract-codegen": "^2.4.0", - "@neo-one/smart-contract-compiler": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/smart-contract-codegen": "^2.5.0", + "@neo-one/smart-contract-compiler": "^2.5.0", + "@neo-one/utils": "^2.5.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "lodash": "^4.17.15", diff --git a/packages/neo-one-logger-config/CHANGELOG.json b/packages/neo-one-logger-config/CHANGELOG.json index a620fc4be3..c73505de44 100644 --- a/packages/neo-one-logger-config/CHANGELOG.json +++ b/packages/neo-one-logger-config/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/logger-config", "entries": [ + { + "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", diff --git a/packages/neo-one-logger-config/CHANGELOG.md b/packages/neo-one-logger-config/CHANGELOG.md index 15fb01788b..40b2f3ab89 100644 --- a/packages/neo-one-logger-config/CHANGELOG.md +++ b/packages/neo-one-logger-config/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/logger-config -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index 7f408f27e5..bd06645e70 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger-config", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE logging utility config", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-logger/CHANGELOG.json b/packages/neo-one-logger/CHANGELOG.json index 47c42b21c0..12a580bdc2 100644 --- a/packages/neo-one-logger/CHANGELOG.json +++ b/packages/neo-one-logger/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/logger", "entries": [ + { + "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", diff --git a/packages/neo-one-logger/CHANGELOG.md b/packages/neo-one-logger/CHANGELOG.md index 1ae428b144..649f2f478b 100644 --- a/packages/neo-one-logger/CHANGELOG.md +++ b/packages/neo-one-logger/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/logger -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index d006c88480..40f69f0a28 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE logging utility", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,7 +12,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/logger-config": "^2.4.0", + "@neo-one/logger-config": "^2.5.0", "pino": "^5.12.6", "pino-pretty": "^3.2.1", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-bin/CHANGELOG.json b/packages/neo-one-node-bin/CHANGELOG.json index 3e8aecec34..317a767157 100644 --- a/packages/neo-one-node-bin/CHANGELOG.json +++ b/packages/neo-one-node-bin/CHANGELOG.json @@ -1,6 +1,41 @@ { "name": "@neo-one/node-bin", "entries": [ + { + "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", diff --git a/packages/neo-one-node-bin/CHANGELOG.md b/packages/neo-one-node-bin/CHANGELOG.md index cd99d221bd..d4a084aca2 100644 --- a/packages/neo-one-node-bin/CHANGELOG.md +++ b/packages/neo-one-node-bin/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-bin -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index 3b5b410114..ef265cc4e1 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-bin", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO executable full node.", "bin": { "neo-one-node": "bin/neo-one-node.js" @@ -13,11 +13,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/logger": "^2.4.0", - "@neo-one/node": "^2.4.0", - "@neo-one/node-neo-settings": "^2.4.0", - "@neo-one/utils": "^2.4.0", - "@neo-one/utils-node": "^2.4.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node": "^2.5.0", + "@neo-one/node-neo-settings": "^2.5.0", + "@neo-one/utils": "^2.5.0", + "@neo-one/utils-node": "^2.5.0", "env-paths": "^2.2.0", "execa": "^3.2.0", "import-local": "^3.0.2", @@ -29,8 +29,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.5.0", - "@neo-one/client-common": "^2.5.0", + "@neo-one/client": "^2.6.0", + "@neo-one/client-common": "^2.6.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", "@types/rc": "^1.1.0", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.json b/packages/neo-one-node-blockchain/CHANGELOG.json index 7696cd88b7..6797d3333b 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.json +++ b/packages/neo-one-node-blockchain/CHANGELOG.json @@ -1,6 +1,38 @@ { "name": "@neo-one/node-blockchain", "entries": [ + { + "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", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.md b/packages/neo-one-node-blockchain/CHANGELOG.md index d9f394a095..a5a9f4c150 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.md +++ b/packages/neo-one-node-blockchain/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/node-blockchain -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 02c873e670..42d67d79f6 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-blockchain", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO blockchain implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,11 +12,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index 194a39a9d0..4ae9c66a58 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -10,16 +10,16 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/node-blockchain": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-neo-settings": "^2.4.0", - "@neo-one/node-protocol": "^2.4.0", - "@neo-one/node-rpc-handler": "^2.4.0", - "@neo-one/node-storage-levelup": "^2.4.0", - "@neo-one/node-vm": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/node-blockchain": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-neo-settings": "^2.5.0", + "@neo-one/node-protocol": "^2.5.0", + "@neo-one/node-rpc-handler": "^2.5.0", + "@neo-one/node-storage-levelup": "^2.5.0", + "@neo-one/node-vm": "^2.5.0", + "@neo-one/utils": "^2.5.0", "core-js": "^3.2.1", "level-js": "^5.0.0", "levelup": "^4.1.0", diff --git a/packages/neo-one-node-consensus/CHANGELOG.json b/packages/neo-one-node-consensus/CHANGELOG.json index f287c29c98..b4d27ec5f8 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.json +++ b/packages/neo-one-node-consensus/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/node-consensus", "entries": [ + { + "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", diff --git a/packages/neo-one-node-consensus/CHANGELOG.md b/packages/neo-one-node-consensus/CHANGELOG.md index 0b991f80e7..ec49357831 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.md +++ b/packages/neo-one-node-consensus/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-consensus -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index 33ec9c27b1..661ccfafdf 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-consensus", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/logger": "^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", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-node-core/CHANGELOG.json b/packages/neo-one-node-core/CHANGELOG.json index 86b6ec409e..e0f070cd7a 100644 --- a/packages/neo-one-node-core/CHANGELOG.json +++ b/packages/neo-one-node-core/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/node-core", "entries": [ + { + "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", diff --git a/packages/neo-one-node-core/CHANGELOG.md b/packages/neo-one-node-core/CHANGELOG.md index 81ab78f5b9..8b564aee25 100644 --- a/packages/neo-one-node-core/CHANGELOG.md +++ b/packages/neo-one-node-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-core -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index 0aac0b3c77..d5ebed962e 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-core", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE core node types.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-full-common": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.json b/packages/neo-one-node-http-rpc/CHANGELOG.json index e8a6dd37aa..bf5bf662b4 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.json +++ b/packages/neo-one-node-http-rpc/CHANGELOG.json @@ -1,6 +1,41 @@ { "name": "@neo-one/node-http-rpc", "entries": [ + { + "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", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.md b/packages/neo-one-node-http-rpc/CHANGELOG.md index cb6fc6966d..d1dc49054d 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.md +++ b/packages/neo-one-node-http-rpc/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-http-rpc -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index b3f6fa202a..eda8d1ed54 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE RPC server.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,13 +12,13 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/cli-common-node": "^2.5.0", - "@neo-one/http": "^2.4.0", - "@neo-one/http-context": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-rpc-handler": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/cli-common-node": "^2.6.0", + "@neo-one/http": "^2.5.0", + "@neo-one/http-context": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-rpc-handler": "^2.5.0", + "@neo-one/utils": "^2.5.0", "cross-fetch": "^3.0.4", "execa": "^3.2.0", "koa": "^2.7.0", diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.json b/packages/neo-one-node-neo-settings/CHANGELOG.json index f130e4b97d..bc407fd4bf 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.json +++ b/packages/neo-one-node-neo-settings/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/node-neo-settings", "entries": [ + { + "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", diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.md b/packages/neo-one-node-neo-settings/CHANGELOG.md index a7fc0e9970..3d9f0fb7b0 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.md +++ b/packages/neo-one-node-neo-settings/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-neo-settings -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index c0e76d784f..6d85b05714 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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" diff --git a/packages/neo-one-node-network/CHANGELOG.json b/packages/neo-one-node-network/CHANGELOG.json index 124890a50a..04d203f78f 100644 --- a/packages/neo-one-node-network/CHANGELOG.json +++ b/packages/neo-one-node-network/CHANGELOG.json @@ -1,6 +1,35 @@ { "name": "@neo-one/node-network", "entries": [ + { + "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", diff --git a/packages/neo-one-node-network/CHANGELOG.md b/packages/neo-one-node-network/CHANGELOG.md index ef697c2d1c..6594e8b254 100644 --- a/packages/neo-one-node-network/CHANGELOG.md +++ b/packages/neo-one-node-network/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/node-network -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index 61885b9db6..d432814f4d 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-network", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO network protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-offline/CHANGELOG.json b/packages/neo-one-node-offline/CHANGELOG.json index 7fdac0d608..c567190176 100644 --- a/packages/neo-one-node-offline/CHANGELOG.json +++ b/packages/neo-one-node-offline/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/node-offline", "entries": [ + { + "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", diff --git a/packages/neo-one-node-offline/CHANGELOG.md b/packages/neo-one-node-offline/CHANGELOG.md index 09570f3edc..24a024c4ec 100644 --- a/packages/neo-one-node-offline/CHANGELOG.md +++ b/packages/neo-one-node-offline/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-offline -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index f636b3d4b4..60b8281b53 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-offline", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-protocol/CHANGELOG.json b/packages/neo-one-node-protocol/CHANGELOG.json index a9965757b6..c5bfcf4c05 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.json +++ b/packages/neo-one-node-protocol/CHANGELOG.json @@ -1,6 +1,41 @@ { "name": "@neo-one/node-protocol", "entries": [ + { + "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", diff --git a/packages/neo-one-node-protocol/CHANGELOG.md b/packages/neo-one-node-protocol/CHANGELOG.md index 7f58f4b153..8922b3d5c2 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.md +++ b/packages/neo-one-node-protocol/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/node-protocol -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index 1aed984cc0..3193336909 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-protocol", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO node and consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,12 +12,12 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-consensus": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-consensus": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "bloem": "^0.2.4", "bloom-filter": "^0.2.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.json b/packages/neo-one-node-rpc-handler/CHANGELOG.json index fd04733821..2f1dc2cfb2 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.json +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.json @@ -1,6 +1,38 @@ { "name": "@neo-one/node-rpc-handler", "entries": [ + { + "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", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.md b/packages/neo-one-node-rpc-handler/CHANGELOG.md index 150f3e3dea..e96015b6b9 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.md +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/node-rpc-handler -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index eb214c3ff2..add58f7289 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE RPC handler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,11 +12,11 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.json b/packages/neo-one-node-storage-cache/CHANGELOG.json index 972c14e227..569f94e605 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.json +++ b/packages/neo-one-node-storage-cache/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/node-storage-cache", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.md b/packages/neo-one-node-storage-cache/CHANGELOG.md index 22ee385f48..3cfda229e8 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.md +++ b/packages/neo-one-node-storage-cache/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-storage-cache -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 395ee3961f..5d6e34b344 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE node storage cache.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-storage-common": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-storage-common": "^2.5.0", + "@neo-one/utils": "^2.5.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-storage-common/CHANGELOG.json b/packages/neo-one-node-storage-common/CHANGELOG.json index b11a40c33e..b7dea86d48 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.json +++ b/packages/neo-one-node-storage-common/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/node-storage-common", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-common/CHANGELOG.md b/packages/neo-one-node-storage-common/CHANGELOG.md index 58b600121b..8935998277 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.md +++ b/packages/neo-one-node-storage-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-storage-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index 2273cca7aa..59ff65a987 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE node storage common.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,9 +12,9 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/utils": "^2.5.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.json b/packages/neo-one-node-storage-levelup/CHANGELOG.json index 06cadde2b4..d1fd2e8c6c 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.json +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/node-storage-levelup", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.md b/packages/neo-one-node-storage-levelup/CHANGELOG.md index 677d6bd6aa..149ccfeb61 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.md +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-storage-levelup -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index f1b98ce956..6266834cb4 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE levelup node storage.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-storage-common": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-storage-common": "^2.5.0", + "@neo-one/utils": "^2.5.0", "@types/levelup": "^3.1.1", "levelup": "^4.1.0", "rxjs": "^6.5.3", diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 08bab39b48..1a83b28192 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@google-cloud/storage": "^4.3.2", - "@neo-one/logger": "^2.4.0", - "@neo-one/utils-node": "^2.4.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/utils-node": "^2.5.0", "execa": "^3.2.0", "import-local": "^3.0.2", "rc": "^1.2.8", diff --git a/packages/neo-one-node-vm/CHANGELOG.json b/packages/neo-one-node-vm/CHANGELOG.json index a81db314e7..9462a2f0ea 100644 --- a/packages/neo-one-node-vm/CHANGELOG.json +++ b/packages/neo-one-node-vm/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/node-vm", "entries": [ + { + "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", diff --git a/packages/neo-one-node-vm/CHANGELOG.md b/packages/neo-one-node-vm/CHANGELOG.md index 85ba42959d..fbb59464f1 100644 --- a/packages/neo-one-node-vm/CHANGELOG.md +++ b/packages/neo-one-node-vm/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-vm -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 5e9bcca11c..cb79b344e0 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-vm", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO VM.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,10 +12,10 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-full-common": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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", diff --git a/packages/neo-one-node/CHANGELOG.json b/packages/neo-one-node/CHANGELOG.json index dd8c989317..476cc8aab9 100644 --- a/packages/neo-one-node/CHANGELOG.json +++ b/packages/neo-one-node/CHANGELOG.json @@ -1,6 +1,56 @@ { "name": "@neo-one/node", "entries": [ + { + "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", diff --git a/packages/neo-one-node/CHANGELOG.md b/packages/neo-one-node/CHANGELOG.md index 0a03bd58f3..539cdea5a6 100644 --- a/packages/neo-one-node/CHANGELOG.md +++ b/packages/neo-one-node/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/node -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 5019fb9a4d..61fbc6da1f 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE NEO full node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,17 +12,17 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-switch": "^2.4.0", - "@neo-one/logger": "^2.4.0", - "@neo-one/node-blockchain": "^2.4.0", - "@neo-one/node-core": "^2.4.0", - "@neo-one/node-http-rpc": "^2.4.0", - "@neo-one/node-network": "^2.4.0", - "@neo-one/node-offline": "^2.4.0", - "@neo-one/node-protocol": "^2.4.0", - "@neo-one/node-storage-levelup": "^2.4.0", - "@neo-one/node-vm": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/node-blockchain": "^2.5.0", + "@neo-one/node-core": "^2.5.0", + "@neo-one/node-http-rpc": "^2.5.0", + "@neo-one/node-network": "^2.5.0", + "@neo-one/node-offline": "^2.5.0", + "@neo-one/node-protocol": "^2.5.0", + "@neo-one/node-storage-levelup": "^2.5.0", + "@neo-one/node-vm": "^2.5.0", + "@neo-one/utils": "^2.5.0", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", "leveldown": "^5.1.1", diff --git a/packages/neo-one-react-common/CHANGELOG.json b/packages/neo-one-react-common/CHANGELOG.json index ef09ee21ce..0ced2fb190 100644 --- a/packages/neo-one-react-common/CHANGELOG.json +++ b/packages/neo-one-react-common/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/react-common", "entries": [ + { + "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", diff --git a/packages/neo-one-react-common/CHANGELOG.md b/packages/neo-one-react-common/CHANGELOG.md index 4e4b543e07..f154ce66af 100644 --- a/packages/neo-one-react-common/CHANGELOG.md +++ b/packages/neo-one-react-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/react-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index e07b58f01f..83ae334c86 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -17,7 +17,7 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@neo-one/react-core": "^2.4.0", + "@neo-one/react-core": "^2.5.0", "popper.js": "^1.15.0", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/packages/neo-one-react-core/CHANGELOG.json b/packages/neo-one-react-core/CHANGELOG.json index bd3666056c..0e767c9bc6 100644 --- a/packages/neo-one-react-core/CHANGELOG.json +++ b/packages/neo-one-react-core/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/react-core", "entries": [ + { + "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", diff --git a/packages/neo-one-react-core/CHANGELOG.md b/packages/neo-one-react-core/CHANGELOG.md index fd012c7bd5..81fba3867c 100644 --- a/packages/neo-one-react-core/CHANGELOG.md +++ b/packages/neo-one-react-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/react-core -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index 615ea743c6..f50453d18a 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-core", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-react/CHANGELOG.json b/packages/neo-one-react/CHANGELOG.json index 74be12bf50..70325a459b 100644 --- a/packages/neo-one-react/CHANGELOG.json +++ b/packages/neo-one-react/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/react", "entries": [ + { + "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", diff --git a/packages/neo-one-react/CHANGELOG.md b/packages/neo-one-react/CHANGELOG.md index 5470502d89..dfdc728ef7 100644 --- a/packages/neo-one-react/CHANGELOG.md +++ b/packages/neo-one-react/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/react -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-react/package.json b/packages/neo-one-react/package.json index e461da56c0..013efca2f5 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE React utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.json b/packages/neo-one-smart-contract-codegen/CHANGELOG.json index 54e8147ca9..8fa6e2d9f0 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.json +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.json @@ -1,6 +1,32 @@ { "name": "@neo-one/smart-contract-codegen", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.md b/packages/neo-one-smart-contract-codegen/CHANGELOG.md index 567d402101..e6f2d4a1bd 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.md +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-codegen -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index 188d694d6f..a3182dd7dd 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript smart contract codegen.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/cli-common": "^2.6.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/utils": "^2.5.0", "lodash": "^4.17.15", "prettier": "^2.0.1", "safe-stable-stringify": "^1.1.0", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json index 3005b2aabc..6324e2f4fb 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/smart-contract-compiler-node", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md index 22c454de53..b32be03f9d 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-compiler-node -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index e8f9402a34..70e177d7ac 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.4.0", - "@neo-one/smart-contract-lib": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/smart-contract": "^2.5.0", + "@neo-one/smart-contract-lib": "^2.5.0", + "@neo-one/utils": "^2.5.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.json b/packages/neo-one-smart-contract-compiler/CHANGELOG.json index 3d7912738c..8a0d2ac8f0 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.json @@ -1,6 +1,62 @@ { "name": "@neo-one/smart-contract-compiler", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.md b/packages/neo-one-smart-contract-compiler/CHANGELOG.md index 946e38fe76..6881982ff0 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-compiler -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index b9dda9e0d7..5f1217008f 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript smart contract compiler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,14 +14,14 @@ "sideEffects": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full-common": "^2.4.0", - "@neo-one/client-full-core": "^2.4.1", - "@neo-one/smart-contract": "^2.4.0", - "@neo-one/ts-utils": "^2.4.0", - "@neo-one/typescript-concatenator": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@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-full-core": "^2.5.0", + "@neo-one/smart-contract": "^2.5.0", + "@neo-one/ts-utils": "^2.5.0", + "@neo-one/typescript-concatenator": "^2.5.0", + "@neo-one/utils": "^2.5.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", "safe-stable-stringify": "^1.1.0", @@ -31,12 +31,12 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-switch": "^2.4.0", - "@neo-one/node-blockchain": "^2.4.0", - "@neo-one/node-neo-settings": "^2.4.0", - "@neo-one/node-storage-levelup": "^2.4.0", - "@neo-one/node-vm": "^2.4.0", - "@neo-one/smart-contract-compiler-node": "^2.4.0", + "@neo-one/client-switch": "^2.5.0", + "@neo-one/node-blockchain": "^2.5.0", + "@neo-one/node-neo-settings": "^2.5.0", + "@neo-one/node-storage-levelup": "^2.5.0", + "@neo-one/node-vm": "^2.5.0", + "@neo-one/smart-contract-compiler-node": "^2.5.0", "@types/app-root-dir": "^0.1.0", "@types/babel__code-frame": "^7.0.1", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.json b/packages/neo-one-smart-contract-lib/CHANGELOG.json index 17e6e9bc4c..81078ee30e 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.json +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/smart-contract-lib", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.md b/packages/neo-one-smart-contract-lib/CHANGELOG.md index 0b26ae8ef2..5d3e515be0 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.md +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-lib -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index c48afd1234..fb92d86270 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript common smart contracts.", "main": "./src/index.ts", "smartContract": true, @@ -9,11 +9,11 @@ "lint": "" }, "dependencies": { - "@neo-one/smart-contract": "^2.4.0" + "@neo-one/smart-contract": "^2.5.0" }, "devDependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 027e40e6ed..4f4470433f 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -10,12 +10,12 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-core": "^2.5.0", + "@neo-one/client-core": "^2.6.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.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/smart-contract-test-common": "^2.5.0", + "@neo-one/utils": "^2.5.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.json b/packages/neo-one-smart-contract-test-common/CHANGELOG.json index 3e0bb5fdfe..1316628fdb 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.json @@ -1,6 +1,41 @@ { "name": "@neo-one/smart-contract-test-common", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.md b/packages/neo-one-smart-contract-test-common/CHANGELOG.md index 5f6f1be0d3..beca4794b7 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-test-common -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 6aea1efa16..75e7b2f44f 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript smart contract test harness common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,13 +12,13 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/cli-common": "^2.5.0", - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/client-full-core": "^2.4.1", - "@neo-one/logger": "^2.4.0", - "@neo-one/smart-contract-compiler": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/cli-common": "^2.6.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/client-full-core": "^2.5.0", + "@neo-one/logger": "^2.5.0", + "@neo-one/smart-contract-compiler": "^2.5.0", + "@neo-one/utils": "^2.5.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.json b/packages/neo-one-smart-contract-test/CHANGELOG.json index bdae2777bd..7e51564e38 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test/CHANGELOG.json @@ -1,6 +1,47 @@ { "name": "@neo-one/smart-contract-test", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.md b/packages/neo-one-smart-contract-test/CHANGELOG.md index 3818b93186..ed8d79b44b 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-test -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index 8b47da226a..75b8551c76 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript smart contract test harness.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,21 +12,21 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/client-common": "^2.5.0", - "@neo-one/client-core": "^2.5.0", - "@neo-one/node": "^2.4.0", - "@neo-one/node-neo-settings": "^2.4.0", - "@neo-one/smart-contract-compiler-node": "^2.4.0", - "@neo-one/smart-contract-test-common": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/client-common": "^2.6.0", + "@neo-one/client-core": "^2.6.0", + "@neo-one/node": "^2.5.0", + "@neo-one/node-neo-settings": "^2.5.0", + "@neo-one/smart-contract-compiler-node": "^2.5.0", + "@neo-one/smart-contract-test-common": "^2.5.0", + "@neo-one/utils": "^2.5.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.4.0", - "@neo-one/smart-contract-lib": "^2.4.0", + "@neo-one/smart-contract": "^2.5.0", + "@neo-one/smart-contract-lib": "^2.5.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/memdown": "^3.0.0", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json index 8881718102..6bc2261e41 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/smart-contract-typescript-plugin", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md index 65046a92f7..64595110f3 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract-typescript-plugin -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index eaa8b1247c..df324664a6 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript typescript plugin.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.4.0", - "@neo-one/smart-contract-compiler-node": "^2.4.0", + "@neo-one/smart-contract-compiler": "^2.5.0", + "@neo-one/smart-contract-compiler-node": "^2.5.0", "typescript": "3.8.3" }, "devDependencies": { diff --git a/packages/neo-one-smart-contract/CHANGELOG.json b/packages/neo-one-smart-contract/CHANGELOG.json index 6d5e72d4ba..ef2b41e8ea 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.json +++ b/packages/neo-one-smart-contract/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/smart-contract", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract/CHANGELOG.md b/packages/neo-one-smart-contract/CHANGELOG.md index a16c26a9f8..004fbc53c2 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.md +++ b/packages/neo-one-smart-contract/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/smart-contract -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index 190734ec14..b840a4550f 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE smart contract apis.", "main": "./src/index.d.ts", "scripts": { diff --git a/packages/neo-one-suite/CHANGELOG.json b/packages/neo-one-suite/CHANGELOG.json index 27508d97c7..216ea5b055 100644 --- a/packages/neo-one-suite/CHANGELOG.json +++ b/packages/neo-one-suite/CHANGELOG.json @@ -1,6 +1,38 @@ { "name": "@neo-one/suite", "entries": [ + { + "version": "2.5.0", + "tag": "@neo-one/suite_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\" 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/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/smart-contract-test\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-typescript-plugin\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, { "version": "2.4.0", "tag": "@neo-one/suite_v2.4.0", diff --git a/packages/neo-one-suite/CHANGELOG.md b/packages/neo-one-suite/CHANGELOG.md index 6fe8164d81..ad5dadbcd8 100644 --- a/packages/neo-one-suite/CHANGELOG.md +++ b/packages/neo-one-suite/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/suite -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json index c048ee4a20..9e6412b1fc 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/suite", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE core dependencies for easy installation", "scripts": { "build": "", @@ -9,12 +9,12 @@ "pack": "gulp pack" }, "dependencies": { - "@neo-one/cli": "^2.5.0", - "@neo-one/client": "^2.5.0", - "@neo-one/smart-contract": "^2.4.0", - "@neo-one/smart-contract-lib": "^2.4.0", - "@neo-one/smart-contract-test": "^2.4.0", - "@neo-one/smart-contract-typescript-plugin": "^2.4.0" + "@neo-one/cli": "^2.6.0", + "@neo-one/client": "^2.6.0", + "@neo-one/smart-contract": "^2.5.0", + "@neo-one/smart-contract-lib": "^2.5.0", + "@neo-one/smart-contract-test": "^2.5.0", + "@neo-one/smart-contract-typescript-plugin": "^2.5.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-ts-utils/CHANGELOG.json b/packages/neo-one-ts-utils/CHANGELOG.json index 362b90ab98..36f923b4d9 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.json +++ b/packages/neo-one-ts-utils/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@neo-one/ts-utils", "entries": [ + { + "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", diff --git a/packages/neo-one-ts-utils/CHANGELOG.md b/packages/neo-one-ts-utils/CHANGELOG.md index 04b097ba56..4b64907d2c 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.md +++ b/packages/neo-one-ts-utils/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/ts-utils -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index 15b0d31dd6..ebdae90714 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/ts-utils", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.json b/packages/neo-one-typescript-concatenator/CHANGELOG.json index 6abb6b8ae5..a2eacd1656 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.json +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/typescript-concatenator", "entries": [ + { + "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", diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.md b/packages/neo-one-typescript-concatenator/CHANGELOG.md index fa626bfdb9..728dbf2a76 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.md +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/typescript-concatenator -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index a17a93bd95..03563e25bb 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE TypeScript Concatenator", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/ts-utils": "^2.4.0", - "@neo-one/utils": "^2.4.0", + "@neo-one/ts-utils": "^2.5.0", + "@neo-one/utils": "^2.5.0", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", @@ -22,7 +22,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract-compiler-node": "^2.4.0", + "@neo-one/smart-contract-compiler-node": "^2.5.0", "@types/app-root-dir": "^0.1.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-utils-node/CHANGELOG.json b/packages/neo-one-utils-node/CHANGELOG.json index 92c57211c1..17c5cd3309 100644 --- a/packages/neo-one-utils-node/CHANGELOG.json +++ b/packages/neo-one-utils-node/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/utils-node", "entries": [ + { + "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", diff --git a/packages/neo-one-utils-node/CHANGELOG.md b/packages/neo-one-utils-node/CHANGELOG.md index 3dc57a0af3..777b7dafd0 100644 --- a/packages/neo-one-utils-node/CHANGELOG.md +++ b/packages/neo-one-utils-node/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/utils-node -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 0ec00309ba..d9e81b5668 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils-node", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE shared Nodejs utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -12,7 +12,7 @@ "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, "dependencies": { - "@neo-one/utils": "^2.4.0", + "@neo-one/utils": "^2.5.0", "execa": "^3.2.0", "npm-package-arg": "^7.0.0", "pino": "^5.12.6", diff --git a/packages/neo-one-utils/CHANGELOG.json b/packages/neo-one-utils/CHANGELOG.json index ae37452517..42ef23a6d5 100644 --- a/packages/neo-one-utils/CHANGELOG.json +++ b/packages/neo-one-utils/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@neo-one/utils", "entries": [ + { + "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", diff --git a/packages/neo-one-utils/CHANGELOG.md b/packages/neo-one-utils/CHANGELOG.md index 24ac284480..616638e34c 100644 --- a/packages/neo-one-utils/CHANGELOG.md +++ b/packages/neo-one-utils/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/utils -This log was last generated on Mon, 13 Apr 2020 23:20:32 GMT and should not be manually modified. +This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 7f4941fcf7..5757d3ef9d 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils", - "version": "2.4.0", + "version": "2.5.0", "description": "NEO•ONE shared utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 1484c4de3c..06ba6cf0a5 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -20,8 +20,8 @@ "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", "@neo-one/editor": "^2.3.1", - "@neo-one/react": "^2.4.0", - "@neo-one/react-common": "^2.4.0", + "@neo-one/react": "^2.5.0", + "@neo-one/react-common": "^2.5.0", "@reach/router": "^1.2.1", "@render-props/viewport": "^0.3.1", "babel-plugin-emotion": "^10.0.21", @@ -70,8 +70,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.5.0", - "@neo-one/react-core": "^2.4.0", + "@neo-one/client": "^2.6.0", + "@neo-one/react-core": "^2.5.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", From c6c524cfb579d0214fe360ce8f8d4802a5773e4f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 21 May 2020 17:28:41 -0700 Subject: [PATCH 045/141] fix(docker): update dockerfile paths (#2037) --- packages/neo-one-local-browser/src/utils.ts | 4 +- scripts/DockerfileNode | 60 ++++++++++---------- scripts/DockerfileNodeGSUtil | 62 ++++++++++----------- 3 files changed, 63 insertions(+), 63 deletions(-) diff --git a/packages/neo-one-local-browser/src/utils.ts b/packages/neo-one-local-browser/src/utils.ts index 35d0a7456a..c9085a0a81 100644 --- a/packages/neo-one-local-browser/src/utils.ts +++ b/packages/neo-one-local-browser/src/utils.ts @@ -1,5 +1,5 @@ export const getSmartContractBasePath = (value: string) => `/node_modules/@neo-one/smart-contract/${value}`; export const getSmartContractLibBasePath = (value: string) => `/node_modules/@neo-one/smart-contract-lib/${value}`; -export const getSmartContractPath = (value: string) => getSmartContractBasePath(`lib/${value}`); -export const getSmartContractLibPath = (value: string) => getSmartContractLibBasePath(`lib/${value}`); +export const getSmartContractPath = (value: string) => getSmartContractBasePath(`src/${value}`); +export const getSmartContractLibPath = (value: string) => getSmartContractLibBasePath(`src/${value}`); export const CONTRACTS_PATH = '/one/contracts'; diff --git a/scripts/DockerfileNode b/scripts/DockerfileNode index 34287f3459..b519b0c1b1 100644 --- a/scripts/DockerfileNode +++ b/scripts/DockerfileNode @@ -16,94 +16,94 @@ FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250d 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/lib packages/neo-one-utils/lib/ +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/lib packages/neo-one-client-common/lib/ +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/lib packages/neo-one-client-full-common/lib/ +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/lib packages/neo-one-node-core/lib/ +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/lib packages/neo-one-node-vm/lib/ +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-client-switch/package.json packages/neo-one-client-switch/package.json -COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/lib packages/neo-one-client-switch/lib/ +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/lib packages/neo-one-client-core/lib/ +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/lib packages/neo-one-react-core/lib/ +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/lib packages/neo-one-logger-config/lib/ +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/lib packages/neo-one-client-full-core/lib/ +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/lib packages/neo-one-react/lib/ +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/lib packages/neo-one-react-common/lib/ +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/lib packages/neo-one-logger/lib/ +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/lib packages/neo-one-cli-common/lib/ +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/lib packages/neo-one-cli-common-node/lib/ +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/lib packages/neo-one-http/lib/ +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/lib packages/neo-one-http-context/lib/ +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/lib packages/neo-one-node-rpc-handler/lib/ +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/lib packages/neo-one-node-consensus/lib/ +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/lib packages/neo-one-node-storage-common/lib/ +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/lib packages/neo-one-node-blockchain/lib/ +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/lib packages/neo-one-node-http-rpc/lib/ +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/lib packages/neo-one-node-network/lib/ +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/lib packages/neo-one-node-offline/lib/ +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/lib packages/neo-one-node-protocol/lib/ +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/lib packages/neo-one-node-storage-levelup/lib/ +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/lib packages/neo-one-node/lib/ +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/lib packages/neo-one-node-neo-settings/lib/ +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/lib packages/neo-one-utils-node/lib/ +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/lib packages/neo-one-node-bin/lib/ +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/common/temp/node_modules common/temp/node_modules/ diff --git a/scripts/DockerfileNodeGSUtil b/scripts/DockerfileNodeGSUtil index e115921363..e69768abb8 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -17,98 +17,98 @@ FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250d 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/lib packages/neo-one-utils/lib/ +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/lib packages/neo-one-client-common/lib/ +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/lib packages/neo-one-client-full-common/lib/ +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/lib packages/neo-one-node-core/lib/ +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/lib packages/neo-one-node-vm/lib/ +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-client-switch/package.json packages/neo-one-client-switch/package.json -COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/lib packages/neo-one-client-switch/lib/ +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/lib packages/neo-one-client-core/lib/ +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/lib packages/neo-one-react-core/lib/ +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/lib packages/neo-one-logger-config/lib/ +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/lib packages/neo-one-client-full-core/lib/ +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/lib packages/neo-one-react/lib/ +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/lib packages/neo-one-react-common/lib/ +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/lib packages/neo-one-logger/lib/ +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/lib packages/neo-one-cli-common/lib/ +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/lib packages/neo-one-cli-common-node/lib/ +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/lib packages/neo-one-http/lib/ +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/lib packages/neo-one-http-context/lib/ +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/lib packages/neo-one-node-rpc-handler/lib/ +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/lib packages/neo-one-node-consensus/lib/ +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/lib packages/neo-one-node-storage-common/lib/ +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/lib packages/neo-one-node-blockchain/lib/ +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/lib packages/neo-one-node-http-rpc/lib/ +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/lib packages/neo-one-node-network/lib/ +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/lib packages/neo-one-node-offline/lib/ +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/lib packages/neo-one-node-protocol/lib/ +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/lib packages/neo-one-node-storage-levelup/lib/ +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/lib packages/neo-one-node/lib/ +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/lib packages/neo-one-node-neo-settings/lib/ +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/lib packages/neo-one-utils-node/lib/ +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/lib packages/neo-one-node-bin/lib/ +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/lib packages/neo-one-node-tools/lib/ +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/common/temp/node_modules common/temp/node_modules/ From ea855d82640550cb00830ea8a4596c8b01108cf7 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 22 May 2020 13:57:16 -0700 Subject: [PATCH 046/141] fix(nit): NEO tracker to NEO Tracker (#2047) --- packages/neo-one-cli-common-node/src/configuration.ts | 6 +++--- packages/neo-one-cli/src/cmd/start/neotracker.ts | 6 +++--- packages/neo-one-client-common/src/types.ts | 2 +- packages/neo-one-client-core/src/DeveloperClient.ts | 2 +- packages/neo-one-website/docs/1-main-concepts/10-testing.md | 2 +- .../docs/2-advanced-guides/09-configuration-options.md | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 97abf5eecb..16da9d27e0 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -211,11 +211,11 @@ ${exportConfig} { // Refer to the documentation at https://neo-one.io/docs/configuration 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'. + // Set to true if you'd like NEO•ONE to skip starting a NEO Tracker instance when running 'neo-one build'. skip: false, } }; diff --git a/packages/neo-one-cli/src/cmd/start/neotracker.ts b/packages/neo-one-cli/src/cmd/start/neotracker.ts index 07be844fbf..aaf6ee4260 100644 --- a/packages/neo-one-cli/src/cmd/start/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/start/neotracker.ts @@ -8,9 +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); @@ -18,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; } diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index e06e6bcc30..c46063abd2 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -929,7 +929,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; /** 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-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/2-advanced-guides/09-configuration-options.md b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md index d9099db5bc..a703779303 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 @@ -53,11 +53,11 @@ export default { // Refer to the documentation at https://neo-one.io/docs/configuration 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'. + // Set to true if you'd like NEO•ONE to skip starting a NEO Tracker instance when running 'neo-one build'. skip: false, }, }; From 705ec18eeaf448982408ac4ae39f5e6b6ab1480a Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 1 Jun 2020 11:04:34 -0700 Subject: [PATCH 047/141] fix(cli): change default network paths to neotracker/local (#2051) --- .../update-networks_2020-05-27-22-10.json | 11 +++++++++++ packages/neo-one-cli-common-node/src/networks.ts | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json diff --git a/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json b/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json new file mode 100644 index 0000000000..ccb1949a74 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "update defaultNetworks to live nodes", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/src/networks.ts b/packages/neo-one-cli-common-node/src/networks.ts index 6fcaeb9891..19a245d1bf 100644 --- a/packages/neo-one-cli-common-node/src/networks.ts +++ b/packages/neo-one-cli-common-node/src/networks.ts @@ -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'), }, }; From 9106f883d7ffab4e80ed0054e746b3135b3eb30a Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 1 Jun 2020 11:08:15 -0700 Subject: [PATCH 048/141] feat(docs): Add initial documention for deploying to a public network (#2052) --- .../docs/1-main-concepts/12-deployment.md | 16 +++++++++++- .../2-advanced-guides/02-user-accounts.md | 2 +- .../09-configuration-options.md | 26 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) 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 9b7fa80826..5f2ef539d0 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 @@ -105,4 +105,18 @@ export default ({ token, ico, escrow }: MigrationContracts, _network: string) => ## 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..6ea6ffaf21 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/09-configuration-options.md b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md index a703779303..f7d972f9bd 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 @@ -62,3 +62,29 @@ export default { }, }; ``` + +## 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](https://github.com/neo-one-suite/neo-one/blob/ea855d82640550cb00830ea8a4596c8b01108cf7/packages/neo-one-cli-common-node/src/networks.ts#L5) which will prompt you to provide a list of `privateKeys` for use on the network when deploying _or_ you can provide your own UserAccountProvider, such as: + +```typescript +const keystore = new LocalKeyStore(new LocalMemoryStore()); +keystore.addUserAccount('exampleNetwork', 'PRIVATE_KEY'); +export default { +//... + networks: { + exampleNetwork: new LocalUserAccountProvider({ + keystore, + provider: new NEOONEProvider([{ 'exampleNetwork', 'exampleRpcURL.io/rpc'}]) + }) + } +} +``` + +::: warning + +Note + +While hard coding the `LocalUserAccountProvider` is a viable option in testing this also requires storing a `privateKey` as plain text in a file that would traditionally be checked into version control, i.e github. For this reason we recommend only using a hard coded value for local on-the-fly testing / debugging. + +::: From a70b624b8a80adf787eaccb311dea67666b21e58 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 1 Jun 2020 11:20:29 -0700 Subject: [PATCH 049/141] fix(web): fix website commands that were using /lib paths still (#2054) --- .vscode/settings.json | 2 +- common/config/rush/command-line.json | 26 +++++++++---------- packages/neo-one-build-tools/src/clean.ts | 2 +- .../src/loaders/packagesLoader.ts | 4 +-- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5e848e4fda..f0e7fc10e7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,6 +19,6 @@ "*.d.ts.map": "json" }, "search.exclude": { - "packages/*/lib/**": true + "packages/*/dist/**": true } } diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index f26ba7d353..f572a1a55e 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -23,7 +23,7 @@ "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/lib/compile --bundle workers --watch" + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle workers --watch" }, { "commandKind": "global", @@ -31,7 +31,7 @@ "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/lib/compile --bundle overlay --watch" + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle overlay --watch" }, { "commandKind": "global", @@ -39,7 +39,7 @@ "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/lib/compile --bundle testRunner --watch" + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle testRunner --watch" }, { "commandKind": "global", @@ -47,7 +47,7 @@ "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/lib/compile --bundle preview --watch" + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle preview --watch" }, { "commandKind": "global", @@ -55,7 +55,7 @@ "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/lib/compile --watch --bundle server" + "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", @@ -87,7 +87,7 @@ "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/lib/compile --bundle workers" + "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", @@ -95,7 +95,7 @@ "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/lib/compile --bundle overlay" + "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", @@ -103,7 +103,7 @@ "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/lib/compile --bundle preview && serve dist/preview -p 8080" + "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", @@ -111,7 +111,7 @@ "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/lib/compile --bundle testRunner && serve dist/testRunner -p 8081" + "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", @@ -143,7 +143,7 @@ "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/lib/compile --bundle testRunner && node ./packages/neo-one-build-tools-web/lib/compile --bundle server && node ./packages/neo-one-build-tools-web/lib/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" + "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=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build && sh ./scripts/rm-cruft" }, { "commandKind": "global", @@ -238,7 +238,7 @@ "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/lib/runCypress" + "shellCommand": "node ./packages/neo-one-build-tools-web/dist/runCypress" }, { "commandKind": "global", @@ -260,7 +260,7 @@ "commandKind": "global", "name": "clean", "summary": "Clean up NEO-ONE packages", - "description": "Remove build logs from all packages (and optionally lib/* and .rush/* directories)", + "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" }, @@ -366,7 +366,7 @@ "parameterKind": "flag", "longName": "--full", "shortName": "-f", - "description": "enables cleaning of lib/* and rush/* directories", + "description": "enables cleaning of dist/* and rush/* directories", "associatedCommands": ["clean"] }, { diff --git a/packages/neo-one-build-tools/src/clean.ts b/packages/neo-one-build-tools/src/clean.ts index 1155c94930..a6d6bcd773 100644 --- a/packages/neo-one-build-tools/src/clean.ts +++ b/packages/neo-one-build-tools/src/clean.ts @@ -5,7 +5,7 @@ import yargs from 'yargs'; const argv = yargs .boolean('full') - .describe('full', 'flag for also cleaning lib/* and .rush/* directories') + .describe('full', 'flag for also cleaning dist/* and .rush/* directories') .default('full', false) .boolean('debug') .describe('debug', 'flag for logging actions') diff --git a/packages/neo-one-editor/src/loaders/packagesLoader.ts b/packages/neo-one-editor/src/loaders/packagesLoader.ts index f0989d42da..cfa37ff310 100644 --- a/packages/neo-one-editor/src/loaders/packagesLoader.ts +++ b/packages/neo-one-editor/src/loaders/packagesLoader.ts @@ -68,7 +68,7 @@ export const getPackages = async (loader: webpack.loader.LoaderContext) => { const packagePaths = packageDirs.map((dir) => path.resolve(PACKAGES_DIR, dir)); const packageFilesList = await Promise.all( packagePaths.map(async (packagePath) => { - const hasLib = await fs.pathExists(path.resolve(packagePath, 'lib')); + const hasDist = await fs.pathExists(path.resolve(packagePath, 'dist')); return getPackageFiles( loader, @@ -77,7 +77,7 @@ export const getPackages = async (loader: webpack.loader.LoaderContext) => { (file) => file.includes('__') || file.includes('node_modules') || - (hasLib && file.includes('src')) || + (hasDist && file.includes('src')) || file.includes('.md') || file.includes('package-deps.json') || file.includes('.log') || From e60eaf149c1a373d048f4fe36d66e819abee19ea Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 4 Jun 2020 16:07:10 -0700 Subject: [PATCH 050/141] feat(docs): Add `MigrationSmartContract` documentation (#2053) --- .../migration-docs_2020-05-28-22-23.json | 11 ++++++++++ .../src/contracts/genContracts.ts | 2 +- .../docs/1-main-concepts/12-deployment.md | 22 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json diff --git a/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json b/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json new file mode 100644 index 0000000000..eedde8788f --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-codegen", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file 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-website/docs/1-main-concepts/12-deployment.md b/packages/neo-one-website/docs/1-main-concepts/12-deployment.md index 5f2ef539d0..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 @@ -103,6 +103,28 @@ 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 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: From 283b3755846241ee27248da27f55c137a9fd0324 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 4 Jun 2020 16:40:44 -0700 Subject: [PATCH 051/141] fix(docs): fixup test snapshots / update CI glob path (#2057) --- .circleci/config.yml | 4 ++-- .../__snapshots__/genCommonBrowserFiles.test.ts.snap | 2 +- .../src/__tests__/__snapshots__/genCommonFiles.test.ts.snap | 2 +- .../contracts/__snapshots__/genContracts.test.ts.snap | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e5b3214d26..7a26b3af53 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -77,7 +77,7 @@ aliases: at: ./ - run: name: Test - command: node common/scripts/install-run-rush.js test-ci --test-path-pattern '$(circleci tests glob packages/*/src/__tests__/**/*.test.ts)' --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: node common/scripts/install-run-rush.js upload-coverage -F unit @@ -118,7 +118,7 @@ aliases: at: ./ - run: name: Test - command: node common/scripts/install-run-rush.js test-ci --test-path-pattern '$(circleci tests glob packages/*/src/__tests__/**/*.test.ts)' --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: node common/scripts/install-run-rush.js upload-coverage -F unit 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..47adebf1f4 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 @@ -216,7 +216,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..9f8f02dc4a 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 @@ -272,7 +272,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__/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; From 4be264a3382f1b95e526f18470dad44dd8f6d37e Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 4 Jun 2020 17:31:32 -0700 Subject: [PATCH 052/141] fix(CI): update blockchain.test.ts (#2058) --- .../src/__tests__/compile/builtins/contract/blockchain.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..73409f297c 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,7 @@ describe('Blockchain', () => { assertEqual(transaction.type, TransactionType.Invocation); const attributes = transaction.attributes; - assertEqual(attributes.length, 3); + assertEqual(attributes.length, 4); const attribute = attributes[0]; From aba0a62dcb0a13522086a1b2051289395e15e1d7 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 5 Jun 2020 22:45:38 -0700 Subject: [PATCH 053/141] fix(cli): make cli command info syntax consistent (#2059) --- packages/neo-one-cli/src/cmd/compile.ts | 2 +- packages/neo-one-cli/src/cmd/convert/index.ts | 2 +- packages/neo-one-cli/src/cmd/new/index.ts | 2 +- packages/neo-one-cli/src/cmd/start/index.ts | 2 +- packages/neo-one-cli/src/cmd/stop/index.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/neo-one-cli/src/cmd/compile.ts b/packages/neo-one-cli/src/cmd/compile.ts index abc7f4c55d..ea8f067938 100644 --- a/packages/neo-one-cli/src/cmd/compile.ts +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -4,7 +4,7 @@ import { start } from '../common'; import { createTasks } from '../compile'; export const command = 'compile'; -export const describe = 'compile a project and output code to a local directory'; +export const describe = 'Compiles a project and outputs code to a local directory.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder .string('outDir') diff --git a/packages/neo-one-cli/src/cmd/convert/index.ts b/packages/neo-one-cli/src/cmd/convert/index.ts index 57783fa227..55011c62f4 100644 --- a/packages/neo-one-cli/src/cmd/convert/index.ts +++ b/packages/neo-one-cli/src/cmd/convert/index.ts @@ -6,6 +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); 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..041c4ef2ed 100644 --- a/packages/neo-one-cli/src/cmd/start/index.ts +++ b/packages/neo-one-cli/src/cmd/start/index.ts @@ -3,5 +3,5 @@ import * as neotracker from './neotracker'; import * as network from './network'; export const command = 'start'; -export const describe = 'Start NEO•ONE services.'; +export const describe = 'Starts NEO•ONE services.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); diff --git a/packages/neo-one-cli/src/cmd/stop/index.ts b/packages/neo-one-cli/src/cmd/stop/index.ts index 0ae748320b..75efc7a4d9 100644 --- a/packages/neo-one-cli/src/cmd/stop/index.ts +++ b/packages/neo-one-cli/src/cmd/stop/index.ts @@ -3,5 +3,5 @@ import * as neotracker from './neotracker'; import * as network from './network'; export const command = 'stop'; -export const describe = 'Stop NEO•ONE services.'; +export const describe = 'Stops NEO•ONE services.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); From 4d3b5c29861117acf546faf7f5f7375283ec16e1 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 8 Jun 2020 12:15:35 -0700 Subject: [PATCH 054/141] fix(client): fix #1997 (#2056) --- .../create-client-fix_2020-06-04-23-23.json | 11 +++ .../create-client-fix_2020-06-04-23-23.json | 11 +++ .../create-client-fix_2020-06-04-23-23.json | 11 +++ .../create-client-fix_2020-06-04-23-23.json | 11 +++ .../create-client-fix_2020-06-04-23-23.json | 11 +++ .../rush/browser-approved-packages.json | 4 + common/config/rush/yarn.lock | 57 +++++++------ .../projects/exchange/codegen/client.ts | 82 +++++-------------- .../projects/exchange/codegen/sourceMaps.ts | 12 +-- .../projects/ico-Js/codegen/client.js | 82 +++++-------------- .../projects/ico-Js/codegen/sourceMaps.js | 8 +- .../projects/ico-angular/codegen/client.ts | 82 +++++-------------- .../ico-angular/codegen/sourceMaps.ts | 8 +- .../projects/ico-angularJs/codegen/client.js | 82 +++++-------------- .../ico-angularJs/codegen/sourceMaps.js | 8 +- .../projects/ico-vue/codegen/client.ts | 82 +++++-------------- .../projects/ico-vue/codegen/sourceMaps.ts | 8 +- .../projects/ico-vueJs/codegen/client.js | 82 +++++-------------- .../projects/ico-vueJs/codegen/sourceMaps.js | 8 +- .../__data__/projects/ico/codegen/client.ts | 82 +++++-------------- .../projects/ico/codegen/sourceMaps.ts | 8 +- packages/neo-one-client-core/package.json | 1 + .../neo-one-client-core/src/clientUtils.ts | 23 +++++- packages/neo-one-client-core/src/index.ts | 3 +- packages/neo-one-client/src/index.ts | 1 + .../src/transaction/common.ts | 1 - .../genCommonBrowserFiles.test.ts.snap | 28 +++---- .../__snapshots__/genCommonFiles.test.ts.snap | 28 +++---- .../genBrowserClient.test.ts.snap | 18 ++-- .../__snapshots__/genClient.test.ts.snap | 18 ++-- .../src/client/genBrowserClient.ts | 13 ++- .../src/client/genClient.ts | 13 ++- 32 files changed, 334 insertions(+), 563 deletions(-) create mode 100644 common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json create mode 100644 common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json create mode 100644 common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json create mode 100644 common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json diff --git a/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json new file mode 100644 index 0000000000..3702d66fee --- /dev/null +++ b/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json new file mode 100644 index 0000000000..9ddf5b2cad --- /dev/null +++ b/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "fix #1997", + "type": "patch" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json new file mode 100644 index 0000000000..6e8bf960e3 --- /dev/null +++ b/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client", + "comment": "fix #1997", + "type": "patch" + } + ], + "packageName": "@neo-one/client", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json new file mode 100644 index 0000000000..dd0e2bc5d5 --- /dev/null +++ b/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json new file mode 100644 index 0000000000..ee4d083c4b --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-codegen", + "comment": "fix #1997", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 16ef76553c..60f8ad3d72 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -1090,6 +1090,10 @@ "name": "styled-tools", "allowedCategories": [ "production", "tools", "web" ] }, + { + "name": "synchronized-promise", + "allowedCategories": [ "production" ] + }, { "name": "tapable", "allowedCategories": [ "production" ] diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index a0c8231200..01fdfc0a24 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2094,7 +2094,7 @@ ts-loader "^6.1.0" ts-node "^8.4.1" tslint "^5.20.0" - typescript "3.8.1-rc" + typescript "3.8.3" url-loader "^3.0.0" webpack "^4.40.2" webpack-bundle-analyzer "^3.4.1" @@ -2148,7 +2148,7 @@ tslint-immutable "^6.0.1" tslint-microsoft-contrib "^6.2.0" tslint-sonarts "^1.9.0" - typescript "3.8.1-rc" + typescript "3.8.3" yargs "^14.2.0" "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": @@ -2209,7 +2209,7 @@ source-map "^0.7.3" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" yargs "^14.2.0" zone.js "^0.10.2" @@ -2300,14 +2300,6 @@ dependencies: "@babel/code-frame" "^7.0.0" "@ledgerhq/hw-transport-u2f" "^4.68.2" - "@opencensus/core" "^0.0.19" - "@opencensus/exporter-jaeger" "^0.0.19" - "@opencensus/exporter-prometheus" "^0.0.19" - "@opencensus/nodejs-base" "^0.0.19" - "@opencensus/propagation-tracecontext" "^0.0.19" - "@opencensus/web-core" "^0.0.7" - "@opencensus/web-propagation-tracecontext" "^0.0.7" - "@opencensus/web-types" "^0.0.7" "@types/babel__code-frame" "^7.0.1" "@types/ledgerhq__hw-transport" "^4.21.1" "@types/ledgerhq__hw-transport-node-hid" "^4.22.1" @@ -2459,7 +2451,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -2517,7 +2509,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" @@ -2839,7 +2831,7 @@ "@types/prettier" "^1.18.2" gulp "~4.0.2" lodash "^4.17.15" - prettier "^1.18.2" + prettier "^2.0.1" safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" @@ -2854,7 +2846,7 @@ glob "^7.1.4" gulp "~4.0.2" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" @@ -2878,7 +2870,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" @@ -2886,7 +2878,6 @@ dependencies: "@types/jest" "^24.0.18" bignumber.js "^9.0.0" - gulp "~4.0.2" tslib "^1.10.0" "@rush-temp/smart-contract-test-browser@file:./projects/smart-contract-test-browser.tgz": @@ -2922,13 +2913,11 @@ resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: gulp "~4.0.2" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" resolved "file:./projects/smart-contract.tgz" - dependencies: - gulp "~4.0.2" "@rush-temp/suite@file:./projects/suite.tgz": version "0.0.0" @@ -2945,7 +2934,7 @@ lodash "^4.17.15" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" @@ -2963,7 +2952,7 @@ lodash "^4.17.15" toposort "^2.0.2" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" yargs "^14.2.0" "@rush-temp/utils-node@file:./projects/utils-node.tgz": @@ -2993,7 +2982,7 @@ lodash "^4.17.15" rxjs "^6.5.3" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" @@ -3059,7 +3048,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.1-rc" + typescript "3.8.3" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -7880,6 +7869,14 @@ dateformat@^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" @@ -14608,6 +14605,11 @@ node-abi@^2.7.0: dependencies: semver "^5.4.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" @@ -19255,6 +19257,13 @@ 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== +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: + deasync "^0.1.15" + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" 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 index 128ced08de..89b6703f07 100644 --- a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts @@ -1,7 +1,8 @@ -/* @hash cc22deec02b78c38de97754994eeef14 */ +/* @hash a2282d199c3b73ce49d8e942402b94a7 */ // 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}:10000/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10330/rpc` })), }); 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 index 79b1ab7571..3c96373911 100644 --- a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts @@ -1,4 +1,4 @@ -/* @hash 6548f4d5dd508ca8926d480af7ecd8b3 */ +/* @hash 4d3a0c5a2890db595d75a5a337406243 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -11,7 +11,7 @@ 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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAC/C;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;AAIiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AA1GpB;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;AA0GoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1GpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0GQ;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;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;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/lib/index.d.ts'], + 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", @@ -25,7 +25,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -38,7 +38,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AACgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuD;AAAA;AAAA;AAAA;AAAA;AAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;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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;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/lib/index.d.ts'], + 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", @@ -52,7 +52,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/CoinICO.ts', '../neo-one/contracts/Coin.ts', - '../../../../../../neo-one-smart-contract/lib/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 { 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", @@ -65,7 +65,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", 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 7a24c5a1e6..3a18f159c9 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 22117686016222857105d2c4f9dfcb88 */ +/* @hash d6ea705b14f96cc6e36054a00d0ae431 */ // 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}:10010/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10280/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}:10010/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10280/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 56c6307005..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 94b1d405bd463cf257886fe9de97662a */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -12,7 +12,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -25,7 +25,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -36,7 +36,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", 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 081acbf193..87b0a87daa 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 62c81cb3802f775995035832c616b05b */ +/* @hash 6ef27ae2aad6ca4477abfcf75bec1f9c */ // 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}:10020/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10290/rpc` })), }); 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 735ffdd579..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 20e1b85b2e2141ba2b4515dc3b173846 */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -14,7 +14,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -27,7 +27,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -38,7 +38,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", 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 14884ecbf1..e75d749740 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 f46d3990a4894d6a61d9ff22499ee172 */ +/* @hash 40b2bf7aff76c2c29dc81c7eb5e01b7e */ // 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}:10030/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10300/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}:10030/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10300/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 56c6307005..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 94b1d405bd463cf257886fe9de97662a */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -12,7 +12,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -25,7 +25,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -36,7 +36,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", 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 704b511e05..d5c170608d 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 52c353d47e30c3e4c1036416ac26de71 */ +/* @hash 4cf2fe44bd47f7da7304354c526c0f0e */ // 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}:10040/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10310/rpc` })), }); 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 735ffdd579..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 20e1b85b2e2141ba2b4515dc3b173846 */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -14,7 +14,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -27,7 +27,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -38,7 +38,7 @@ 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;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;AAuDkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvDlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAA;AAAA;AAAA;AAAA;AACjG;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;AAImB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AApBtB;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;AAoBsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAZ;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;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;AAlBnB;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;AAkBmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlBnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAT;AAAA;AAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAmB;AAAA;AAAoB;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;AAAvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAgB;AAAA;AAAqB;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;AAApB;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAG4B;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;AAAA;AAAuB;AAAA;AAAqB;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;AAA3B;AAAA;AAAJ;AAAqD;AAAA;AAAA;AAAA;AAAA;AACW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9D1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAuDU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3C;AAAA;AAAmD;AAAA;AAAA;AAAA;AAAA;AAAnD;AAAoE;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;AAAjE;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;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/lib/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\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", 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 55da2be1e4..b0c4bd2070 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 db83d007b86b64c594c868c08d8b514a */ +/* @hash 4e4322dd7408ed74b2d212c2855536aa */ // 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}:10050/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10320/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}:10050/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10320/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 56c6307005..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 94b1d405bd463cf257886fe9de97662a */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -12,7 +12,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -25,7 +25,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -36,7 +36,7 @@ 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;AAAA;AAAA;AACyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;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;AAEI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAoB;AAAA;AAAA;AAAA;AAAA;AAClB;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;AADkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIb;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAjCqG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkF;AAAA;AAAA;AAAA;AAAA;AAC5E;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;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;AAAwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AArDzC;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;AAqDyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArDzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqD2E;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;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'], + 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", 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 128ced08de..91a90f6834 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 cc22deec02b78c38de97754994eeef14 */ +/* @hash dc52460d87903fd57701aaa3c02f0fe5 */ // 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}:10000/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10270/rpc` })), }); 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 735ffdd579..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 20e1b85b2e2141ba2b4515dc3b173846 */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -14,7 +14,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../neo-one-smart-contract/lib/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", @@ -27,7 +27,7 @@ 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', '../../../../../../neo-one-smart-contract/lib/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\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", @@ -38,7 +38,7 @@ 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAC/C;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;AAIiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AA1GpB;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;AA0GoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1GpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0GQ;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;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;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'], + 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", diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index b58db80d5f..aaa9fba56c 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -25,6 +25,7 @@ "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" }, diff --git a/packages/neo-one-client-core/src/clientUtils.ts b/packages/neo-one-client-core/src/clientUtils.ts index 6d87229bd4..290f671a12 100644 --- a/packages/neo-one-client-core/src/clientUtils.ts +++ b/packages/neo-one-client-core/src/clientUtils.ts @@ -1,4 +1,14 @@ -import { AddressString, addressToScriptHash, common, ScriptBuilder, ScriptBuilderParam } from '@neo-one/client-common'; +import { + AddressString, + addressToScriptHash, + BufferString, + common, + NetworkType, + ScriptBuilder, + ScriptBuilderParam, +} from '@neo-one/client-common'; +import sp from 'synchronized-promise'; +import { LocalKeyStore } from './user'; const getInvokeMethodInvocationScript = ({ method, @@ -28,6 +38,17 @@ const getInvokeMethodScript = ({ 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/index.ts b/packages/neo-one-client-core/src/index.ts index 0b52395c1a..612c9cc58a 100644 --- a/packages/neo-one-client-core/src/index.ts +++ b/packages/neo-one-client-core/src/index.ts @@ -1,4 +1,5 @@ import * as args from './args'; +import { addLocalKeysSync } from './clientUtils'; import * as nep5 from './nep5'; export * from './AsyncBlockIterator'; @@ -11,4 +12,4 @@ 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/src/index.ts b/packages/neo-one-client/src/index.ts index 4a88971265..a1a998e8b5 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -181,6 +181,7 @@ export { } from '@neo-one/client-common'; export { + addLocalKeysSync, Client, connectRemoteUserAccountProvider, Dapi, diff --git a/packages/neo-one-node-core/src/transaction/common.ts b/packages/neo-one-node-core/src/transaction/common.ts index 0e1900c577..0f19955740 100644 --- a/packages/neo-one-node-core/src/transaction/common.ts +++ b/packages/neo-one-node-core/src/transaction/common.ts @@ -1,4 +1,3 @@ -// tslint:disable no-loop-statement import { Input } from './Input'; export const hasDuplicateInputs = (inputs: readonly Input[]): boolean => { 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 47adebf1f4..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, + ); } } } 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 9f8f02dc4a..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, + ); } } } 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/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, From 1fe420d7a03f1d32e87a4c56a6871d22a2e2d240 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 11 Jun 2020 22:59:52 -0700 Subject: [PATCH 055/141] fix(nits): fix langauge nits, URL, skip NT to default true (#2062) --- .../nits_2020-06-12-05-42.json | 11 ++++ .../@neo-one/cli/nits_2020-06-12-05-42.json | 11 ++++ .../client-common/nits_2020-06-12-05-42.json | 11 ++++ common/config/rush/command-line.json | 64 +++++++++---------- .../src/configuration.ts | 6 +- .../neo-one-cli/src/build/startNeotracker.ts | 2 +- packages/neo-one-client-common/src/types.ts | 5 +- .../09-configuration-options.md | 4 +- 8 files changed, 74 insertions(+), 40 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json create mode 100644 common/changes/@neo-one/cli/nits_2020-06-12-05-42.json create mode 100644 common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json diff --git a/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json b/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json new file mode 100644 index 0000000000..22648f7a57 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json b/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json new file mode 100644 index 0000000000..2acd363556 --- /dev/null +++ b/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json b/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json new file mode 100644 index 0000000000..4d1e4ee6f0 --- /dev/null +++ b/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index f572a1a55e..1b8a79d786 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -4,7 +4,7 @@ { "commandKind": "global", "name": "link-root", - "summary": "copy node_modules to root (for prod website only)", + "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" @@ -12,8 +12,8 @@ { "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", + "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" }, @@ -21,7 +21,7 @@ "commandKind": "global", "name": "compile-workers-dev", "summary": "Compile workers", - "description": "Compile the NEO-ONE website 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" }, @@ -29,7 +29,7 @@ "commandKind": "global", "name": "compile-overlay-dev", "summary": "Compile overlay [dev]", - "description": "Compile the NEO-ONE website overlay", + "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" }, @@ -37,7 +37,7 @@ "commandKind": "global", "name": "compile-test-runner-dev", "summary": "Compile test-runner [dev]", - "description": "Compile the NEO-ONE 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" }, @@ -45,7 +45,7 @@ "commandKind": "global", "name": "compile-preview-dev", "summary": "Compile preview [dev]", - "description": "Compile the NEO-ONE editor preview", + "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" }, @@ -53,7 +53,7 @@ "commandKind": "global", "name": "serve-server", "summary": "Compile & serve editor server (only in dev mode)", - "description": "Build and run the NEO-ONE editor server", + "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" }, @@ -61,7 +61,7 @@ "commandKind": "global", "name": "serve-static-dev", "summary": "Build and serve static site [dev]", - "description": "Build and serve NEO-ONE website with React Static [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" }, @@ -77,7 +77,7 @@ "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]", + "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\"" }, @@ -85,7 +85,7 @@ "commandKind": "global", "name": "compile-workers-prod", "summary": "Compile workers [prod]", - "description": "Compile the NEO-ONE website workers", + "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" }, @@ -93,7 +93,7 @@ "commandKind": "global", "name": "compile-overlay-prod", "summary": "Compile overlay [dev]", - "description": "Compile the NEO-ONE website overlay", + "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" }, @@ -101,7 +101,7 @@ "commandKind": "global", "name": "serve-preview-prod", "summary": "Compile & serve preview [prod]", - "description": "Compile and serve the NEO-ONE editor 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" }, @@ -109,7 +109,7 @@ "commandKind": "global", "name": "serve-test-runner-prod", "summary": "Compile & serve test-runner [prod]", - "description": "Compile and serve the NEO-ONE 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" }, @@ -117,7 +117,7 @@ "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", + "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" }, @@ -133,7 +133,7 @@ "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]", + "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\"" }, @@ -188,7 +188,7 @@ { "commandKind": "global", "name": "test", - "summary": "unit test runner", + "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" @@ -196,7 +196,7 @@ { "commandKind": "global", "name": "test-ci", - "summary": "unit test runner (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" }, @@ -236,30 +236,30 @@ "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", + "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": "uploaded codecov coverage reports from unit tests", + "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", + "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", + "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" @@ -267,16 +267,16 @@ { "commandKind": "global", "name": "nit", - "summary": "find issues with formatting", - "description": "run prettier with the `--list-different` parameter for CI", + "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", + "summary": "Run prettier on the repo", + "description": "Run prettier across packages typescript files", "safeForSimultaneousRushProcesses": false, "shellCommand": "prettier --config .prettierrc --write \"packages/*/src/**/*.{ts,tsx}\"" }, @@ -294,8 +294,8 @@ { "commandKind": "bulk", "name": "lint:staged", - "summary": "Runs prettier/tslint across staged files", - "description": "Runs `lint:staged` across packages", + "summary": "Run prettier/tslint across staged files", + "description": "Run `lint:staged` across packages", "safeForSimultaneousRushProcesses": true, "ignoreDependencyOrder": true, "enableParallelism": true, @@ -304,8 +304,8 @@ { "commandKind": "bulk", "name": "lint", - "summary": "Runs tslint for every package", - "description": "Runs tslint for every file in package", + "summary": "Run tslint for every package", + "description": "Run tslint for every file in package", "safeForSimultaneousRushProcesses": true, "ignoreDependencyOrder": true, "enableParallelism": true, diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 16da9d27e0..94b65ad236 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -34,7 +34,7 @@ const configurationDefaults = { neotracker: { path: nodePath.join('.neo-one', 'neotracker'), port: 9041, - skip: false, + skip: true, }, }; @@ -208,7 +208,7 @@ ${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. @@ -216,7 +216,7 @@ ${exportConfig} { // 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, + skip: true, } }; `; 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-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index c46063abd2..7f94791594 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1118,8 +1118,9 @@ export interface TransactionOptions { */ systemFee?: BigNumber; /** - * boolean which determines whether or not to skip the sysFee check before submitting an invocation transaction. Used for working with contracts where the sysFee is known to be less - * than the 10 free GAS. e.g. nep5 + * Boolean which determines whether or not to skip the sysFee check before submitting an invocation transaction. Used for working with contracts where the sysFee is known to be less + * + * than the 10 free GAS, i.e. NEP5 transactions. */ skipSysFeeCheck?: boolean; // tslint:enable readonly-keyword 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 f7d972f9bd..8e5f4888ae 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 @@ -50,7 +50,7 @@ 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. @@ -58,7 +58,7 @@ export default { // 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, + skip: true, }, }; ``` From 8e2b308ed4e05167533c48e0a1fd4303f168a50f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 16 Jun 2020 13:35:25 -0700 Subject: [PATCH 056/141] feat(e2e): add e2e test for neo-one compile (#2064) --- .../compile-e2e_2020-06-16-04-40.json | 11 + .../compile-e2e_2020-06-16-04-40.json | 11 + .../cli/compile-e2e_2020-06-16-04-40.json | 11 + .../environments/e2e/One.js | 6 +- .../src/configuration.ts | 6 + .../neo-one-cli-common/src/configuration.ts | 1 + .../projects/exchange/.neo-one.config.js | 3 + .../projects/exchange/codegen/client.ts | 6 +- .../projects/exchange/codegen/contracts.ts | 4 +- .../projects/ico-Js/.neo-one.config.js | 3 + .../projects/ico-Js/codegen/client.js | 6 +- .../projects/ico-angular/.neo-one.config.js | 3 + .../projects/ico-angular/codegen/client.ts | 6 +- .../projects/ico-angular/codegen/contracts.ts | 4 +- .../projects/ico-angularJs/.neo-one.config.js | 3 + .../projects/ico-angularJs/codegen/client.js | 6 +- .../ico-neotracker/.neo-one.config.js | 3 + .../projects/ico-vue/.neo-one.config.js | 3 + .../projects/ico-vue/codegen/client.ts | 6 +- .../projects/ico-vue/codegen/contracts.ts | 4 +- .../projects/ico-vueJs/.neo-one.config.js | 3 + .../projects/ico-vueJs/codegen/client.js | 6 +- .../__data__/projects/ico/.neo-one.config.js | 3 + .../__data__/projects/ico/codegen/client.ts | 6 +- .../projects/ico/codegen/contracts.ts | 4 +- .../cmd/__snapshots__/compile.test.ts.snap | 8438 +++++++++++++++++ .../src/__e2e__/cmd/compile.test.ts | 60 + packages/neo-one-cli/src/cmd/compile.ts | 6 +- 28 files changed, 8598 insertions(+), 34 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json create mode 100644 common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json create mode 100644 common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json create mode 100644 packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap create mode 100644 packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts diff --git a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json new file mode 100644 index 0000000000..7ea07e18fd --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Adds outDir to neo-one configuration.", + "type": "minor" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} diff --git a/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json new file mode 100644 index 0000000000..5636d91f10 --- /dev/null +++ b/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common", + "comment": "Adds outDir to neo-one configuration.", + "type": "minor" + } + ], + "packageName": "@neo-one/cli-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json new file mode 100644 index 0000000000..190d43ba1b --- /dev/null +++ b/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Adds outDir to neo-one config for output directory path of compile command. Adds E2E test for compile command.", + "type": "minor" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-build-tests/environments/e2e/One.js b/packages/neo-one-build-tests/environments/e2e/One.js index 2a0963970e..6316d169ac 100644 --- a/packages/neo-one-build-tests/environments/e2e/One.js +++ b/packages/neo-one-build-tests/environments/e2e/One.js @@ -126,7 +126,7 @@ class One { }; } - getTmpDir() { + _getTmpDir() { const dir = tmp.dirSync().name; fs.ensureDirSync(dir); this.mutableCleanup.push(async () => { @@ -177,7 +177,7 @@ class One { port, ]), ), - NEO_ONE_TMP_DIR: this.getTmpDir(), + NEO_ONE_TMP_DIR: this._getTmpDir(), }; return { @@ -196,7 +196,7 @@ class One { port, ]), ), - NEO_ONE_TMP_DIR: this.getTmpDir(), + NEO_ONE_TMP_DIR: this._getTmpDir(), }; return { diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 94b65ad236..6427ac9c74 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -18,6 +18,7 @@ const configurationDefaults = { }, contracts: { path: nodePath.join('neo-one', 'contracts'), + outDir: nodePath.join('neo-one', 'compiled'), }, codegen: { path: nodePath.join('src', 'neo-one'), @@ -94,6 +95,7 @@ const configurationSchema = { additionalProperties: false, properties: { path: { type: 'string' }, + outDir: { type: 'string' }, }, }, codegen: { @@ -156,6 +158,7 @@ const relativizePaths = (config: Configuration) => ({ contracts: { ...config.contracts, path: nodePath.relative(process.cwd(), config.contracts.path), + outDir: nodePath.relative(process.cwd(), config.contracts.outDir), }, codegen: { ...config.codegen, @@ -180,6 +183,8 @@ ${exportConfig} { contracts: { // NEO•ONE will look for smart contracts in this directory. path: '${config.contracts.path}', + // The NEO•ONE compile command will output the compile results in this directory. + outDir: '${config.contracts.outDir}', }, artifacts: { // NEO•ONE will store build and deployment artifacts that should be checked in to vcs in this directory. @@ -296,6 +301,7 @@ const validateConfig = async (rootDir: string, configIn: any): Promise ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10330/rpc` })), + 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 index 78d1dda94d..c8e5131709 100644 --- a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts @@ -1,4 +1,4 @@ -/* @hash 16213223f8ade0fb4eb287fd54d1701a */ +/* @hash 4fe191c2c4a879ff8f89833cfe5800f4 */ // tslint:disable /* eslint-disable */ import { Client } from '@neo-one/client'; @@ -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 coin: CoinMigrationSmartContract; readonly coinIco: CoinICOMigrationSmartContract; 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 d08eae36e9..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'), }, 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 3a18f159c9..0e235af593 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,4 +1,4 @@ -/* @hash d6ea705b14f96cc6e36054a00d0ae431 */ +/* @hash cf67ecdbed890bdd640f40dacfed0a42 */ // tslint:disable /* eslint-disable */ import { @@ -51,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}:10280/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10020/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -87,5 +87,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10280/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10020/rpc` })), }); 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 87b0a87daa..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,4 +1,4 @@ -/* @hash 6ef27ae2aad6ca4477abfcf75bec1f9c */ +/* @hash 281b309e14983b410d31265f1cf201e2 */ // tslint:disable /* eslint-disable */ import { @@ -65,7 +65,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10290/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-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 e75d749740..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,4 +1,4 @@ -/* @hash 40b2bf7aff76c2c29dc81c7eb5e01b7e */ +/* @hash 2cf036ce916c8b4860204369700ebb7b */ // tslint:disable /* eslint-disable */ import { @@ -51,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}:10300/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10040/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -87,5 +87,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10300/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10040/rpc` })), }); 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 index 6f4e5c7d75..e1d23934fb 100644 --- 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 @@ -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/.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 d5c170608d..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,4 +1,4 @@ -/* @hash 4cf2fe44bd47f7da7304354c526c0f0e */ +/* @hash 323dea192026bdc30e1e43f4ee149def */ // tslint:disable /* eslint-disable */ import { @@ -65,7 +65,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10310/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-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 b0c4bd2070..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,4 +1,4 @@ -/* @hash 4e4322dd7408ed74b2d212c2855536aa */ +/* @hash f995af2117008df4215bfb5fb468855b */ // tslint:disable /* eslint-disable */ import { @@ -51,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}:10320/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10060/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -87,5 +87,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10320/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10060/rpc` })), }); 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 161c1acbde..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'), }, 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 91a90f6834..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,4 +1,4 @@ -/* @hash dc52460d87903fd57701aaa3c02f0fe5 */ +/* @hash 82a49b09e90daf186eaab069a4a5a09c */ // tslint:disable /* eslint-disable */ import { @@ -65,7 +65,7 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10270/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/__e2e__/cmd/__snapshots__/compile.test.ts.snap b/packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap new file mode 100644 index 0000000000..37bf37fd53 --- /dev/null +++ b/packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap @@ -0,0 +1,8438 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`compile - exchange compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Coin", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Coin", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d0003456e6f5452c1c6046e616d657c6a52c354c37b7bc403454e4f5452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - exchange compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Coin ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "CoinICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c601006676569c642d0075750100c50673796d626f6ce101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c601006676579c642f0075750100c508646563696d616c73e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c601006676599c64320075750100c50b746f74616c537570706c79e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c60100667601179c642d0075750100c50673796d626f6ce101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c60100667601189c642f0075750100c508646563696d616c73e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6498187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662341876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666206187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662cd17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629217760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624017760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373141bcc607af9232110e25bc9c4aade7db8e29109ec5952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b003760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625a0376066465706c6f7987644c0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621903516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc4070080c6a47e8d035652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373141bcc607af9232110e25bc9c4aade7db8e29109ec5952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658ec36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36521c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657dc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b3be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516565be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652cbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f1bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bfbd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - exchange compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "deposited", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "assetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "withdrawn", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "assetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "offerCreated", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "makerAddress", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "offerAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "offerAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "wantAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "wantAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + ], + }, + Object { + "name": "offerCancelled", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + ], + }, + Object { + "name": "burnt", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "filler", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "takerFeeAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "takerFeeAmount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "offerFilled", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "filler", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amountToFill", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "offerAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "offerAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "wantAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "wantAmount", + "optional": false, + "type": "Integer", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amountToTake", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "assetID", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "getOffer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": true, + "properties": Object { + "maker": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + "makerFeeAssetID": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + "makerFeeAvailableAmount": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "nonce": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + "offerAmount": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "offerAssetID": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + "wantAmount": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "wantAssetID": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + "type": "Object", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "depositNEP5", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "assetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "withdrawNEP5", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "assetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "makeOffer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "maker", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "offerAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "offerAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "wantAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "wantAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "makerFeeAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "makerFeeAvailableAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "nonce", + "optional": false, + "type": "String", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "fillOffer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "filler", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amountToTake", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "takerFeeAssetID", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "takerFeeAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "burnTakerFee", + "optional": false, + "type": "Boolean", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "makerFeeAmount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "burnMakerFee", + "optional": false, + "type": "Boolean", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "cancelOffer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "maker", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "offerHash", + "optional": false, + "type": "Hash256", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "constant": true, + "name": "feeAddress", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "name": "setFeeAddress", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "feeAddress", + "optional": false, + "type": "Address", + }, + ], + "returnType": Object { + "type": "Void", + }, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "", + "codeVersion": "1.0", + "description": "", + "dynamicInvoke": true, + "email": "", + "name": "Exchange", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62fd7c7601009c644300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2096465706f73697465647c8bc16804050792165151c1c601006676519c644300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c20977697468647261776e7c8bc16804050792165151c1c601006676529c646400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c75c20c6f66666572437265617465647c8bc16804050792165151c1c601006676539c643400750100c57c760100c351c37b7d7cc87c75c20e6f6666657243616e63656c6c65647c8bc16804050792165151c1c601006676549c643f00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2056275726e747c8bc16804050792165151c1c601006676559c647700750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c75c20b6f6666657246696c6c65647c8bc16804050792165151c1c601006676569c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676579c649a0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50100007c056572726f7253c168040507921604bb01000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90100007c056572726f7253c168040507921604ef01000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc02000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c643a0d75516a52c30100c37cc36a0100c3c7c8760100c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044d0300007c056572726f7253c1680405079216045303000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c352c301007bc475756a0100c352c30100c351629b006239007601009c642200756a0100c352c301007bc475756a0100c352c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075041e04000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575760100c3519c640800750062490bc77d78056d616b65727d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3517bc46a0100c351c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3517bc46a0100c351c351c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3655ef86c7501009c633800040105000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780c6f66666572417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3527bc46a0100c351c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3527bc46a0100c351c352c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f5f66c7501009c63380004e805000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780b6f66666572416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3537bc46a0100c351c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658df56c7501009c63380004cf06000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780b77616e74417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3547bc46a0100c351c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3547bc46a0100c351c354c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36525f46c7501009c63380004b607000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780a77616e74416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3557bc46a0100c351c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3557bc46a0100c351c355c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365bef26c7501009c633800049d08000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780f6d616b6572466565417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3567bc46a0100c351c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3567bc46a0100c351c356c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36552f16c7501009c633800048409000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d78176d616b6572466565417661696c61626c65416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3577bc46a0100c351c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3577bc46a0100c351c357c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365deef6c7501009c633800046b0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d78056e6f6e63657d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3587bc46a0100c351c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3587bc46a0100c351c358c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3657cee6c7501009c63380004520b000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c776a0100c376c08cca010066765a9c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c354c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676599c64af0a75516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f20b00007c056572726f7253c168040507921604f80b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304260c00007c056572726f7253c1680405079216042c0c000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36468001a43616c6c657220776173206e6f74207468652073656e646572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a60c00007c056572726f7253c168040507921604ac0c000005747261636552c16804050792165162a3086a0100c351c352c3515652c1c651c37c51c37c9f5352c1c651c3646c001e416d6f756e74206d7573742062652067726561746572207468616e2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e80c00007c056572726f7253c168040507921604ee0c000005747261636552c168040507921651621d086a0100c351c352c36a0100c351c351c3680487c3d2645952c1c66a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c86a0100c353c352c36a0100c354c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c354c301007bc46a0100c354c30100c3766a0100c353c353c36a0100c353c351c36a0100c353c30100c353c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3527bc46a0100c354c352c3516290016235007601009c641e00756a0100c354c3527bc46a0100c354c352c3010054626e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b7e96c7501009c631a0004650e000005747261636552c16804050792165162e900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3654ae96c7501009c631a0004af0e000005747261636552c168040507921651627c0051c3915352c1c651c3646e00204661696c656420746f207472616e73666572204e45502d3520746f6b656e73215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304db0e00007c056572726f7253c168040507921604e10e000005747261636552c16804050792165162050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504010f000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63f20476549c63ec04750100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075046010000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e30276549c63dd02756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516243026235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462210262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628a016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462680162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162d4006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462b00062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659be36c7501009c631a00048d12000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504ae12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765c9c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c354c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c642d0d75516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304411300007c056572726f7253c1680405079216044713000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304751300007c056572726f7253c1680405079216047b13000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36430011f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c351621d0b6235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fb0a62130076529c640800757562080075756275ff6a0100c352c352c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1400007c056572726f7253c1680405079216047414000005747261636552c16804050792165162930a6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a015000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63b80876549c63b208756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c36431011f4e6f7420656e6f7567682042616c616e636520746f207769746864726177206a0100c351c352c351c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c35162e3076235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462c10762130076529c640800757562080075756275ff6a0100c352c355c37e01217e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048f1600007c056572726f7253c1680405079216049516000005747261636552c1680405079216516258076a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36479002b43616c6c6572206973206e6f7420617574686f72697a656420746f2077697468647261772066756e6473215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ee1600007c056572726f7253c168040507921604f416000005747261636552c168040507921651628a066a0100c351c352c36a0100c351c351c36a0100c351c30100c3680487c3d2645952c1c654c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c86a0100c353c352c36a0100c354c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c354c301007bc46a0100c354c30100c3766a0100c353c353c36a0100c353c351c36a0100c353c30100c353c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3527bc46a0100c354c352c3516290016235007601009c641e00756a0100c354c3527bc46a0100c354c352c3010054626e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659dda6c7501009c631a00046b18000005747261636552c16804050792165162e900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530da6c7501009c631a0004b518000005747261636552c168040507921651627c0051c3915352c1c651c3646e00204661696c656420746f207472616e73666572204e45502d3520746f6b656e73215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e11800007c056572726f7253c168040507921604e718000005747261636552c16804050792165162050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075040719000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c635f0376549c635903750100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504661a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63500176549c634a017551c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162d3006237007601009c642000756a0100c352c3577bc475756a0100c352c357c301005462af0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36514d66c7501009c631a0004631b000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504841b000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765d9c646d1575516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304d51b00007c056572726f7253c168040507921604db1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304091c00007c056572726f7253c1680405079216040f1c000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc47653c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044c1c00007c056572726f7253c168040507921604521c000005747261636552c168040507921651665952c1c66a0100c351c3537bc47654c35652c1c66a0100c351c3547bc47655c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3048f1c00007c056572726f7253c168040507921604951c000005747261636552c168040507921651665952c1c66a0100c351c3557bc47656c35652c1c66a0100c351c3567bc47657c35452c1c66a0100c351c3577bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648f004143616c6c6572206973206e6f7420617574686f72697a656420746f206d616b6520616e206f66666572206f6e20626568616c66206f6620746865206d616b6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3041e1d00007c056572726f7253c168040507921604241d000005747261636552c1680405079216516248126a0100c351c357c36a0100c351c356c36a0100c351c355c36a0100c351c354c36a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c358c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc47654c36a0100c353c3547bc47655c36a0100c353c3557bc47656c36a0100c353c3567bc47657c36a0100c353c3577bc4756a0100c3c7c86a0100c353c357c351c35952c1c66a0100c353c356c36a0100c353c354c36a0100c353c352c353c15852c1c651c3012c6a0100c354c3517bc4007c680424ef3dbf7c78680442298fe064a703787c786804ab5b018e7b6804813425bc7b7b7c7b01009c64980175760100c3519c6411007509756e646566696e6564627d01760100c3529c640c0075046e756c6c626b01760100c3539c64190051c3640b0004747275656209000566616c7365624c01760100c3569c64bf0051c37601009c64090075013062ad006a0100c354c3527bc4006a0100c354c3537bc46a0100c354c352c30100a06484006a0100c354c352c3765a966a0100c354c3527bc45a970130936a0100c354c353c37e6a0100c354c3537bc462c7ff7576519c641d00756a0100c354c3547bc46a0100c354c354c351546269026235007601009c641e00756a0100c354c3547bc46a0100c354c354c301005462470262130076529c640800757562080075756274ff6a0100c354c353c3628700760100c3549c64080051c3627900760100c3599c64080051c3626b00760100c3559c780100c3589c9b780100c3579c9b6452007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fa1e00007c056572726f7253c168040507921604001f000005747261636552c1680405079216515462aa016205007500629f016a0100c354c351c37e7c760100c3519c6411007509756e646566696e6564627d01760100c3529c640c0075046e756c6c626b01760100c3539c64190051c3640b0004747275656209000566616c7365624c01760100c3569c64bf0051c37601009c64090075013062ad006a0100c354c3557bc4006a0100c354c3567bc46a0100c354c355c30100a06484006a0100c354c355c3765a966a0100c354c3557bc45a970130936a0100c354c356c37e6a0100c354c3567bc462c7ff7576519c641d00756a0100c354c3577bc46a0100c354c357c3515462cb006235007601009c641e00756a0100c354c3577bc46a0100c354c357c301005462a90062130076529c640800757562080075756274ff6a0100c354c356c3628700760100c3549c64080051c3627900760100c3599c64080051c3626b00760100c3559c780100c3589c9b780100c3579c9b6452007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304ff1f00007c056572726f7253c1680405079216040520000005747261636552c16804050792165154620c0062050075007e62abfc7576519c641e00756a0100c354c3587bc475756a0100c354c358c351620f016237007601009c642000756a0100c354c3587bc475756a0100c354c358c301005462eb0062130076529c640800757562080075756255fc775452c1c651c35952c1c66a0100c353c355c36a0100c353c353c36a0100c353c351c36a0100c353c30100c356c15852c1c651c3007c68044eaada587c78680442298fe0646a00787c7c6804ab5b018e7c7c51c37e62e8ff7576519c641e00756a0100c354c3597bc475756a0100c354c359c3516261006237007601009c642000756a0100c354c3597bc475756a0100c354c359c3010054623d0062130076529c640800757562080075756292ff775952c1c66a0100c354c301007bc46a0100c354c30100c351c3aa5952c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075040521000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63880c76549c63820c756a0100c352c301007bc46a0100c352c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f821000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010b76549c63fb0a755151c1c67c760100c3519c640900757551620600757500915352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304472200007c056572726f7253c1680405079216044d22000005747261636552c16804050792165162790a6a0100c351c352c301005652c1c67c51c37c51c37c9f915352c1c67651c3631f00756a0100c351c354c301005652c1c67c51c37c51c37c9f915352c1c651c364760028496e76616c696420616d6f756e742e20416c6c20616d6f756e7473206d757374206265203e2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a92200007c056572726f7253c168040507921604af22000005747261636552c16804050792165162c4096a0100c351c351c36a0100c351c353c37c51c37c51c3875352c1c651c36476002843616e6e6f74206d616b6520616e206f6666657220666f72207468652073616d65206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ed2200007c056572726f7253c168040507921604f322000005747261636552c1680405079216516231096a0100c351c356c301005652c1c651c37c51c37c9f5352c1c651c36471002346656520617661696c61626c6520616d6f756e742063616e6e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3042f2300007c056572726f7253c1680405079216043523000005747261636552c16804050792165162a5080100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075048024000005747261636552c168040507921651620700757501006a0100c376c08cca76519c639d0676549c6397067551c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3517bc475756a0100c352c351c3516220066237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462fc0562130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c355c36a0100c351c353c37c51c37c51c387915352c1c67651c3641e00756a0100c351c356c301005652c1c67c51c37c51c37c9f5352c1c651c36407036a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c355c36a0100c351c30100c352c15852c1c66a0100c351c355c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504b826000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40076549c63de007551c36a0100c351c356c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63830276549c637d02750100c50100066f666665727353c1c6011152c1c66a0100c352c30100c3c7c7c753c15752c1c676056d616b65726a0100c351c30100c37b51c30100c37b7b51c1c4760c6f66666572417373657449446a0100c351c351c37b51c30100c37b7b51c1c4760b6f66666572416d6f756e746a0100c351c352c37b51c30100c37b7b51c1c4760b77616e74417373657449446a0100c351c353c37b51c30100c37b7b51c1c4760a77616e74416d6f756e746a0100c351c354c37b51c30100c37b7b51c1c4760f6d616b6572466565417373657449446a0100c351c355c37b51c30100c37b7b51c1c476176d616b6572466565417661696c61626c65416d6f756e746a0100c351c356c37b51c30100c37b7b51c1c476056e6f6e63656a0100c351c357c37b51c30100c37b7b51c1c47c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162ec006237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462c80062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c30100c36a0100c351c354c36a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c356c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365a4c06c7501009c631a00041929000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075043a29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765e9c64d65175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3048b2900007c056572726f7253c1680405079216049129000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304bf2900007c056572726f7253c168040507921604c529000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc47653c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304022a00007c056572726f7253c168040507921604082a000005747261636552c168040507921651665952c1c66a0100c351c3537bc47654c35652c1c66a0100c351c3547bc47655c3768201009c640a005352c1c66207005352c1c66a0100c351c3557bc47656c35652c1c66a0100c351c3567bc47657c3768201009c640a005352c1c66207005352c1c66a0100c351c3577bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648d003f43616c6c6572206973206e6f7420617574686f72697a656420746f2066696c6c206f66666572206f6e20626568616c66206f66207468652066696c6c6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c32a00007c056572726f7253c168040507921604c92a000005747261636552c16804050792165162e64e6a0100c351c354c301005652c1c651c37c51c37c9f5352c1c651c3646d001f74616b6572466565416d6f756e74206d757374206e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304052b00007c056572726f7253c1680405079216040b2b000005747261636552c168040507921651625e4e6a0100c351c356c301005652c1c651c37c51c37c9f5352c1c651c3646d001f6d616b6572466565416d6f756e74206d757374206e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304472b00007c056572726f7253c1680405079216044d2b000005747261636552c16804050792165162d64d6a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504252c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63614c76549c635b4c756a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304822c00007c056572726f7253c168040507921604882c000005747261636552c16804050792165162c74b6a0100c351c30100c36a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc351624b4b6235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462294b62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36569b96c7501009c631a00044b2d000005747261636552c16804050792165162a44a620700770100c3620a007575755151c1c67c51c37c51c3875352c1c651c36475002746696c6c65722063616e6e6f74206265207468652073616d6520617320746865206d616b6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304872d00007c056572726f7253c1680405079216048d2d000005747261636552c16804050792165162114a6a0100c351c352c3515652c1c651c37c51c37c9f5352c1c651c36485003746696c6c6572206d7573742074616b652061206e6f6e7a65726f20616d6f756e74206f6620746865206f666665726564206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c92d00007c056572726f7253c168040507921604cf2d000005747261636552c1680405079216516272496a0100c351c352c36a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162f1486235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462cf4862130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3650fb76c7501009c631a0004922e000005747261636552c168040507921651624a48620700770100c3620a007575755151c1c67c51c37c51c37c9f5352c1c651c3647b002d46696c6c6572207265717565737473206d6f7265207468616e20617661696c61626c6520696e206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304cf2e00007c056572726f7253c168040507921604d52e000005747261636552c16804050792165162b0476a0100c351c352c351c36a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc351622e476235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc3010054620c4762130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3654cb56c7501009c631a00049a2f000005747261636552c168040507921651628746620700770100c3620a007575755151c1c651c3955652c1c651c36a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35e7bc46a0100c352c35ec35162f4456235007601009c641e00756a0100c352c35e7bc46a0100c352c35ec301005462d24562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36512b46c7501009c631a00046b30000005747261636552c168040507921651624d45620700770100c3620a007575755151c1c651c3965652c1c66a0100c352c3517bc46a0100c352c351c3515652c1c651c37c51c37c9f5352c1c651c3647e00304d7573742066696c6c2061206e6f6e7a65726f20616d6f756e74206f6620746865206f666665726564206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c23000007c056572726f7253c168040507921604c830000005747261636552c1680405079216516294446a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35f7bc46a0100c352c35fc351621b446235007601009c641e00756a0100c352c35f7bc46a0100c352c35fc301005462f94362130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36539b26c7501009c631a00048431000005747261636552c168040507921651627443620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504b532000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63904176549c638a41756a0100c352c3527bc46a0100c352c352c36a0100c352c351c351c37c51c37c9f5352c1c651c3646f00214e6f7420656e6f7567682062616c616e636520746f2066696c6c206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3040e3300007c056572726f7253c1680405079216041433000005747261636552c16804050792165162f4406a0100c351c353c36a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301107bc46a0100c352c30110c3516270406237007601009c642000756a0100c352c301107bc46a0100c352c30110c3010054624c4062130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658cae6c7501009c631a0004d733000005747261636552c16804050792165162c73f620700770100c3620a007575755151c1c67c51c37c51c387915352c1c66a0100c352c3537bc46a0100c351c353c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042335000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63c63d76549c63c03d756a0100c352c3547bc46a0100c352c353c37651c3641e00756a0100c351c354c301005652c1c67c51c37c51c37c9f5352c1c67651c3642100756a0100c352c354c36a0100c351c354c37c51c37c51c37c9f915352c1c651c3647a002c46696c6c657220646f6573206e6f74206861766520656e6f7567682062616c616e636520666f7220666565215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a73500007c056572726f7253c168040507921604ad35000005747261636552c16804050792165162ed3c6a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301117bc46a0100c352c30111c35162663c6237007601009c642000756a0100c352c301117bc46a0100c352c30111c301005462423c62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36582aa6c7501009c631a00046936000005747261636552c16804050792165162bd3b620700770100c3620a007575755151c1c66a0100c351c356c351c37c51c37c9f5352c1c651c36479002b4d616b657220646f6573206e6f74206861766520656e6f7567682062616c616e636520666f7220666565215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ac3600007c056572726f7253c168040507921604b236000005747261636552c168040507921651621e3b6a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301127bc46a0100c352c30112c351629f3a6237007601009c642000756a0100c352c301127bc46a0100c352c30112c3010054627b3a62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365bba86c7501009c631a00046e37000005747261636552c16804050792165162f639620700770100c3620a007575755151c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301137bc46a0100c352c30113c351626a396237007601009c642000756a0100c352c301137bc46a0100c352c30113c301005462463962130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36586a76c7501009c631a00043638000005747261636552c16804050792165162c138620700770100c3620a007575755151c1c67c51c37c51c387915352c1c66a0100c352c3557bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301147bc46a0100c352c30114c351620a386237007601009c642000756a0100c352c301147bc46a0100c352c30114c301005462e63762130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36526a66c7501009c631a00041d39000005747261636552c168040507921651626137620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301157bc46a0100c352c30115c35162c6366237007601009c642000756a0100c352c301157bc46a0100c352c30115c301005462a23662130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e2a46c7501009c631a0004f239000005747261636552c168040507921651621d36620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504233b000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63393476549c6333347551c36a0100c352c351c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301167bc475756a0100c352c30116c35162ba336239007601009c642200756a0100c352c301167bc475756a0100c352c30116c301005462943362130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c355c351c3640e006a0100c352c351c3621c006a0100c352c351c351c36a0100c351c356c351c3945652c1c66a0100c352c3567bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301177bc46a0100c352c30117c351628f326237007601009c642000756a0100c352c301177bc46a0100c352c30117c3010054626b3262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365aba06c7501009c631a0004c93c000005747261636552c16804050792165162e631620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301187bc46a0100c352c30118c3516260316237007601009c642000756a0100c352c301187bc46a0100c352c30118c3010054623c3162130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3657c9f6c7501009c631a0004913d000005747261636552c16804050792165162b730620700770100c3620a007575755151c1c652c15852c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301197bc46a0100c352c30119c3516225306237007601009c642000756a0100c352c301197bc46a0100c352c30119c301005462013062130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365419e6c7501009c631a00045f3e000005747261636552c168040507921651627c2f620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3011a7bc46a0100c352c3011ac35162f62e6237007601009c642000756a0100c352c3011a7bc46a0100c352c3011ac301005462d22e62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365129d6c7501009c631a0004273f000005747261636552c168040507921651624d2e620700770100c3620a007575755151c1c652c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075045140000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63722c76549c636c2c756a0100c352c356c37c7d780100c3549c7c0100c3549c9b64950151c37601009c64090075013062b8006a0100c352c3011b7bc4006a0100c352c3011c7bc46a0100c352c3011bc30100a0648b006a0100c352c3011bc3765a966a0100c352c3011b7bc45a970130936a0100c352c3011cc37e6a0100c352c3011c7bc462c2ff7576519c641e00756a0100c352c3011d7bc46a0100c352c3011dc35162cd2b6237007601009c642000756a0100c352c3011d7bc46a0100c352c3011dc301005462a92b62130076529c64080075756208007575626cff6a0100c352c3011cc37c51c37601009c64090075013062b8006a0100c352c3011e7bc4006a0100c352c3011f7bc46a0100c352c3011ec30100a0648b006a0100c352c3011ec3765a966a0100c352c3011e7bc45a970130936a0100c352c3011fc37e6a0100c352c3011f7bc462c2ff7576519c641e00756a0100c352c301207bc46a0100c352c30120c35162082b6237007601009c642000756a0100c352c301207bc46a0100c352c30120c301005462e42a62130076529c64080075756208007575626cff6a0100c352c3011fc37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301217bc475756a0100c352c30121c351624d2a6239007601009c642200756a0100c352c301217bc475756a0100c352c30121c301005462272a62130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c353c351c3640e006a0100c351c352c3621c006a0100c351c352c351c36a0100c351c354c351c3945652c1c66a0100c352c3577bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301227bc46a0100c352c30122c3516221296237007601009c642000756a0100c352c301227bc46a0100c352c30122c301005462fd2862130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3653d976c7501009c631a00042743000005747261636552c168040507921651627828620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301237bc46a0100c352c30123c35162dc276237007601009c642000756a0100c352c301237bc46a0100c352c30123c301005462b82762130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f8956c7501009c631a0004fc43000005747261636552c168040507921651623327620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042d45000005747261636552c168040507921651620700757501006a0100c376c08cca76519c634f2576549c634925756a0100c352c357c37c7d780100c3549c7c0100c3549c9b64950151c37601009c64090075013062b8006a0100c352c301247bc4006a0100c352c301257bc46a0100c352c30124c30100a0648b006a0100c352c30124c3765a966a0100c352c301247bc45a970130936a0100c352c30125c37e6a0100c352c301257bc462c2ff7576519c641e00756a0100c352c301267bc46a0100c352c30126c35162aa246237007601009c642000756a0100c352c301267bc46a0100c352c30126c301005462862462130076529c64080075756208007575626cff6a0100c352c30125c37c51c37601009c64090075013062b8006a0100c352c301277bc4006a0100c352c301287bc46a0100c352c30127c30100a0648b006a0100c352c30127c3765a966a0100c352c301277bc45a970130936a0100c352c30128c37e6a0100c352c301287bc462c2ff7576519c641e00756a0100c352c301297bc46a0100c352c30129c35162e5236237007601009c642000756a0100c352c301297bc46a0100c352c30129c301005462c12362130076529c64080075756208007575626cff6a0100c352c30128c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c3012a7bc475756a0100c352c3012ac351622a236239007601009c642200756a0100c352c3012a7bc475756a0100c352c3012ac301005462042362130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c354c301005652c1c67c51c37c51c37c9f5352c1c651c364b0086a0100c352c353c351c36407036a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c353c36a0100c351c30100c352c15852c1c66a0100c351c353c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075048048000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40076549c63de007551c36a0100c351c354c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63a11f76549c639b1f756a0100c351c355c351c36476006a0100c351c354c36a0100c351c353c36a0100c351c30100c353c16a0100c30100c354c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e38d6c7501009c631a00049849000005747261636552c168040507921651621e1f75621f056a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c353c3116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504d249000005747261636552c168040507921651629a04757552c15852c1c66a0100c351c353c3116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504024a000005747261636552c168040507921651623e04757552c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504224b000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63720276549c636c02756a0100c351c354c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c35162d2016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462b00162130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516219016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f70062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c353c3567bc475756a0100c353c356c3516263006237007601009c642000756a0100c353c3567bc475756a0100c353c356c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63051a76549c63ff19756a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012b7bc46a0100c352c3012bc3516277196237007601009c642000756a0100c352c3012b7bc46a0100c352c3012bc301005462531962130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36593876c7501009c631a0004cd4d000005747261636552c16804050792165162ce18620700770100c3620a007575755151c1c66a0100c352c3587bc46a0100c351c356c301005652c1c67c51c37c51c37c9f5352c1c651c364ea0b6a0100c3c7c86a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c353c301007bc46a0100c353c30100c35162480b6237007601009c642000756a0100c353c301007bc46a0100c353c30100c301005462240b62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36524866c7501009c631a0004bd4e000005747261636552c168040507921651629f0a620700770100c3620a007575755151c1c651c36a0100c351c356c351c3945652c1c66a0100c352c3587bc46a0100c351c357c351c364ef026a0100c3c7c86a0100c351c356c36a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c354c301007bc46a0100c354c30100c351624a026237007601009c642000756a0100c354c301007bc46a0100c354c30100c301005462260262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b6846c7501009c631a0004b34f000005747261636552c16804050792165162a101620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3517bc46a0100c354c351c351621d016235007601009c641e00756a0100c354c3517bc46a0100c354c351c301005462fb0062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658b836c7501009c631a00047b50000005747261636552c168040507921651627600620700770100c3620a007575755151c1c653c16a0100c30100c354c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36524836c7501009c63230004c150000005747261636552c1620900620983624a2c680405079216516206007501006a0100c376c08cca76519c63850776549c637f07756279076a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c354c301007bc46a0100c354c30100c35162c9066237007601009c642000756a0100c354c301007bc46a0100c354c30100c301005462a50662130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b3fe6c7501009c631a0004a351000005747261636552c168040507921651622006620700770100c3620a007575755151c1c6116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504d051000005747261636552c16804050792165162c305757552c15852c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3517bc46a0100c354c351c351623e056235007601009c641e00756a0100c354c3517bc46a0100c354c351c3010054621c0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3652afd6c7501009c631a00049452000005747261636552c168040507921651629704620700770100c3620a007575755151c1c6116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504c152000005747261636552c168040507921651623a04757552c16a0100c3c7c8760100c36a0100c355c301007bc47651c36a0100c355c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c355c351c36a0100c355c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c356c3517bc475756a0100c356c351c35162de006237007601009c642000756a0100c356c3517bc475756a0100c356c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c356c301007bc46a0100c356c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c356c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e153000005747261636552c168040507921651620700757501006a0100c376c08cca76519c636e0276549c636802756a0100c351c356c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c354c3527bc4006a0100c354c3537bc46a0100c354c352c30100a06483006a0100c354c352c3765a966a0100c354c3527bc45a970130936a0100c354c353c37e6a0100c354c3537bc462c7ff7576519c641c00756a0100c354c3547bc46a0100c354c354c35162d2016235007601009c641e00756a0100c354c3547bc46a0100c354c354c301005462b00162130076529c640800757562080075756275ff6a0100c354c353c37c51c37601009c64090075013062ac006a0100c354c3557bc4006a0100c354c3567bc46a0100c354c355c30100a06483006a0100c354c355c3765a966a0100c354c3557bc45a970130936a0100c354c356c37e6a0100c354c3567bc462c7ff7576519c641c00756a0100c354c3577bc46a0100c354c357c3516219016235007601009c641e00756a0100c354c3577bc46a0100c354c357c301005462f70062130076529c640800757562080075756275ff6a0100c354c356c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c354c3587bc475756a0100c354c358c3516263006237007601009c642000756a0100c354c3587bc475756a0100c354c358c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c630c0076549c6306007501006a0100c376c08cca76519c63b50c76549c63af0c756a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012c7bc46a0100c352c3012cc35162330c6237007601009c642000756a0100c352c3012c7bc46a0100c352c3012cc3010054620f0c62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36546f76c7501009c631a00049d56000005747261636552c168040507921651628a0b620700770100c3620a007575755151c1c651c36a0100c351c352c351c3945652c1c66a0100c352c3597bc46a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012d7bc46a0100c352c3012dc35162e50a6237007601009c642000756a0100c352c3012d7bc46a0100c352c3012dc301005462c10a62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f8f56c7501009c631a00047d57000005747261636552c168040507921651623c0a620700770100c3620a007575755151c1c651c36a0100c352c351c351c3945652c1c66a0100c352c35a7bc46a0100c352c359c301005652c1c67c51c37c51c39c5352c1c651c364da006a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c351c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c353c301007bc475756a0100c353c30100c351624e006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c301005462280062130076529c64080075756208007575628aff776a52c357c378ca6a52c358c37c51c401006a0100c376c08cca76519c63260976549c6320097562ce036a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c351c3c7c7c753c15752c1c6766a0100c353c3517bc46a0100c352c30100c3766a0100c353c301007bc451c30100c3cc68044eaada580100c578680442298fe0647d00787c7c6804ab5b018e7c78095f5f70726f746f5f5f87916409007d7cc86204007762d5ff7576519c641e00756a0100c353c3527bc475756a0100c353c352c3516214036237007601009c642000756a0100c353c3527bc475756a0100c353c352c301005462f00262130076529c64080075756208007575627fff7768044eaada5876680442298fe0649b01766804ab5b018e6a0100c353c351c37c6a0100c353c30100c378787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3537bc46a0100c353c353c351624e026235007601009c641e00756a0100c353c3537bc46a0100c353c353c3010054622c0262130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c6f26c7501009c631a0004a759000005747261636552c16804050792165162a701620700770100c3620a007575755151c1c67b51c30100c37b7b51c1c462b5fe7576519c641d00756a0100c353c3547bc4756a0100c353c354c351626a016236007601009c641f00756a0100c353c3547bc4756a0100c353c354c301005462470162130076529c640800757562080075756261fe75760b6f66666572416d6f756e746a0100c352c359c37b51c30100c37b7b51c1c4760a77616e74416d6f756e746a0100c352c35ac37b51c30100c37b7b51c1c476176d616b6572466565417661696c61626c65416d6f756e746a0100c352c358c37b51c30100c37b7b51c1c47c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c353c3557bc475756a0100c353c355c3516263006237007601009c642000756a0100c353c3557bc475756a0100c353c355c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63580576549c635205756a0100c351c352c36a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012e7bc46a0100c352c3012ec35162cf046237007601009c642000756a0100c352c3012e7bc46a0100c352c3012ec301005462ab0462130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e2ef6c7501009c631a0004935b000005747261636552c168040507921651622604620700770100c3620a007575755151c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012f7bc46a0100c352c3012fc351629a036237007601009c642000756a0100c352c3012f7bc46a0100c352c3012fc301005462760362130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365adee6c7501009c631a00045b5c000005747261636552c16804050792165162f102620700770100c3620a007575755151c1c66a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301307bc46a0100c352c30130c3516265026237007601009c642000756a0100c352c301307bc46a0100c352c30130c301005462410262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36578ed6c7501009c631a0004235d000005747261636552c16804050792165162bc01620700770100c3620a007575755151c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301317bc46a0100c352c30131c351622f016237007601009c642000756a0100c352c301317bc46a0100c352c30131c3010054620b0162130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36542ec6c7501009c631a0004eb5d000005747261636552c168040507921651628600620700770100c3620a007575755151c1c66a0100c352c351c36a0100c351c351c36a0100c351c30100c358c16a0100c30100c355c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c2eb6c7501009c631a0004465e000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504675e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765f9c64371575516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b85e00007c056572726f7253c168040507921604be5e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304ec5e00007c056572726f7253c168040507921604f25e000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3647700294f6e6c7920746865206f66666572206d616b6572206d61792063616e63656c20616e206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3045d5f00007c056572726f7253c168040507921604635f000005747261636552c168040507921651622c136a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075043b60000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63b71176549c63b111756a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304986000007c056572726f7253c1680405079216049e60000005747261636552c168040507921651621d110100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3517bc46a0100c352c351c351628d106235007601009c641e00756a0100c352c3517bc46a0100c352c351c3010054626b1062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36568e66c7501009c631a00046561000005747261636552c16804050792165162e60f620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624c0f6235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622a0f62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36527e56c7501009c631a00043a62000005747261636552c16804050792165162a50e620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075046b63000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63c10c76549c63bb0c756a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3537bc46a0100c352c353c35162410c6235007601009c641e00756a0100c352c3537bc46a0100c352c353c3010054621f0c62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3651ce26c7501009c631a00043a64000005747261636552c168040507921651629a0b620700770100c3620a007575755151c1c67c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c35162fc0a6235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462da0a62130076529c640800757562080075756275ff6a0100c352c355c37c51c37601009c64090075013062ac006a0100c352c3577bc4006a0100c352c3587bc46a0100c352c357c30100a06483006a0100c352c357c3765a966a0100c352c3577bc45a970130936a0100c352c358c37e6a0100c352c3587bc462c7ff7576519c641c00756a0100c352c3597bc46a0100c352c359c35162430a6235007601009c641e00756a0100c352c3597bc46a0100c352c359c301005462210a62130076529c640800757562080075756275ff6a0100c352c358c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35a7bc475756a0100c352c35ac351628d096237007601009c642000756a0100c352c35a7bc475756a0100c352c35ac301005462690962130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc351629c086235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc3010054627a0862130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36577de6c7501009c631a0004d166000005747261636552c16804050792165162f507620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc3516258076235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462360762130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36533dd6c7501009c631a0004a667000005747261636552c16804050792165162b106620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504d768000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63cd0476549c63c704756a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516241046235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc3010054621f0462130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3651cda6c7501009c631a0004a669000005747261636552c168040507921651629a03620700770100c3620a007575755151c1c67c7d780100c3549c7c0100c3549c9b648d0151c37601009c64090075013062b0006a0100c352c35e7bc4006a0100c352c35f7bc46a0100c352c35ec30100a06487006a0100c352c35ec3765a966a0100c352c35e7bc45a970130936a0100c352c35fc37e6a0100c352c35f7bc462c7ff7576519c641e00756a0100c352c301107bc46a0100c352c30110c35162fa026237007601009c642000756a0100c352c301107bc46a0100c352c30110c301005462d60262130076529c640800757562080075756271ff6a0100c352c35fc37c51c37601009c64090075013062b8006a0100c352c301117bc4006a0100c352c301127bc46a0100c352c30111c30100a0648b006a0100c352c30111c3765a966a0100c352c301117bc45a970130936a0100c352c30112c37e6a0100c352c301127bc462c2ff7576519c641e00756a0100c352c301137bc46a0100c352c30113c3516236026237007601009c642000756a0100c352c301137bc46a0100c352c30113c301005462120262130076529c64080075756208007575626cff6a0100c352c30112c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301147bc475756a0100c352c30114c351627b016239007601009c642200756a0100c352c301147bc475756a0100c352c30114c301005462550162130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c50100066f666665727353c1c6011152c1c66a0100c351c351c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c352c301157bc475756a0100c352c30115c35162ad006239007601009c642200756a0100c352c301157bc475756a0100c352c30115c301005462870062130076529c64080075756208007575628aff776a52c357c378ca6a52c358c37c51c46a0100c351c351c351c16a0100c30100c353c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36588d66c7501009c631a00042f6c000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504506c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601109c64750075116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546243005151c1c60100546239007504936c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c30100667601119c64ce0175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304dd6c00007c056572726f7253c168040507921604e36c000005747261636552c168040507921651665952c1c66a0100c351c301007bc475056f776e65726a52c354c37d78cb640700c362060075750051c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648000324f6e6c792074686520636f6e7472616374206f776e65722063616e206368616e6765207468652046656541646472657373215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304516d00007c056572726f7253c168040507921604576d000005747261636552c1680405079216516231006a0100c351c30100c3116d757461626c65466565416464726573737c6a52c354c37b7bc45151c1c60100546239007504776d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc46ac2c17601007878c3c2c1c45352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3537bc46ac2c17601007878c3c2c1c45452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3547bc46ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3557bc4680475c893e37601109c64b4057501006a52c30100c37cc376056f776e657287642600755665f6d101009c63180004096f000005747261636552c16804050792165166627805760962616c616e63654f6687644600755765c4d101009c633800041b6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662260576086765744f666665728764460075586573d101009c633800043d6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d504760b6465706f7369744e455035876446007559651fd101009c633800045f6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066628104760c77697468647261774e45503587644600755b65cad001009c63380004816f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622c0476096d616b654f6666657287644600755d6578d001009c63380004a36f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662da03760966696c6c4f6666657287644600755e6526d001009c63380004c56f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066628803760b63616e63656c4f6666657287644600755f65d2cf01009c63380004e76f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066623403760a6665654164647265737387644700750110657ecf01009c633800040970000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662e002760d73657446656541646472657373876447007501116527cf01009c633800042b70000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662890276066465706c6f7987647b0275086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000624802516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a17000007c056572726f7253c168040507921604a770000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc4755151c1c6116d757461626c65466565416464726573737c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304387100007c056572726f7253c1680405079216043e71000005747261636552c168040507921651623200680487c3d2645952c1c6116d757461626c65466565416464726573737c6a52c354c37b7bc45151c1c601005462390075045c71000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f0621e087601009c6415087568049a1f194a6804bab953f27602d1009c64a3047501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756267ff779b640700f0622c0301006a52c30100c37cc376056f776e657287642600755665b6ca01009c631800047e72000005747261636552c1680405079216516662f402760962616c616e63654f668764460075576584ca01009c633800049072000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a20276086765744f666665728764460075586533ca01009c63380004b272000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625102760b6465706f7369744e45503587644600755965dfc901009c63380004d472000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662fd01760c77697468647261774e45503587644600755b658ac901009c63380004f672000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a80176096d616b654f6666657287644600755d6538c901009c633800041873000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625601760966696c6c4f6666657287644600755e65e6c801009c633800043a73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620401760b63616e63656c4f6666657287644600755f6592c801009c633800045c73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b000760a6665654164647265737387644700750110653ec801009c633800047e73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c00760d736574466565416464726573738764470075011165e7c701009c63380004a073000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c35c7bc4756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35c7bc4756a0100c30100c35cc301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35d7bc4756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35d7bc4756a0100c30100c35dc301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - exchange compiles the contracts and outputs the ABI file 4`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - exchange compiles the contracts and outputs the ABI file 5`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-Js compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-Js compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-Js compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angular compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angular compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angular compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vue compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vue compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vue compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "balanceAvailable", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceClaimed", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "balanceRefunded", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": true, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "claim", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "refund", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Escrow", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Escrow", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 2`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "amountPerNEO", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "owner", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Address", + }, + }, + Object { + "constant": true, + "name": "startTimeSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "icoDurationSeconds", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "remaining", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": false, + "name": "mintTokens", + "parameters": Array [], + "receive": true, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "refundAssets", + "parameters": Array [], + "returnType": Object { + "type": "Void", + }, + "sendUnsafe": true, + }, + Object { + "name": "deploy", + "parameters": Array [ + Object { + "default": Object { + "type": "sender", + }, + "forwardedValue": false, + "name": "owner", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "startTimeSeconds", + "optional": true, + "type": "Integer", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "icoDurationSeconds", + "optional": true, + "type": "Integer", + }, + ], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE ICO", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "ICO", + "parameters": Array [ + "String", + "Array", + ], + "payable": true, + "returnType": "Buffer", + "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; + +exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 3`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": true, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": true, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + Object { + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + }, + ], + "functions": Array [ + Object { + "constant": true, + "name": "name", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "symbol", + "parameters": Array [], + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "String", + }, + }, + Object { + "constant": true, + "name": "decimals", + "parameters": Array [], + "returnType": Object { + "decimals": 0, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "constant": true, + "name": "totalSupply", + "parameters": Array [], + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + }, + Object { + "claim": false, + "constant": true, + "name": "balanceOf", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "address", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": true, + "name": "approvedTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "decimals": 8, + "forwardedValue": false, + "optional": false, + "type": "Integer", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "transfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "approveArgs", + "optional": false, + "rest": true, + "type": "ForwardValue", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 0, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "approveReceiveTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "revokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "onRevokeSendTransfer", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "from", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + Object { + "forwardedValue": false, + "name": "asset", + "optional": false, + "type": "Address", + }, + ], + "receive": false, + "returnType": Object { + "optional": false, + "type": "Void", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "claim": false, + "constant": false, + "name": "issue", + "parameters": Array [ + Object { + "forwardedValue": false, + "name": "to", + "optional": false, + "type": "Address", + }, + Object { + "decimals": 8, + "forwardedValue": false, + "name": "amount", + "optional": false, + "type": "Integer", + }, + ], + "receive": false, + "returnType": Object { + "forwardedValue": false, + "optional": false, + "type": "Boolean", + }, + "send": false, + "sendUnsafe": false, + }, + Object { + "name": "deploy", + "parameters": Array [], + "returnType": Object { + "type": "Boolean", + }, + }, + ], + }, + "contract": Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "NEO•ONE Token", + "dynamicInvoke": true, + "email": "alex.dicarlo@neotracker.io", + "name": "Token", + "parameters": Array [ + "String", + "Array", + ], + "payable": false, + "returnType": "Buffer", + "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", + "storage": true, + }, + "diagnostics": Array [], + "sourceMap": Object {}, +} +`; 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..75f642d195 --- /dev/null +++ b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts @@ -0,0 +1,60 @@ +import fs from 'fs-extra'; +import path from 'path'; + +const testCompileProject = async (project: string) => { + const execAsync = one.createExec(project); + await execAsync('compile'); + const { + contracts: { outDir }, + } = await one.getProjectConfig(project); + + expect(outDir).toBeDefined(); + + const abiFiles = await fs.readdir(outDir); + const abiJsons = await Promise.all(abiFiles.map(async (file) => fs.readJSON(path.join(outDir, file)))); + + abiJsons.forEach((abi) => { + expect(abi).toMatchSnapshot(); + }); +}; + +describe('compile - exchange', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('exchange'); + }); +}); +describe('compile - ico', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico'); + }); +}); +describe('compile - ico-angular', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-angular'); + }); +}); +describe('compile - ico-angularJs', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-angularJs'); + }); +}); +describe('compile - ico-Js', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-Js'); + }); +}); +describe('compile - ico-neotracker', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-neotracker'); + }); +}); +describe('compile - ico-vue', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-vue'); + }); +}); +describe('compile - ico-vueJs', () => { + it('compiles the contracts and outputs the ABI file', async () => { + await testCompileProject('ico-vueJs'); + }); +}); diff --git a/packages/neo-one-cli/src/cmd/compile.ts b/packages/neo-one-cli/src/cmd/compile.ts index ea8f067938..fa80a3000d 100644 --- a/packages/neo-one-cli/src/cmd/compile.ts +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -9,12 +9,14 @@ export const builder = (yargsBuilder: typeof yargs) => yargsBuilder .string('outDir') .describe('outDir', 'output code directory') - .default('outDir', './') .string('path') .describe('path', 'contract directory'); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => { - await createTasks(argv.path ? argv.path : config.contracts.path, argv.outDir).run(); + await createTasks( + argv.path ? argv.path : config.contracts.path, + argv.outDir ? argv.outDir : config.contracts.outDir, + ).run(); }); }; From 09abe1700e7b51271df1107a4f5e370f766cad5f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Wed, 17 Jun 2020 14:04:16 -0700 Subject: [PATCH 057/141] feat(nt): make neotracker dev dependency to decouple (#2066) --- .../cli-common-node/nt-dep_2020-06-17-20-21.json | 11 +++++++++++ .../changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json | 11 +++++++++++ packages/neo-one-cli-common-node/src/configuration.ts | 2 +- packages/neo-one-cli/package.json | 2 +- .../projects/ico-neotracker/.neo-one.config.js | 2 +- packages/neo-one-cli/src/cmd/start/neotracker.ts | 11 ++++++++++- .../2-advanced-guides/09-configuration-options.md | 2 +- 7 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json create mode 100644 common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json diff --git a/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json b/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json new file mode 100644 index 0000000000..56ba6ad505 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Update documentation on starting neotracker.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json b/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json new file mode 100644 index 0000000000..6a93d81967 --- /dev/null +++ b/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Remove @neotracker/core as a @neo-one/cli dependency.", + "type": "major" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 6427ac9c74..e14e80f8f6 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -220,7 +220,7 @@ ${exportConfig} { path: '${config.neotracker.path}', // 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'. + // 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, } }; diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 8414f6a923..350df46370 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -35,7 +35,6 @@ "@neo-one/smart-contract-compiler-node": "^2.5.0", "@neo-one/utils": "^2.5.0", "@neo-one/utils-node": "^2.5.0", - "@neotracker/core": "1.3.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "cross-fetch": "^3.0.4", @@ -58,6 +57,7 @@ "@neo-one/build-tools": "^1.0.0", "@neo-one/smart-contract": "^2.5.0", "@neo-one/smart-contract-test": "^2.5.0", + "@neotracker/core": "1.3.1", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", 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 index e1d23934fb..a0ee7b1eff 100644 --- 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 @@ -32,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/cmd/start/neotracker.ts b/packages/neo-one-cli/src/cmd/start/neotracker.ts index aaf6ee4260..919a62cc66 100644 --- a/packages/neo-one-cli/src/cmd/start/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/start/neotracker.ts @@ -33,8 +33,17 @@ export const handler = (argv: Yarguments>) => { '--dbFileName', 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, 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 8e5f4888ae..2c350a7cc8 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 @@ -57,7 +57,7 @@ export default { path: '.neo-one/neotracker', // 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'. + // 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, }, }; From ef6f6dfdcb61f1190a904eff1092d5bd9f66be1a Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Wed, 17 Jun 2020 14:10:46 -0700 Subject: [PATCH 058/141] fix(changefile): not a supposed to be a major change (#2067) --- common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json b/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json index 6a93d81967..79c6348503 100644 --- a/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json +++ b/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json @@ -3,7 +3,7 @@ { "packageName": "@neo-one/cli", "comment": "Remove @neotracker/core as a @neo-one/cli dependency.", - "type": "major" + "type": "minor" } ], "packageName": "@neo-one/cli", From be60ea577536b20155401eab6b6c87a0b40ea706 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Wed, 17 Jun 2020 14:35:49 -0700 Subject: [PATCH 059/141] feat(e2e): add init e2e tests (#2065) --- .../cli/init-e2e_2020-06-16-23-17.json | 11 ++ .../environments/e2e/One.js | 45 +++-- .../environments/e2e/jestSetup.js | 1 + .../environments/test/jestSetup.js | 3 +- packages/neo-one-build-tests/jest/e2e.js | 4 +- packages/neo-one-build-tools/types/e2e.d.ts | 7 + .../neo-one-cli/src/__e2e__/cmd/init.test.ts | 159 ++++++++++++++++++ 7 files changed, 215 insertions(+), 15 deletions(-) create mode 100644 common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json create mode 100644 packages/neo-one-cli/src/__e2e__/cmd/init.test.ts diff --git a/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json b/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json new file mode 100644 index 0000000000..5ef5cc0bba --- /dev/null +++ b/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Add E2E test for neo-one init command.", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-build-tests/environments/e2e/One.js b/packages/neo-one-build-tests/environments/e2e/One.js index 6316d169ac..68964031d4 100644 --- a/packages/neo-one-build-tests/environments/e2e/One.js +++ b/packages/neo-one-build-tests/environments/e2e/One.js @@ -99,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 }); @@ -109,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); @@ -169,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) => [ @@ -179,6 +202,10 @@ class One { ), NEO_ONE_TMP_DIR: this._getTmpDir(), }; + } + + _getEnvTmpProject(project) { + this._setupProject(project); return { maxBuffer: 20000 * 1024, @@ -189,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/packages/neo-one-build-tests/environments/e2e/jestSetup.js b/packages/neo-one-build-tests/environments/e2e/jestSetup.js index e5c4d7fba9..b6d60de92f 100644 --- a/packages/neo-one-build-tests/environments/e2e/jestSetup.js +++ b/packages/neo-one-build-tests/environments/e2e/jestSetup.js @@ -11,6 +11,7 @@ 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, diff --git a/packages/neo-one-build-tests/environments/test/jestSetup.js b/packages/neo-one-build-tests/environments/test/jestSetup.js index c95b47be51..000ee0559b 100644 --- a/packages/neo-one-build-tests/environments/test/jestSetup.js +++ b/packages/neo-one-build-tests/environments/test/jestSetup.js @@ -10,9 +10,8 @@ jest.setTimeout(120 * 1000); const tempConsole = global.console; global.console = { + // log: console.log, // Use this to debug source code log: jest.fn(), - // uncomment to allow console.log in tests - // log: console.log, error: console.error, warn: console.warn, info: jest.fn(), diff --git a/packages/neo-one-build-tests/jest/e2e.js b/packages/neo-one-build-tests/jest/e2e.js index 8e3a97deb0..ff9d5137ac 100644 --- a/packages/neo-one-build-tests/jest/e2e.js +++ b/packages/neo-one-build-tests/jest/e2e.js @@ -6,7 +6,9 @@ module.exports = { testRunner: '/packages/neo-one-build-tests/node_modules/jest-circus/runner', testRegex: '^.*/__e2e__/.*\\.test\\.tsx?$', - moduleNameMapper: undefined, + moduleNameMapper: { + '^@neo-one/cli$': '/packages/neo-one-cli/src/index', + }, modulePathIgnorePatterns: [ '/packages/[a-z-]+/package.json', '/common', diff --git a/packages/neo-one-build-tools/types/e2e.d.ts b/packages/neo-one-build-tools/types/e2e.d.ts index ea364a9d2b..fcf519be14 100644 --- a/packages/neo-one-build-tools/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-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', + }); + }); +}); From 9589eaf99f11feb6662acf9d3e59660f9d6a4aad Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 22 Jun 2020 15:10:26 -0700 Subject: [PATCH 060/141] chore(ts): update TS to v3.9.5 --- .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../cli-common/ts-3.9_2020-06-22-22-11.json | 11 ++ .../@neo-one/cli/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../client-core/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../client-full/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../client/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../http-context/ts-3.9_2020-06-22-22-11.json | 11 ++ .../http/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../logger/ts-3.9_2020-06-22-22-11.json | 11 ++ .../node-bin/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../node-core/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../node-network/ts-3.9_2020-06-22-22-11.json | 11 ++ .../node-offline/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../node-vm/ts-3.9_2020-06-22-22-11.json | 11 ++ .../node/ts-3.9_2020-06-22-22-11.json | 11 ++ .../react-common/ts-3.9_2020-06-22-22-11.json | 11 ++ .../react-core/ts-3.9_2020-06-22-22-11.json | 11 ++ .../react/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../suite/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-utils/ts-3.9_2020-06-22-22-11.json | 11 ++ .../ts-3.9_2020-06-22-22-11.json | 11 ++ .../utils-node/ts-3.9_2020-06-22-22-11.json | 11 ++ .../utils/ts-3.9_2020-06-22-22-11.json | 11 ++ common/config/rush/common-versions.json | 2 +- common/config/rush/yarn.lock | 40 +++---- packages/neo-one-build-tests/package.json | 4 +- packages/neo-one-build-tools-web/package.json | 2 +- packages/neo-one-build-tools/package.json | 2 +- packages/neo-one-cli-common-node/package.json | 4 +- .../src/configuration.ts | 5 +- packages/neo-one-cli-common/package.json | 4 +- packages/neo-one-cli/package.json | 2 +- .../projects/ico-Js/codegen/client.js | 107 +++++++++++++++--- packages/neo-one-client-common/package.json | 4 +- .../src/__tests__/ScriptBuilder.test.ts | 2 +- .../src/__tests__/contractParameters.test.ts | 20 ++-- .../src/contractParameters.ts | 7 +- .../attribute/BufferAttributeModel.ts | 36 +++--- .../attribute/ECPointAttributeModel.ts | 3 +- .../attribute/UInt160AttributeModel.ts | 3 +- .../attribute/UInt256AttributeModel.ts | 35 +++--- packages/neo-one-client-core/package.json | 4 +- .../src/__data__/factory.ts | 6 +- .../RemoteUserAccountProvider.test.ts | 27 ++--- .../provider/NEODataProvider.test.ts | 38 +++---- .../provider/NEOONEDataProvider.test.ts | 38 +++---- .../src/__tests__/provider/convert.test.ts | 2 +- .../user/DapiUserAccountProvider.test.ts | 24 ++-- .../user/keystore/LocalHDHandler.test.ts | 6 +- .../user/keystore/LocalHDStore.test.ts | 36 +++--- .../src/provider/convert.ts | 9 +- packages/neo-one-client-core/src/sc/common.ts | 2 +- .../src/user/keystore/LocalHDHandler.ts | 6 +- .../src/user/keystore/LocalHDStore.ts | 2 +- .../neo-one-client-full-common/package.json | 4 +- .../neo-one-client-full-core/package.json | 8 +- .../src/__data__/factory.ts | 4 +- .../user/LocalUserAccountProvider.test.ts | 2 +- packages/neo-one-client-full/package.json | 4 +- packages/neo-one-client-switch/package.json | 4 +- packages/neo-one-client/package.json | 4 +- .../src/BlockTime.tsx | 28 ++--- .../src/DeveloperToolsContext.tsx | 6 +- .../src/ToastsContext.tsx | 2 +- .../src/ToolbarButton.tsx | 2 +- .../src/WalletSelectorBase.tsx | 6 +- packages/neo-one-developer-tools/package.json | 6 +- packages/neo-one-editor-server/package.json | 6 +- packages/neo-one-editor/package.json | 2 +- .../src/__tests__/engine/resolve.test.ts | 2 +- .../src/editor/toolbar/TestPlayButton.tsx | 2 +- .../src/editor/toolbar/ToolbarPopover.tsx | 2 +- .../src/engine/remote/RemoteEngine.ts | 7 +- .../src/error/components/ErrorOverlay.tsx | 1 + .../src/monaco/AsyncLanguageService.ts | 1 + packages/neo-one-http-context/package.json | 4 +- packages/neo-one-http/package.json | 4 +- .../neo-one-local-browser-worker/package.json | 4 +- packages/neo-one-local-browser/package.json | 2 +- .../src/createCompilerHost.ts | 3 +- packages/neo-one-local-singleton/package.json | 4 +- packages/neo-one-logger-config/package.json | 4 +- packages/neo-one-logger/package.json | 4 +- packages/neo-one-node-bin/package.json | 4 +- packages/neo-one-node-blockchain/package.json | 4 +- .../neo-one-node-blockchain/src/Blockchain.ts | 6 +- .../src/WriteBatchBlockchain.ts | 8 +- .../neo-one-node-browser-worker/package.json | 4 +- packages/neo-one-node-browser/package.json | 4 +- packages/neo-one-node-consensus/package.json | 4 +- packages/neo-one-node-core/package.json | 4 +- .../neo-one-node-core/src/InvocationData.ts | 4 +- .../contractParameter/MapContractParameter.ts | 7 +- .../src/disassembleByteCode.ts | 16 +-- .../src/transaction/state/StateDescriptor.ts | 5 +- packages/neo-one-node-core/src/utils/utils.ts | 2 +- packages/neo-one-node-http-rpc/package.json | 4 +- .../neo-one-node-neo-settings/package.json | 4 +- packages/neo-one-node-network/package.json | 4 +- packages/neo-one-node-offline/package.json | 4 +- packages/neo-one-node-protocol/package.json | 4 +- .../neo-one-node-rpc-handler/package.json | 4 +- .../neo-one-node-storage-cache/package.json | 4 +- .../neo-one-node-storage-common/package.json | 4 +- .../neo-one-node-storage-levelup/package.json | 4 +- packages/neo-one-node-tools/package.json | 4 +- packages/neo-one-node-vm/package.json | 4 +- .../src/__tests__/opcodes.test.ts | 52 ++++----- .../__tests__/stackItem/MapStackItem.test.ts | 4 +- .../src/__tests__/syscalls.test.ts | 4 +- .../src/stackItem/MapStackItem.ts | 7 +- packages/neo-one-node/package.json | 4 +- packages/neo-one-react-common/src/Select.tsx | 2 +- packages/neo-one-react-common/src/Tooltip.tsx | 2 +- packages/neo-one-react-core/src/TextInput.tsx | 2 +- packages/neo-one-react/package.json | 4 +- .../package.json | 2 +- .../package.json | 2 +- .../ObjectLiteralExpressionCompiler.test.ts | 23 ++++ .../PropertyAccessExpressionCompiler.test.ts | 8 ++ ...jectLiteralExpressionCompiler.test.ts.snap | 13 +++ .../src/compile/builtins/array/index.ts | 26 ++--- .../src/compile/builtins/map/index.ts | 10 +- .../src/compile/builtins/set/index.ts | 8 +- .../src/compile/helper/contract/utils.ts | 4 +- .../src/compile/sb/BaseScriptBuilder.ts | 4 +- .../src/compile/sb/resolveJumps.ts | 18 +-- .../neo-one-smart-contract-lib/package.json | 4 +- .../package.json | 4 +- .../package.json | 4 +- .../neo-one-smart-contract-test/package.json | 4 +- .../package.json | 2 +- .../neo-one-smart-contract/src/global.d.ts | 4 +- packages/neo-one-suite/package.json | 4 +- packages/neo-one-ts-utils/package.json | 2 +- .../package.json | 2 +- .../src/Concatenator.ts | 2 +- packages/neo-one-utils-node/package.json | 6 +- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 2 +- .../src/components/StyledRouterLink.tsx | 2 +- .../src/components/content/DateAndAuthor.tsx | 2 +- .../src/components/content/EditPageLink.tsx | 2 +- .../src/components/content/SectionHeader.tsx | 2 +- .../src/components/content/Sidebar.tsx | 2 +- .../src/components/content/SubsectionLink.tsx | 2 +- .../src/components/home/Home.tsx | 2 +- packages/neo-one-worker/package.json | 4 +- 170 files changed, 1044 insertions(+), 440 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json create mode 100644 common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json diff --git a/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..24190f0f95 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..d692b33335 --- /dev/null +++ b/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..f9c4414e67 --- /dev/null +++ b/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..6d37621fee --- /dev/null +++ b/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..42e70ecf8a --- /dev/null +++ b/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..cd3017a986 --- /dev/null +++ b/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-full-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..9982fd161b --- /dev/null +++ b/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-full-core", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..473aa18fc9 --- /dev/null +++ b/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-full", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-full", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..1f8136061c --- /dev/null +++ b/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-switch", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..63f423b74b --- /dev/null +++ b/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/client", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..b4e097ac69 --- /dev/null +++ b/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/developer-tools", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/developer-tools", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..18af53c331 --- /dev/null +++ b/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/http-context", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/http-context", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..d1765ea79d --- /dev/null +++ b/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/http", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/http", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..9d32190548 --- /dev/null +++ b/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/logger-config", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/logger-config", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..94b6dbe250 --- /dev/null +++ b/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/logger", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/logger", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..4e0587141a --- /dev/null +++ b/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-bin", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-bin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..224a1d7610 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..f6ebaadcb3 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-consensus", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..767a283df2 --- /dev/null +++ b/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..7866ba591a --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-http-rpc", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..73e35d10a6 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-neo-settings", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..69622203fd --- /dev/null +++ b/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-network", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-network", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..c333c993a0 --- /dev/null +++ b/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-offline", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-offline", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..b133dc5a9f --- /dev/null +++ b/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-protocol", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..7c6176d4e0 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-rpc-handler", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..40626de93c --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-cache", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..c4a9b795b4 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..7b744a5ffe --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-levelup", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..fc0b316316 --- /dev/null +++ b/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node-vm", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..9a5e2dc776 --- /dev/null +++ b/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..66152be15c --- /dev/null +++ b/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/react-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..57cebc672e --- /dev/null +++ b/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-core", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/react-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..b550cbabda --- /dev/null +++ b/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/react", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..e8ba9cf690 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler-node", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..fb78a80865 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..e90d565953 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-lib", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-lib", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..4c945ddd83 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-test-common", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-test-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..149ebba76e --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-test", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-test", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..a1b4868eeb --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-typescript-plugin", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..0f949247b6 --- /dev/null +++ b/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..5e28c7da6a --- /dev/null +++ b/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/suite", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/suite", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..dbb05b0ba0 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/ts-utils", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..5a34a026a9 --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/typescript-concatenator", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..659519f756 --- /dev/null +++ b/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils-node", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/utils-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json new file mode 100644 index 0000000000..81f0639244 --- /dev/null +++ b/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils", + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", + "type": "patch" + } + ], + "packageName": "@neo-one/utils", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index 6780248dd5..b88b6d53b5 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -17,7 +17,7 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "implicitlyPreferredVersions": true, diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 01fdfc0a24..0f1ebaeb17 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2094,7 +2094,7 @@ ts-loader "^6.1.0" ts-node "^8.4.1" tslint "^5.20.0" - typescript "3.8.3" + typescript "3.9.5" url-loader "^3.0.0" webpack "^4.40.2" webpack-bundle-analyzer "^3.4.1" @@ -2148,7 +2148,7 @@ tslint-immutable "^6.0.1" tslint-microsoft-contrib "^6.2.0" tslint-sonarts "^1.9.0" - typescript "3.8.3" + typescript "3.9.5" yargs "^14.2.0" "@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": @@ -2209,7 +2209,7 @@ source-map "^0.7.3" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" yargs "^14.2.0" zone.js "^0.10.2" @@ -2262,6 +2262,7 @@ 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" @@ -2451,7 +2452,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -2509,7 +2510,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/local-singleton@file:./projects/local-singleton.tgz": version "0.0.0" @@ -2846,7 +2847,7 @@ glob "^7.1.4" gulp "~4.0.2" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": version "0.0.0" @@ -2870,7 +2871,7 @@ safe-stable-stringify "^1.1.0" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": version "0.0.0" @@ -2913,7 +2914,7 @@ resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: gulp "~4.0.2" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/smart-contract@file:./projects/smart-contract.tgz": version "0.0.0" @@ -2934,7 +2935,7 @@ lodash "^4.17.15" source-map "^0.7.3" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": version "0.0.0" @@ -2952,7 +2953,7 @@ lodash "^4.17.15" toposort "^2.0.2" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" yargs "^14.2.0" "@rush-temp/utils-node@file:./projects/utils-node.tgz": @@ -2982,7 +2983,7 @@ lodash "^4.17.15" rxjs "^6.5.3" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" "@rush-temp/website@file:./projects/website.tgz": version "0.0.0" @@ -3048,7 +3049,7 @@ styled-tools "^1.7.1" ts-node "^8.4.1" tslib "^1.10.0" - typescript "3.8.3" + typescript "3.9.5" typescript-fsa "^3.0.0-beta-2" typescript-fsa-reducers "^1.2.1" webpack "^4.40.2" @@ -16411,11 +16412,6 @@ 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.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - prettier@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" @@ -20032,16 +20028,16 @@ typescript-fsa@^3.0.0-beta-2: resolved "https://registry.yarnpkg.com/typescript-fsa/-/typescript-fsa-3.0.0.tgz#3ad1cb915a67338e013fc21f67c9b3e0e110c912" integrity sha512-xiXAib35i0QHl/+wMobzPibjAH5TJLDj+qGq5jwVLG9qR4FUswZURBw2qihBm0m06tHoyb3FzpnJs1GRhRwVag== -typescript@3.8.1-rc: - version "3.8.1-rc" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.1-rc.tgz#f94333c14da70927ccd887be2e91be652a9a09f6" - integrity sha512-aOIe066DyZn2uYIiND6fXMUUJ70nxwu/lKhA92QuQzXyC86fr0ywo1qvO8l2m0EnDcfjprYPuFRgNgDj7U2GlQ== - typescript@3.8.3, typescript@^3.2.2: version "3.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== +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== + u2f-api@0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index 8323b026e6..0fa53f80a6 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -6,6 +6,7 @@ "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", @@ -23,6 +24,5 @@ "nyc": "^14.1.1", "tmp": "^0.1.0", "ts-jest": "^24.1.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json index 67e574281f..3baf788f69 100644 --- a/packages/neo-one-build-tools-web/package.json +++ b/packages/neo-one-build-tools-web/package.json @@ -78,7 +78,7 @@ "thread-loader": "^2.1.3", "ts-loader": "^6.1.0", "ts-node": "^8.4.1", - "typescript": "3.8.3", + "typescript": "3.9.5", "url-loader": "^3.0.0", "webpack": "^4.40.2", "webpack-bundle-analyzer": "^3.4.1", diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index 6c3e782f44..8aa1a63078 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -71,7 +71,7 @@ "tslint-immutable": "^6.0.1", "tslint-microsoft-contrib": "^6.2.0", "tslint-sonarts": "^1.9.0", - "typescript": "3.8.3", + "typescript": "3.9.5", "yargs": "^14.2.0" }, "devDependencies": { diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 2b7841d44c..fd1c2725c3 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/cli-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", @@ -30,6 +31,5 @@ "@types/prompts": "^2.0.1", "@types/schema-utils": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index e14e80f8f6..a58b3116d5 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -283,10 +283,7 @@ const validateConfig = async (rootDir: string, configIn: any): Promise { }), }; - const dapi = typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; + const dapi = + typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; if (dapi !== undefined) { return { ...localUserAccountProvider, @@ -38,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; @@ -50,32 +52,96 @@ export const createClient = (getUserAccountProvidersOrHost) => { } const providers = []; - if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + 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) { 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' }, + { + 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, ); @@ -87,5 +153,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10020/rpc` })), + local: new DeveloperClient( + new NEOONEDataProvider({ + network: 'local', + rpcURL: `http://${host}:10020/rpc`, + }), + ), }); diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 20457d7f07..6064b797b2 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -11,6 +11,7 @@ "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.5.0", @@ -40,6 +41,5 @@ "@types/scrypt-js": "^2.0.3", "@types/wif": "^2.0.1", "gulp": "~4.0.2" - }, - "sideEffects": false + } } 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..b28428a8c5 100644 --- a/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts +++ b/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts @@ -73,7 +73,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([ 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..e83b4b7c82 100644 --- a/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts +++ b/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts @@ -451,35 +451,35 @@ describe('contractParameters', () => { describe('Extra Contract Parameter Coverage', () => { 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], }; const mapABI = { - type: 'Map' as const, + type: 'Map', key: { - type: 'String' as const, + type: 'String', }, value: { - type: 'String' as const, + type: 'String', }, }; const objABI = { - type: 'Object' as const, + type: 'Object', properties: { one: { - type: 'String' as const, + type: 'String', }, }, }; @@ -490,7 +490,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', () => { diff --git a/packages/neo-one-client-common/src/contractParameters.ts b/packages/neo-one-client-common/src/contractParameters.ts index 8b4ac9f009..607e79e06c 100644 --- a/packages/neo-one-client-common/src/contractParameters.ts +++ b/packages/neo-one-client-common/src/contractParameters.ts @@ -200,9 +200,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), + ]), ); }; 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 index f52a261c23..686b65f5e6 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts @@ -3,24 +3,24 @@ 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; + | AttributeUsageModel.DescriptionUrl + | AttributeUsageModel.Description + | AttributeUsageModel.Remark + | AttributeUsageModel.Remark1 + | AttributeUsageModel.Remark2 + | AttributeUsageModel.Remark3 + | AttributeUsageModel.Remark4 + | AttributeUsageModel.Remark5 + | AttributeUsageModel.Remark6 + | AttributeUsageModel.Remark7 + | AttributeUsageModel.Remark8 + | AttributeUsageModel.Remark9 + | AttributeUsageModel.Remark10 + | AttributeUsageModel.Remark11 + | AttributeUsageModel.Remark12 + | AttributeUsageModel.Remark13 + | AttributeUsageModel.Remark14 + | AttributeUsageModel.Remark15; export interface BufferAttributeModelAdd { readonly usage: BufferAttributeUsageModel; 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 index 92c6b15515..0ed2c08437 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts @@ -1,8 +1,9 @@ import { BinaryWriter } from '../../../BinaryWriter'; import { common, ECPoint } from '../../../common'; import { AttributeBaseModel } from './AttributeBaseModel'; +import { AttributeUsageModel } from './AttributeUsageModel'; -export type ECPointAttributeUsageModel = 0x02 | 0x03; +export type ECPointAttributeUsageModel = AttributeUsageModel.ECDH02 | AttributeUsageModel.ECDH03; export interface ECPointAttributeModelAdd { readonly usage: ECPointAttributeUsageModel; 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 index b5d8e4bd30..9bfc88ae88 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts @@ -1,8 +1,9 @@ import { BinaryWriter } from '../../../BinaryWriter'; import { UInt160 } from '../../../common'; import { AttributeBaseModel } from './AttributeBaseModel'; +import { AttributeUsageModel } from './AttributeUsageModel'; -export type UInt160AttributeUsageModel = 0x20; +export type UInt160AttributeUsageModel = AttributeUsageModel.Script; export interface UInt160AttributeModelAdd { readonly usage: UInt160AttributeUsageModel; 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 index e259b7b5f6..daa634c3a4 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts @@ -1,25 +1,26 @@ import { BinaryWriter } from '../../../BinaryWriter'; import { UInt256 } from '../../../common'; import { AttributeBaseModel } from './AttributeBaseModel'; +import { AttributeUsageModel } from './AttributeUsageModel'; export type UInt256AttributeUsageModel = - | 0x00 - | 0x30 - | 0xa1 - | 0xa2 - | 0xa3 - | 0xa4 - | 0xa5 - | 0xa6 - | 0xa7 - | 0xa8 - | 0xa9 - | 0xaa - | 0xab - | 0xac - | 0xad - | 0xae - | 0xaf; + | AttributeUsageModel.ContractHash + | AttributeUsageModel.Vote + | AttributeUsageModel.Hash1 + | AttributeUsageModel.Hash2 + | AttributeUsageModel.Hash3 + | AttributeUsageModel.Hash4 + | AttributeUsageModel.Hash5 + | AttributeUsageModel.Hash6 + | AttributeUsageModel.Hash7 + | AttributeUsageModel.Hash8 + | AttributeUsageModel.Hash9 + | AttributeUsageModel.Hash10 + | AttributeUsageModel.Hash11 + | AttributeUsageModel.Hash12 + | AttributeUsageModel.Hash13 + | AttributeUsageModel.Hash14 + | AttributeUsageModel.Hash15; export interface UInt256AttributeModelAdd { readonly usage: UInt256AttributeUsageModel; diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index aaa9fba56c..9b2d1e21d2 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-switch": "^2.5.0", @@ -37,6 +38,5 @@ "@types/lodash": "^4.14.138", "@types/tapable": "^1.0.4", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index 5bdaa74bfc..a354574cc6 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -343,7 +343,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: [], @@ -594,7 +594,7 @@ const createInteropInterfaceContractParameterJSON = (options: Partial = {}): MapContractParameterJSON => ({ type: 'Map', - value: [[createIntegerContractParameterJSON(), createBooleanContractParameterJSON()] as const], + value: [[createIntegerContractParameterJSON(), createBooleanContractParameterJSON()]], ...options, }); @@ -826,7 +826,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-core/src/__other_tests__/RemoteUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__other_tests__/RemoteUserAccountProvider.test.ts index 343a830802..249310182d 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 @@ -23,31 +23,28 @@ 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, + ['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], ], - ] as const, - ['map', new Map([[data.bns.a, data.numbers.b] as const])] as const, - ['object', { key: false }] as const, - [ - 'forward', - { name: 'forwardValue', converted: Buffer.alloc(20, 7), param: unlockedWallet.userAccount.id.address }, - ] as const, + ], + ['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, diff --git a/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts index 865a35fa51..a0319d5e56 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts @@ -125,14 +125,14 @@ describe('NEODataProvider', () => { }); 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, + ['CreditFlag', 'Credit'], + ['DutyFlag', 'Duty'], + ['GoverningToken', 'Governing'], + ['UtilityToken', 'Utility'], + ['Currency', 'Currency'], + ['Share', 'Share'], + ['Invoice', 'Invoice'], + ['Token', 'Token'], ]; convertedAssetTypes.forEach(([from, to]) => { @@ -264,17 +264,17 @@ describe('NEODataProvider', () => { }); 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, + ['Signature', 'Signature'], + ['Boolean', 'Boolean'], + ['Integer', 'Integer'], + ['Hash160', 'Address'], + ['Hash256', 'Hash256'], + ['ByteArray', 'Buffer'], + ['PublicKey', 'PublicKey'], + ['String', 'String'], + ['Array', 'Array'], + ['InteropInterface', 'InteropInterface'], + ['Void', 'Void'], ]; convertedContractParameterTypes.forEach(([from, to]) => { 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 e6877395ee..8614dbca9a 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 @@ -218,14 +218,14 @@ describe('NEOONEDataProvider', () => { }); 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, + ['CreditFlag', 'Credit'], + ['DutyFlag', 'Duty'], + ['GoverningToken', 'Governing'], + ['UtilityToken', 'Utility'], + ['Currency', 'Currency'], + ['Share', 'Share'], + ['Invoice', 'Invoice'], + ['Token', 'Token'], ]; convertedAssetTypes.forEach(([from, to]) => { @@ -339,17 +339,17 @@ describe('NEOONEDataProvider', () => { }); 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, + ['Signature', 'Signature'], + ['Boolean', 'Boolean'], + ['Integer', 'Integer'], + ['Hash160', 'Address'], + ['Hash256', 'Hash256'], + ['ByteArray', 'Buffer'], + ['PublicKey', 'PublicKey'], + ['String', 'String'], + ['Array', 'Array'], + ['InteropInterface', 'InteropInterface'], + ['Void', 'Void'], ]; convertedContractParameterTypes.forEach(([from, to]) => { 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..523239f23e 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 @@ -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__/user/DapiUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts index 110cb9b5c2..c6337ee9fe 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 @@ -213,31 +213,31 @@ 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, + ['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], ], - ] as const, - ['map', new Map([[data.bns.a, data.numbers.b] as const])] as const, - ['object', { key: false }] as const, + ], + ['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 = [ 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/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 3ed27c1fda..e9736ff56c 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -158,9 +158,10 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont 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), + ]), }; case 'PublicKey': return parameter; @@ -525,7 +526,7 @@ export function convertInvocationData( contracts: data.contracts.map(convertContract), deletedContractAddresses: data.deletedContractHashes.map(scriptHashToAddress), migratedContractAddresses: data.migratedContractHashes.map( - ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)] as const, + ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)], ), actions: data.actions.map((action, idx) => convertAction(blockHash, blockIndex, transactionHash, transactionIndex, idx, action), diff --git a/packages/neo-one-client-core/src/sc/common.ts b/packages/neo-one-client-core/src/sc/common.ts index 0a93e405de..71b4f22379 100644 --- a/packages/neo-one-client-core/src/sc/common.ts +++ b/packages/neo-one-client-core/src/sc/common.ts @@ -383,7 +383,7 @@ 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 }; 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-full-common/package.json b/packages/neo-one-client-full-common/package.json index aa1e8804e6..4be510ed98 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/utils": "^2.5.0", @@ -20,6 +21,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index 9106ffd778..d680168433 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", @@ -29,8 +30,7 @@ "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "bn.js": "^5.0.0", - "rxjs": "^6.5.3", - "gulp": "~4.0.2" - }, - "sideEffects": false + "gulp": "~4.0.2", + "rxjs": "^6.5.3" + } } 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..8a1aceb43b 100644 --- a/packages/neo-one-client-full-core/src/__data__/factory.ts +++ b/packages/neo-one-client-full-core/src/__data__/factory.ts @@ -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__/user/LocalUserAccountProvider.test.ts b/packages/neo-one-client-full-core/src/__tests__/user/LocalUserAccountProvider.test.ts index c729ae35a0..96a0de45f8 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 @@ -451,7 +451,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(); diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index cb6d5bf51c..97f925590a 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client": "^2.6.0", "@neo-one/client-full-core": "^2.5.0" @@ -18,6 +19,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index c44940ff67..8567fa2cc2 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -12,6 +12,7 @@ "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", "@ledgerhq/hw-transport-u2f": "^4.68.2", @@ -34,6 +35,5 @@ }, "optionalDependencies": { "@ledgerhq/hw-transport-node-hid": "^4.68.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index f51f412f0d..78d0e9b922 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", @@ -19,6 +20,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-developer-tools-frame/src/BlockTime.tsx b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx index f21f4a5526..f6ac1ccee0 100644 --- a/packages/neo-one-developer-tools-frame/src/BlockTime.tsx +++ b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx @@ -44,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 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/ToastsContext.tsx b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx index 3b1b549e7d..35b4e26069 100644 --- a/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx +++ b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx @@ -35,7 +35,7 @@ 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; 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/WalletSelectorBase.tsx b/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx index cbb23b9cec..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]; }), ), ]); diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index 5b78ea689f..d51e02f6be 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -11,15 +11,15 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-core": "^2.6.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, "devDependencies": { - "@neo-one/developer-tools-frame": "^2.3.0", "@neo-one/build-tools": "^1.0.0", + "@neo-one/developer-tools-frame": "^2.3.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index 86aeab6720..1c028880ef 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -9,6 +9,7 @@ "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.5.0", "@neo-one/logger": "^2.5.0", @@ -32,15 +33,14 @@ "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/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/lru-cache": "^5.1.0", "@types/semver": "^6.0.2", "@types/tar": "^4.0.1" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 3861c77b08..25588cf629 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -75,7 +75,7 @@ "styled-tools": "^1.7.1", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.8.3", + "typescript": "3.9.5", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" 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/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/ToolbarPopover.tsx b/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx index 2faba4c7fa..42b110ce91 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx @@ -27,7 +27,7 @@ const TitleText = styled(Box)<{}, {}>` ${prop('theme.fontStyles.headline')}; `; -const ToggleWrapper = styled(Wrapper)` +const ToggleWrapper = styled(Wrapper)<{}, {}>` display: grid; color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaBook')}; 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/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/monaco/AsyncLanguageService.ts b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts index 01270bbaf5..9df2e93ee8 100644 --- a/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts +++ b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts @@ -241,6 +241,7 @@ export class AsyncLanguageService { fileName: string, files: { readonly [key: string]: string }, ): Promise => + // 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 diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index 2a4705cc32..c3dd8c1375 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-switch": "^2.5.0", "@neo-one/logger": "^2.5.0", @@ -22,6 +23,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-http/package.json b/packages/neo-one-http/package.json index e1483fdacc..085e5c8010 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -11,6 +11,7 @@ "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", @@ -25,6 +26,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-local-browser-worker/package.json b/packages/neo-one-local-browser-worker/package.json index 1dc6f3041f..6e1d7b1bf0 100644 --- a/packages/neo-one-local-browser-worker/package.json +++ b/packages/neo-one-local-browser-worker/package.json @@ -9,6 +9,7 @@ "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", @@ -23,6 +24,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/nanoid": "^2.0.0", "@types/pouchdb": "^6.4.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 9833695bdc..a47a5fbbd3 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -28,7 +28,7 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", 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-singleton/package.json b/packages/neo-one-local-singleton/package.json index 25f61cde19..21e369f966 100644 --- a/packages/neo-one-local-singleton/package.json +++ b/packages/neo-one-local-singleton/package.json @@ -9,6 +9,7 @@ "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", @@ -18,6 +19,5 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index bd06645e70..49334ef76e 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -11,12 +11,12 @@ "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" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index 40f69f0a28..f6d6ab7436 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/logger-config": "^2.5.0", "pino": "^5.12.6", @@ -21,6 +22,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/pino": "^5.8.9", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index ef265cc4e1..066751d095 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -12,6 +12,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/logger": "^2.5.0", "@neo-one/node": "^2.5.0", @@ -38,6 +39,5 @@ "cross-fetch": "^3.0.4", "fs-extra": "^8.1.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 42d67d79f6..2d6f572026 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-switch": "^2.5.0", @@ -30,6 +31,5 @@ "@types/js-priority-queue": "^0.0.5", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index c9fd0f4a5c..d8937a64d0 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -692,7 +692,7 @@ export class Blockchain { }) .pipe(toArray()) .toPromise(), - ] as const); + ]); return { asset, @@ -733,7 +733,7 @@ export class Blockchain { const [transactionData, output] = await Promise.all([ this.transactionData.tryGet({ hash: input.hash }), this.output.get(input), - ] as const); + ]); if (transactionData === undefined) { return undefined; @@ -764,7 +764,7 @@ export class Blockchain { this.mutableInQueue = new Set(); this.mutableDoneRunningResolve = undefined; this.mutableRunning = true; - logger.info({ name: 'neo_blockchain_start' }, 'NEO blockchain started.'); + logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); } // private readonly getVotes = async (transactions: readonly Transaction[]): Promise => { diff --git a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts index 3dbbcf3c5a..0a0e4b3cbb 100644 --- a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts @@ -394,7 +394,7 @@ export class WriteBatchBlockchain { this.block.add(block), this.header.add(block.header), - ] as const); + ]); const prevBlockData = maybePrevBlockData === undefined @@ -665,10 +665,10 @@ export class WriteBatchBlockchain { globalActionIndex = globalActionIndex.add(utils.ONE); }, onMigrateContract: ({ from, to }) => { - migratedContractHashes.push([from, to] as const); + migratedContractHashes.push([from, to]); }, onSetVotes: ({ address, votes }) => { - voteUpdates.push([address, votes] as const); + voteUpdates.push([address, votes]); }, }, @@ -858,7 +858,7 @@ export class WriteBatchBlockchain { await this.updateAccount( common.hexToUInt160(address), // tslint:disable-next-line no-unused - values.map(([_address, asset, value]) => [asset, value] as const), + values.map(([_address, asset, value]) => [asset, value]), spent === undefined ? [] : spent, claimed === undefined ? [] : claimed, outs === undefined ? [] : outs, diff --git a/packages/neo-one-node-browser-worker/package.json b/packages/neo-one-node-browser-worker/package.json index 9fed20f36e..101292dad9 100644 --- a/packages/neo-one-node-browser-worker/package.json +++ b/packages/neo-one-node-browser-worker/package.json @@ -9,6 +9,7 @@ "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", @@ -18,6 +19,5 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index 4ae9c66a58..c5f6d33915 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -9,6 +9,7 @@ "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.6.0", "@neo-one/client-core": "^2.6.0", @@ -31,6 +32,5 @@ "@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-consensus/package.json b/packages/neo-one-node-consensus/package.json index 661ccfafdf..e1cb0a68bb 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/logger": "^2.5.0", @@ -29,6 +30,5 @@ "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index d5ebed962e..c0eeffa123 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-full-common": "^2.5.0", @@ -29,6 +30,5 @@ "@types/lodash": "^4.14.138", "@types/through": "^0.0.29", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-core/src/InvocationData.ts b/packages/neo-one-node-core/src/InvocationData.ts index a7bcf72c9b..bde00a52aa 100644 --- a/packages/neo-one-node-core/src/InvocationData.ts +++ b/packages/neo-one-node-core/src/InvocationData.ts @@ -41,13 +41,13 @@ export class InvocationData implements SerializableWire { const from = reader.readUInt160(); const to = reader.readUInt160(); - return [from, to] as const; + return [from, to]; }); const voteUpdates = reader.readArray]>(() => { const address = reader.readUInt160(); const votes = reader.readArray(() => reader.readECPoint()); - return [address, votes] as const; + return [address, votes]; }); const blockIndex = reader.readUInt32LE(); const transactionIndex = reader.readUInt32LE(); diff --git a/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts index 8732c74ebb..c39bb3628c 100644 --- a/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts +++ b/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts @@ -39,9 +39,10 @@ export class MapContractParameter extends ContractParameterBase< 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, - ), + value: this.value.map((val) => [ + val[0].serializeJSON(context), + val[1].serializeJSON(context), + ]), }; } } diff --git a/packages/neo-one-node-core/src/disassembleByteCode.ts b/packages/neo-one-node-core/src/disassembleByteCode.ts index 31e47d80c2..596fe3f742 100644 --- a/packages/neo-one-node-core/src/disassembleByteCode.ts +++ b/packages/neo-one-node-core/src/disassembleByteCode.ts @@ -25,7 +25,7 @@ export const disassembleByteCode = (bytes: Buffer): readonly Line[] => { const pc = reader.index; const byte = reader.readUInt8(); if (!isByteCode(byte)) { - mutableResult.push([pc, 'UNKNOWN', undefined] as const); + mutableResult.push([pc, 'UNKNOWN', undefined]); continue; } @@ -47,15 +47,15 @@ export const disassembleByteCode = (bytes: Buffer): readonly Line[] => { } else { numBytes = reader.readInt32LE(); } - mutableResult.push([pc, opCode, createHexString(reader.readBytes(numBytes))] as const); + mutableResult.push([pc, opCode, createHexString(reader.readBytes(numBytes))]); } else if (byte === Op.JMP || byte === Op.JMPIF || byte === Op.JMPIFNOT || byte === Op.CALL) { - mutableResult.push([pc, opCode, `${reader.readInt16LE()}`] as const); + mutableResult.push([pc, opCode, `${reader.readInt16LE()}`]); } 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); + mutableResult.push([pc, opCode, createHexString(Buffer.from(mutableAppBytes))]); } else if (byte === Op.SYSCALL) { - mutableResult.push([pc, opCode, utils.toASCII(reader.readVarBytesLE(252))] as const); + mutableResult.push([pc, opCode, utils.toASCII(reader.readVarBytesLE(252))]); // tslint:disable-next-line strict-type-predicate } else if (byte === Op.CALL_E || byte === Op.CALL_ET) { const returnValueCount = reader.readBytes(1); @@ -68,7 +68,7 @@ export const disassembleByteCode = (bytes: Buffer): readonly Line[] => { `${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); @@ -79,9 +79,9 @@ export const disassembleByteCode = (bytes: Buffer): readonly Line[] => { `${createHexString(returnValueCount)} ${createHexString(parametersCount)} ${ jumpVal === undefined ? '' : createHexString(jumpVal) }`, - ] as const); + ]); } else { - mutableResult.push([pc, opCode, undefined] as const); + mutableResult.push([pc, opCode, undefined]); } } diff --git a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts b/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts index a9e2f9fc85..2f3b2cbba4 100644 --- a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts +++ b/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts @@ -180,10 +180,7 @@ export class StateDescriptor implements SerializableWire, Seria const reader = new BinaryReader(this.value); const hash = common.bufferToUInt160(this.key); - const [account, validators] = await Promise.all([ - options.tryGetAccount({ hash }), - options.getAllValidators(), - ] as const); + const [account, validators] = await Promise.all([options.tryGetAccount({ hash }), options.getAllValidators()]); if (account === undefined || account.isFrozen) { throw new VerifyError('Account is frozen'); diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 23e14bb894..91a2449845 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -167,7 +167,7 @@ function weightedFilter( mutableResult.push([ value, weight.gte(0) ? weight.integerValue(BigNumber.ROUND_FLOOR) : weight.integerValue(BigNumber.ROUND_CEIL), - ] as const); + ]); } return mutableResult; diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index eda8d1ed54..8800f66984 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -11,6 +11,7 @@ "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.6.0", "@neo-one/http": "^2.5.0", @@ -38,6 +39,5 @@ "@types/koa-static": "^4.0.1", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index 6d85b05714..6dc8524670 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/node-core": "^2.5.0", @@ -24,6 +25,5 @@ "@types/bn.js": "^4.11.5", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index d432814f4d..b8c7bb7794 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-switch": "^2.5.0", "@neo-one/logger": "^2.5.0", @@ -23,6 +24,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index 60b8281b53..25280bc542 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/logger": "^2.5.0", "@neo-one/node-core": "^2.5.0", @@ -22,6 +23,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index 3193336909..e1945a74c2 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-switch": "^2.5.0", @@ -37,6 +38,5 @@ "@types/lodash": "^4.14.138", "@types/lru-cache": "^5.1.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index add58f7289..9da120a0a9 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-switch": "^2.5.0", @@ -23,6 +24,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 5d6e34b344..1486ec7a26 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/node-core": "^2.5.0", @@ -23,6 +24,5 @@ "@neo-one/build-tools": "^1.0.0", "@types/lru-cache": "^5.1.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index 59ff65a987..d4870580c3 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/node-core": "^2.5.0", @@ -20,6 +21,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 6266834cb4..1d7e9a7e39 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/node-core": "^2.5.0", @@ -27,6 +28,5 @@ "@types/memdown": "^3.0.0", "gulp": "~4.0.2", "memdown": "^5.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 1a83b28192..0e47aaca0c 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -12,6 +12,7 @@ "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.5.0", @@ -31,6 +32,5 @@ "@types/yargs": "^13.0.3", "fs-extra": "^8.1.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index cb79b344e0..89d2f3bdb5 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-full-common": "^2.5.0", @@ -30,6 +31,5 @@ "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts index 49436ec16d..fa7e2026e3 100644 --- a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts @@ -72,15 +72,15 @@ const mapStatic = new MapStackItem({ [ 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, + [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], + [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], ]), }); @@ -89,15 +89,15 @@ const mapSetRef = new MapStackItem({ [ 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, + [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], + [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], ]), }); @@ -106,15 +106,15 @@ const mapRemoveRef = new MapStackItem({ [ 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, + [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], + [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], ]), }); @@ -1450,29 +1450,20 @@ const OPCODES = ([ [ 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, + [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], + [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], + [new BufferStackItem(Buffer.from('dddd', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(5))], ]), }), ], @@ -1604,13 +1595,10 @@ const OPCODES = ([ [ 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, + [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], ]), }), ], 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 index a8fa867dc1..99a7bee1e1 100644 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts @@ -5,8 +5,8 @@ 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 keyMap = new Map([['0', keyStackItem]]); + const valueMap = new Map([[valueStackItem.toStructuralKey(), valueStackItem]]); const mapStackItem = new MapStackItem({ referenceKeys: keyMap, referenceValues: valueMap, 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 57168c4e94..3e5e62e1a5 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -377,13 +377,13 @@ const SYSCALLS = [ [ 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, + ], ]), }), ], diff --git a/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts b/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts index f5c9a5403f..df6dcedbff 100644 --- a/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts +++ b/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts @@ -56,9 +56,10 @@ export class MapStackItem extends StackItemBase { newSeen.add(this); return new MapContractParameter( - this.keysArray().map( - (key) => [key.toContractParameter(newSeen), this.get(key).toContractParameter(newSeen)] as const, - ), + this.keysArray().map((key) => [ + key.toContractParameter(newSeen), + this.get(key).toContractParameter(newSeen), + ]), ); } diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 61fbc6da1f..085971cb14 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-switch": "^2.5.0", "@neo-one/logger": "^2.5.0", @@ -36,6 +37,5 @@ "@types/leveldown": "^4.0.0", "@types/levelup": "^3.1.1", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-react-common/src/Select.tsx b/packages/neo-one-react-common/src/Select.tsx index ca6499ecf9..6b038b3bf4 100644 --- a/packages/neo-one-react-common/src/Select.tsx +++ b/packages/neo-one-react-common/src/Select.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import SelectBase from 'react-select'; import { prop } from 'styled-tools'; -const StyledSelect = 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/Tooltip.tsx b/packages/neo-one-react-common/src/Tooltip.tsx index 0cac02b370..39d694423b 100644 --- a/packages/neo-one-react-common/src/Tooltip.tsx +++ b/packages/neo-one-react-common/src/Tooltip.tsx @@ -5,7 +5,7 @@ import { prop } from 'styled-tools'; import { PopoverArrow } from './PopoverArrow'; import { TooltipBase } from './TooltipBase'; -export const StyledTooltip = styled(TooltipBase)` +export const StyledTooltip = styled(TooltipBase)<{}, {}>` background-color: ${prop('theme.gray5')}; border-color: ${prop('theme.gray5')}; color: ${prop('theme.gray0')}; 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/package.json b/packages/neo-one-react/package.json index 013efca2f5..f664ebf7bc 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -14,6 +14,7 @@ "dependencies": { "tslib": "^1.10.0" }, + "sideEffects": false, "peerDependencies": { "@types/react": "^16.0.0", "react": "^16.0.0", @@ -22,6 +23,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 70e177d7ac..d1b9c45b6e 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -19,7 +19,7 @@ "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index 5f1217008f..d64e98d1d5 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -27,7 +27,7 @@ "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", 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 0d5a7ec384..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, }; @@ -117,6 +118,28 @@ describe('ObjectLiteralExpressionCompiler', () => { `); }); + 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( ` 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 fc64eca970..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 @@ -85,4 +85,12 @@ describe('PropertyAccessExpressionCompiler', () => { 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__/ObjectLiteralExpressionCompiler.test.ts.snap b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap index 46bc69060c..66a8e86265 100644 --- 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 @@ -1,5 +1,18 @@ // 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. 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/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/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/sb/BaseScriptBuilder.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts index dfbd85c6f0..05795dd499 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 @@ -603,9 +603,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-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index fb92d86270..6afc82af53 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -8,6 +8,7 @@ "build": "", "lint": "" }, + "sideEffects": false, "dependencies": { "@neo-one/smart-contract": "^2.5.0" }, @@ -17,6 +18,5 @@ "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 4f4470433f..e01fa0b4ea 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -9,6 +9,7 @@ "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.6.0", "@neo-one/local-browser": "^2.3.1", @@ -22,6 +23,5 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 75e7b2f44f..67e870fbdd 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/cli-common": "^2.6.0", "@neo-one/client-common": "^2.6.0", @@ -25,6 +26,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index 75b8551c76..e8c0143a9f 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", @@ -32,6 +33,5 @@ "@types/memdown": "^3.0.0", "bignumber.js": "^9.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index df324664a6..f04d7e2b35 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -15,7 +15,7 @@ "dependencies": { "@neo-one/smart-contract-compiler": "^2.5.0", "@neo-one/smart-contract-compiler-node": "^2.5.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", 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-suite/package.json b/packages/neo-one-suite/package.json index 9e6412b1fc..3976f5e9c6 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -8,6 +8,7 @@ "lint:staged": "", "pack": "gulp pack" }, + "sideEffects": false, "dependencies": { "@neo-one/cli": "^2.6.0", "@neo-one/client": "^2.6.0", @@ -19,6 +20,5 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index ebdae90714..61a8a78b3a 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -16,7 +16,7 @@ "lodash": "^4.17.15", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index 03563e25bb..ad59089815 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -18,7 +18,7 @@ "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", - "typescript": "3.8.3" + "typescript": "3.9.5" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-typescript-concatenator/src/Concatenator.ts b/packages/neo-one-typescript-concatenator/src/Concatenator.ts index a6eb78bf59..eea88c405d 100644 --- a/packages/neo-one-typescript-concatenator/src/Concatenator.ts +++ b/packages/neo-one-typescript-concatenator/src/Concatenator.ts @@ -367,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-utils-node/package.json b/packages/neo-one-utils-node/package.json index d9e81b5668..89a9e71073 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -11,6 +11,7 @@ "pack": "gulp pack", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "@neo-one/utils": "^2.5.0", "execa": "^3.2.0", @@ -21,11 +22,10 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/npm-package-arg": "^6.1.0", "@types/jest": "^24.0.18", + "@types/npm-package-arg": "^6.1.0", "@types/pino": "^5.8.9", "@types/yargs": "^13.0.3", "gulp": "~4.0.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 5757d3ef9d..2050b5b19e 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -25,6 +25,6 @@ "@types/lodash": "^4.14.138", "gulp": "~4.0.2", "jest": "^24.9.0", - "typescript": "3.8.3" + "typescript": "3.9.5" } } diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 06ba6cf0a5..340373b1ec 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -63,7 +63,7 @@ "styled-tools": "^1.7.1", "ts-node": "^8.4.1", "tslib": "^1.10.0", - "typescript": "3.8.3", + "typescript": "3.9.5", "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", "webpack": "^4.40.2" diff --git a/packages/neo-one-website/src/components/StyledRouterLink.tsx b/packages/neo-one-website/src/components/StyledRouterLink.tsx index b1b0bc3890..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'), diff --git a/packages/neo-one-website/src/components/content/DateAndAuthor.tsx b/packages/neo-one-website/src/components/content/DateAndAuthor.tsx index 51a041a1dc..0781f92cf5 100644 --- a/packages/neo-one-website/src/components/content/DateAndAuthor.tsx +++ b/packages/neo-one-website/src/components/content/DateAndAuthor.tsx @@ -10,7 +10,7 @@ const Text = styled(Box)<{}, {}>` 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/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/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 a68347994e..c5430c3f25 100644 --- a/packages/neo-one-website/src/components/content/Sidebar.tsx +++ b/packages/neo-one-website/src/components/content/Sidebar.tsx @@ -78,7 +78,7 @@ const MobileSidebarWrapper = styled(Box)<{}, {}>` 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/SubsectionLink.tsx b/packages/neo-one-website/src/components/content/SubsectionLink.tsx index 86c6e46351..9dc547cdd3 100644 --- a/packages/neo-one-website/src/components/content/SubsectionLink.tsx +++ b/packages/neo-one-website/src/components/content/SubsectionLink.tsx @@ -23,7 +23,7 @@ const Link = styled(StyledRouterLink)` } `; -const TutorialLink = styled(BaseLink)` +const TutorialLink = styled(BaseLink)<{}, {}>` ${ifProp('active', prop('theme.fonts.axiformaBold'), prop('theme.fonts.axiformaRegular'))}; ${prop('theme.fontStyles.subheading')}; diff --git a/packages/neo-one-website/src/components/home/Home.tsx b/packages/neo-one-website/src/components/home/Home.tsx index 59b399eefa..2280f139a4 100644 --- a/packages/neo-one-website/src/components/home/Home.tsx +++ b/packages/neo-one-website/src/components/home/Home.tsx @@ -114,7 +114,7 @@ export const Home = (props: {}) => ( Get Started - Take Course > + Take Course {'>'} diff --git a/packages/neo-one-worker/package.json b/packages/neo-one-worker/package.json index a192c3f18d..773cb4b573 100644 --- a/packages/neo-one-worker/package.json +++ b/packages/neo-one-worker/package.json @@ -9,6 +9,7 @@ "lint:staged": "lint-staged --relative", "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" }, + "sideEffects": false, "dependencies": { "core-js": "^3.2.1", "rxjs": "^6.5.3", @@ -16,6 +17,5 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0" - }, - "sideEffects": false + } } From 1c3f3094c0ac813089e5460d09edb313777232c1 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 22 Jun 2020 16:10:49 -0700 Subject: [PATCH 061/141] chore(ts): transaction class changes needed for TS v3.9.5 update --- .../transaction/TransactionBaseModel.ts | 6 ++--- .../src/transaction/ClaimTransaction.ts | 2 +- .../src/transaction/ContractTransaction.ts | 2 +- .../src/transaction/EnrollmentTransaction.ts | 2 +- .../src/transaction/InvocationTransaction.ts | 26 +++++++++---------- .../src/transaction/IssueTransaction.ts | 2 +- .../src/transaction/MinerTransaction.ts | 2 +- .../src/transaction/PublishTransaction.ts | 2 +- .../src/transaction/RegisterTransaction.ts | 2 +- .../src/transaction/StateTransaction.ts | 2 +- .../src/transaction/TransactionBase.ts | 26 +++++++++---------- 11 files changed, 36 insertions(+), 38 deletions(-) diff --git a/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts index fcb57369ea..45145650b3 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts @@ -54,9 +54,9 @@ export abstract class TransactionBaseModel< 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 readonly hashInternal: () => UInt256; + public readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); + public readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); public constructor({ version, diff --git a/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts b/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts index 3b9b4e0e81..59a5ee9077 100644 --- a/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts @@ -58,7 +58,7 @@ export class ClaimTransaction extends TransactionBase< } public readonly claims!: readonly Input[]; - protected readonly sizeExclusive: () => number = utils.lazy( + public readonly sizeExclusive: () => number = utils.lazy( () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfArray(this.claims, (claim) => claim.size), ); private readonly claimGetScriptHashesForVerifyingInternal: ( diff --git a/packages/neo-one-node-core/src/transaction/ContractTransaction.ts b/packages/neo-one-node-core/src/transaction/ContractTransaction.ts index c52cfb5b0a..a0c749a088 100644 --- a/packages/neo-one-node-core/src/transaction/ContractTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/ContractTransaction.ts @@ -35,7 +35,7 @@ export class ContractTransaction extends TransactionBase< }); } - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); + public readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); public constructor({ version, attributes, inputs, outputs, scripts, hash }: TransactionBaseAdd) { super({ diff --git a/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts b/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts index e73cbfabc8..0556591a00 100644 --- a/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts @@ -61,7 +61,7 @@ export class EnrollmentTransaction extends TransactionBase< } public readonly publicKey: ECPoint; - protected readonly sizeExclusive: () => number = utils.lazy( + public readonly sizeExclusive: () => number = utils.lazy( () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfECPoint(this.publicKey), ); private readonly enrollmentGetScriptHashesForVerifyingInternal: ( diff --git a/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts b/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts index 2d4665db26..e44142734f 100644 --- a/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts @@ -63,7 +63,7 @@ export class InvocationTransaction extends TransactionBase< }); } - protected readonly sizeExclusive: () => number = utils.lazy( + public readonly sizeExclusive: () => number = utils.lazy( () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfVarBytesLE(this.script), ); @@ -88,19 +88,17 @@ export class InvocationTransaction extends TransactionBase< 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, - ), + migratedContractHashes: migratedContractHashes.map(([from, to]) => [ + common.uInt160ToString(from), + common.uInt160ToString(to), + ]), + voteUpdates: voteUpdates.map(([address, votes]) => [ + crypto.scriptHashToAddress({ + addressVersion: context.addressVersion, + scriptHash: address, + }), + votes.map((vote) => common.ecPointToString(vote)), + ]), actions: actions.map((action) => action.serializeJSON(context)), storageChanges: storageChanges.map((storageChange) => storageChange.serializeJSON(context)), }; diff --git a/packages/neo-one-node-core/src/transaction/IssueTransaction.ts b/packages/neo-one-node-core/src/transaction/IssueTransaction.ts index f28908e788..7913f1b635 100644 --- a/packages/neo-one-node-core/src/transaction/IssueTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/IssueTransaction.ts @@ -45,7 +45,7 @@ export class IssueTransaction extends TransactionBase< }); } - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); + public readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); private readonly issueGetScriptHashesForVerifyingInternal: ( options: TransactionGetScriptHashesForVerifyingOptions, ) => Promise>; diff --git a/packages/neo-one-node-core/src/transaction/MinerTransaction.ts b/packages/neo-one-node-core/src/transaction/MinerTransaction.ts index f9d3038059..131a48f798 100644 --- a/packages/neo-one-node-core/src/transaction/MinerTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/MinerTransaction.ts @@ -52,7 +52,7 @@ export class MinerTransaction extends TransactionBase< } public readonly nonce: number; - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt32LE); + public readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt32LE); public constructor({ version, attributes, inputs, outputs, scripts, hash, nonce }: MinerTransactionAdd) { super({ diff --git a/packages/neo-one-node-core/src/transaction/PublishTransaction.ts b/packages/neo-one-node-core/src/transaction/PublishTransaction.ts index 063b70a436..117c8c36a1 100644 --- a/packages/neo-one-node-core/src/transaction/PublishTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/PublishTransaction.ts @@ -54,7 +54,7 @@ export class PublishTransaction extends TransactionBase< } public readonly contract: Contract; - protected readonly sizeExclusive: () => number = utils.lazy( + public readonly sizeExclusive: () => number = utils.lazy( () => IOHelper.sizeOfUInt8 + sizeOfContract({ diff --git a/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts b/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts index 324e76b06b..b9249c1d80 100644 --- a/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts @@ -86,7 +86,7 @@ export class RegisterTransaction extends TransactionBase< } public readonly asset: Asset; - protected readonly sizeExclusive: () => number = utils.lazy( + public readonly sizeExclusive: () => number = utils.lazy( () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt8 + diff --git a/packages/neo-one-node-core/src/transaction/StateTransaction.ts b/packages/neo-one-node-core/src/transaction/StateTransaction.ts index 7cc5c05b6f..c136e27307 100644 --- a/packages/neo-one-node-core/src/transaction/StateTransaction.ts +++ b/packages/neo-one-node-core/src/transaction/StateTransaction.ts @@ -58,7 +58,7 @@ export class StateTransaction extends TransactionBase< } public readonly descriptors: readonly StateDescriptor[]; - protected readonly sizeExclusive: () => number = utils.lazy(() => + public readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfArray(this.descriptors, (descriptor) => descriptor.size), ); private readonly stateGetScriptHashesForVerifyingInternal: ( diff --git a/packages/neo-one-node-core/src/transaction/TransactionBase.ts b/packages/neo-one-node-core/src/transaction/TransactionBase.ts index 6e8a115e25..212e030b73 100644 --- a/packages/neo-one-node-core/src/transaction/TransactionBase.ts +++ b/packages/neo-one-node-core/src/transaction/TransactionBase.ts @@ -101,6 +101,8 @@ export function TransactionBase< TBase extends Constructor> >(Base: TBase) { abstract class TransactionBaseClass extends Base implements EquatableKey, SerializableJSON { + public static readonly WitnessConstructor: Constructor = Witness; + public static deserializeTransactionBaseStartWireBase({ reader, }: DeserializeWireBaseOptions): { readonly type: TransactionType; readonly version: number } { @@ -142,8 +144,6 @@ export function TransactionBase< }); } - protected static readonly WitnessConstructor: Constructor = Witness; - public readonly equals: Equals = utils.equals( // tslint:disable-next-line no-any this.constructor as any, @@ -159,7 +159,7 @@ export function TransactionBase< return [...hashes].sort(); }, ); - private readonly sizeInternal = utils.lazy( + public readonly sizeInternal = utils.lazy( () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfArray(this.attributes, (attribute) => attribute.size) + @@ -168,7 +168,7 @@ export function TransactionBase< IOHelper.sizeOfArray(this.scripts, (script) => script.size) + this.sizeExclusive(), ); - private readonly networkFee = utils.lazyAsync( + public readonly networkFee = utils.lazyAsync( async (context: FeeContext): Promise => { const { getOutput, utilityToken } = context; @@ -189,10 +189,10 @@ export function TransactionBase< return result.lt(utils.ZERO) ? utils.ZERO : result; }, ); - private readonly getReferencesInternal = utils.lazyAsync(async ({ getOutput }: GetReferencesOptions) => + public readonly getReferencesInternal = utils.lazyAsync(async ({ getOutput }: GetReferencesOptions) => Promise.all(this.inputs.map(async (input) => getOutput(input))), ); - private readonly getTransactionResultsInternal = utils.lazyAsync( + public 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 } = {}; @@ -213,7 +213,7 @@ export function TransactionBase< return _.pickBy(mutableResults, (value) => value !== undefined && !value.eq(utils.ZERO)); }, ); - private readonly baseGetScriptHashesForVerifyingInternal = utils.lazyAsync( + public readonly baseGetScriptHashesForVerifyingInternal = utils.lazyAsync( async ({ getOutput, getAsset }: TransactionGetScriptHashesForVerifyingOptions) => { const [inputHashes, outputHashes] = await Promise.all([ Promise.all( @@ -257,7 +257,7 @@ export function TransactionBase< this.getNetworkFee(context.feeContext), // tslint:disable-next-line no-any context.tryGetTransactionData(this as any), - ] as const); + ]); return { txid: common.uInt256ToString(this.hashHex), @@ -343,9 +343,9 @@ export function TransactionBase< return results; } - protected readonly sizeExclusive: () => number = () => 0; + public readonly sizeExclusive: () => number = () => 0; - private async verifyDoubleSpend({ isSpent }: TransactionVerifyOptions): Promise { + public async verifyDoubleSpend({ isSpent }: TransactionVerifyOptions): Promise { const isDoubleSpend = await Promise.all(this.inputs.map(isSpent)); if (isDoubleSpend.some((value) => value)) { @@ -353,7 +353,7 @@ export function TransactionBase< } } - private async verifyOutputs({ getAsset, currentHeight }: TransactionVerifyOptions): Promise { + public async verifyOutputs({ getAsset, currentHeight }: TransactionVerifyOptions): Promise { const outputsGrouped = Object.entries(_.groupBy(this.outputs, (output) => common.uInt256ToHex(output.asset))); const hasInvalidOutputs = await Promise.all( @@ -378,7 +378,7 @@ export function TransactionBase< } } - private async verifyTransactionResults({ + public async verifyTransactionResults({ getOutput, utilityToken, governingToken, @@ -439,7 +439,7 @@ export function TransactionBase< } } - private async verifyScripts({ + public async verifyScripts({ getAsset, getOutput, verifyScript, From 48ec95b48ab7fdd6e1b0ca3b98d31f2a44ee8bdd Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Sun, 28 Jun 2020 23:10:18 -0700 Subject: [PATCH 062/141] fix(nits): fix nits in documentation (#2074) --- .../0-tokenomics/0-token/5-methods/chapter.md | 14 +++++++------- .../docs/2-advanced-guides/02-user-accounts.md | 2 +- .../2-advanced-guides/09-configuration-options.md | 2 +- packages/neo-one-website/tutorial/tutorial.md | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) 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/docs/2-advanced-guides/02-user-accounts.md b/packages/neo-one-website/docs/2-advanced-guides/02-user-accounts.md index 6ea6ffaf21..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 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/09-configuration-options.md b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md index 2c350a7cc8..3848faf80a 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 @@ -85,6 +85,6 @@ export default { Note -While hard coding the `LocalUserAccountProvider` is a viable option in testing this also requires storing a `privateKey` as plain text in a file that would traditionally be checked into version control, i.e github. For this reason we recommend only using a hard coded value for local on-the-fly testing / debugging. +While hard coding the `LocalUserAccountProvider` is a viable option in testing this also requires storing a `privateKey` as plain text in a file that would traditionally be checked into version control, like Git/GitHub. For this reason we recommend only using a hard coded value for local on-the-fly testing / debugging. ::: diff --git a/packages/neo-one-website/tutorial/tutorial.md b/packages/neo-one-website/tutorial/tutorial.md index 4cb018c565..1eac456188 100644 --- a/packages/neo-one-website/tutorial/tutorial.md +++ b/packages/neo-one-website/tutorial/tutorial.md @@ -299,7 +299,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 From 1a10164e76e922df88f49a44f39e261aa0b74f7c Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 1 Jul 2020 12:25:59 -0700 Subject: [PATCH 063/141] fix(rush): add post-install script to stop neotracker bringing in npm versions of neo-one packages (#2077) --- common/scripts/neo-one-prune.js | 45 +++++++++++++++++++++++++++++++++ rush.json | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 common/scripts/neo-one-prune.js diff --git a/common/scripts/neo-one-prune.js b/common/scripts/neo-one-prune.js new file mode 100644 index 0000000000..918860b7ad --- /dev/null +++ b/common/scripts/neo-one-prune.js @@ -0,0 +1,45 @@ +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']); + +const readDir = async (directory) => + new Promise((resolve, reject) => + fs.readdir(directory, (err, files) => (err ? reject(err) : resolve(files))), + ); +const rmDir = async (directory) => + new Promise((resolve, reject) => + fs.rmdir(directory, { recursive: true }, (err) => + err ? reject(err) : resolve(), + ), + ); + +/** + * 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) => rmDir(path.resolve(NEO_ONE_NM_PATH, package))), + ); +}; + +_run() + .then(() => { + /* */ + }) + .catch((err) => { + throw err; + }); diff --git a/rush.json b/rush.json index d634656b62..04052edfba 100644 --- a/rush.json +++ b/rush.json @@ -16,7 +16,7 @@ "eventHooks": { "preRushInstall": [], - "postRushInstall": [], + "postRushInstall": ["node ./common/scripts/neo-one-prune.js"], "preRushBuild": [], "postRushBuild": [] }, From 46b11e7dfe0fb663ef3d1bd69221b2aa3a4c365f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 2 Jul 2020 12:36:54 -0700 Subject: [PATCH 064/141] fix(rush): make neo-one-prune script work with nodejs v10.x (#2081) --- common/scripts/neo-one-prune.js | 40 ++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/common/scripts/neo-one-prune.js b/common/scripts/neo-one-prune.js index 918860b7ad..1b548dd527 100644 --- a/common/scripts/neo-one-prune.js +++ b/common/scripts/neo-one-prune.js @@ -11,17 +11,43 @@ const NEO_ONE_NM_PATH = path.resolve( const whitelist = new Set(['ec-key']); -const readDir = async (directory) => +const readDir = async (dir) => new Promise((resolve, reject) => - fs.readdir(directory, (err, files) => (err ? reject(err) : resolve(files))), + fs.readdir(dir, (err, files) => (err ? reject(err) : resolve(files))), ); -const rmDir = async (directory) => + +const isDirectoryFn = async (pathToCheck) => new Promise((resolve, reject) => - fs.rmdir(directory, { recursive: true }, (err) => - err ? reject(err) : resolve(), + 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 @@ -32,7 +58,9 @@ const _run = async () => { await Promise.all( packages .filter((package) => !whitelist.has(package)) - .map((package) => rmDir(path.resolve(NEO_ONE_NM_PATH, package))), + .map((package) => + rmFilesRecursive(path.resolve(NEO_ONE_NM_PATH, package)), + ), ); }; From 405635b95a32a04d5311e58ca004d6974ad2a930 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 6 Jul 2020 20:12:07 -0700 Subject: [PATCH 065/141] fix(website): pin pouchdb, update two configs to make website work (#2084) --- common/config/rush/yarn.lock | 126 ++++++++++++++++-- .../neo-one-build-tools-web/src/runCypress.ts | 22 ++- .../neo-one-local-browser-worker/package.json | 2 +- packages/neo-one-local-browser/package.json | 2 +- .../src/utils/getReferences.ts | 3 +- packages/neo-one-website/static.config.js | 2 +- 6 files changed, 138 insertions(+), 19 deletions(-) diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 0f1ebaeb17..ee3bc75b24 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2490,7 +2490,7 @@ 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.3" @@ -2504,7 +2504,7 @@ 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.3" safe-stable-stringify "^1.1.0" @@ -4425,7 +4425,7 @@ abstract-leveldown@^6.0.3, abstract-leveldown@^6.2.1: level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@~6.0.0: +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== @@ -8073,6 +8073,14 @@ defer-to-connect@^1.0.1: 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" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.0.1.tgz#1642eb18b535dfb2b6ac4d39fb10a9cbcfd13b09" + integrity sha512-BXohsvTedWOLkj2n/TY+yqVlrCWa2Zs8LSxh3uCAgFOru7/pjxKyZAexGa1j83BaKloER4PqUyQ9rGPJLt9bqA== + dependencies: + abstract-leveldown "~6.0.0" + inherits "^2.0.3" + deferred-leveldown@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" @@ -9306,6 +9314,11 @@ fast-deep-equal@^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: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -9427,6 +9440,14 @@ feature-policy@0.3.0: resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069" integrity sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ== +fetch-cookie@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.0.tgz#a6fc137ad8363aa89125864c6451b86ecb7de802" + integrity sha512-Mm5pGlT3agW6t71xVM7vMZPIvI7T4FaTuFW4jari6dVzYHFDb3WZZsGpN22r/o3XMdkM0E7sPd1EGeyVbH2Tgg== + dependencies: + es6-denodeify "^0.1.1" + tough-cookie "^2.3.1" + fetch-cookie@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.3.tgz#b8d023f421dd2b2f4a0eca9cd7318a967ed4eed8" @@ -13206,6 +13227,17 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" +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.0.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.2" resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" @@ -13216,7 +13248,7 @@ level-js@^5.0.0: inherits "^2.0.3" ltgt "^2.1.2" -level-packager@^5.1.0: +level-packager@^5.0.0, level-packager@^5.1.0: 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== @@ -13238,6 +13270,16 @@ level-write-stream@1.0.0: dependencies: end-stream "~0.1.0" +level@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-5.0.1.tgz#8528cc1ee37ac413270129a1eab938c610be3ccb" + integrity sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg== + dependencies: + level-js "^4.0.0" + level-packager "^5.0.0" + leveldown "^5.0.0" + opencollective-postinstall "^2.0.0" + level@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/level/-/level-6.0.0.tgz#d216fb9b9c3940bcec15c5880d8da775ca086c5c" @@ -13248,6 +13290,16 @@ level@6.0.0: leveldown "^5.4.0" opencollective-postinstall "^2.0.0" +leveldown@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.0.2.tgz#c8edc2308c8abf893ffc81e66ab6536111cae92c" + integrity sha512-Ib6ygFYBleS8x2gh3C1AkVsdrUShqXpe6jSTnZ6sRycEXKhqVf+xOSkhgSnjidpPzyv0d95LJVFrYQ4NuXAqHA== + dependencies: + abstract-leveldown "~6.0.0" + fast-future "~1.0.2" + napi-macros "~1.8.1" + node-gyp-build "~3.8.0" + leveldown@5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.4.1.tgz#83a8fdd9bb52b1ed69be2ef59822b6cdfcdb51ec" @@ -13257,7 +13309,7 @@ leveldown@5.4.1: napi-macros "~2.0.0" node-gyp-build "~4.1.0" -leveldown@^5.1.1, leveldown@^5.4.0: +leveldown@^5.0.0, leveldown@^5.1.1, leveldown@^5.4.0: version "5.6.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== @@ -13266,6 +13318,16 @@ leveldown@^5.1.1, leveldown@^5.4.0: napi-macros "~2.0.0" node-gyp-build "~4.1.0" +levelup@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.0.2.tgz#bcb8d28d0a82ee97f1c6d00f20ea6d32c2803c5b" + integrity sha512-cx9PmLENwbGA3svWBEbeO2HazpOSOYSXH4VA+ahVpYyurvD+SDSfURl29VBY2qgyk+Vfy2dJd71SBRckj/EZVA== + dependencies: + deferred-leveldown "~5.0.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + xtend "~4.0.0" + levelup@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.1.0.tgz#49ab5d3a341731cd102f91c6bc17a1acb1969a17" @@ -14538,6 +14600,11 @@ napi-build-utils@^1.0.1: 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" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-1.8.2.tgz#299265c1d8aa401351ad0675107d751228c03eda" + integrity sha512-Tr0DNY4RzTaBG2W2m3l7ZtFuJChTH6VZhXVhkGGjF/4cZTt+i8GcM9ozD+30Lmr4mDoZ5Xx34t2o4GJqYWDGcg== + napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -14639,6 +14706,11 @@ node-forge@^0.9.0: 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" + integrity sha512-bYbpIHyRqZ7sVWXxGpz8QIRug5JZc/hzZH4GbdT9HTZi6WmKCZ8GLvP8OZ9TTiIBvwPFKgtGrlWQSXDAvYdsPw== + node-gyp-build@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" @@ -16345,6 +16417,31 @@ pouchdb-utils@^7.1.1: pouchdb-md5 "7.2.1" uuid "3.3.3" +pouchdb@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.1.1.tgz#f5f8dcd1fc440fb76651cb26f6fc5d97a39cd6ce" + integrity sha512-8bXWclixNJZqokvxGHRsG19zehSJiaZaz4dVYlhXhhUctz7gMcNTElHjPBzBdZlKKvt9aFDndmXN1VVE53Co8g== + dependencies: + argsarray "0.0.1" + buffer-from "1.1.0" + clone-buffer "1.0.0" + double-ended-queue "2.1.0-0" + fetch-cookie "0.7.0" + immediate "3.0.6" + inherits "2.0.3" + level "5.0.1" + level-codec "9.0.1" + level-write-stream "1.0.0" + leveldown "5.0.2" + levelup "4.0.2" + ltgt "2.2.1" + node-fetch "2.4.1" + readable-stream "1.0.33" + spark-md5 "3.0.0" + through2 "3.0.1" + uuid "3.2.1" + vuvuzela "1.0.3" + pouchdb@^7.1.1: version "7.2.1" resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.2.1.tgz#619e3d5c2463ddd94a4b1bf40d44408c46e9de79" @@ -19739,7 +19836,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: +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== @@ -20006,7 +20103,7 @@ type@^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== @@ -20028,16 +20125,16 @@ typescript-fsa@^3.0.0-beta-2: resolved "https://registry.yarnpkg.com/typescript-fsa/-/typescript-fsa-3.0.0.tgz#3ad1cb915a67338e013fc21f67c9b3e0e110c912" integrity sha512-xiXAib35i0QHl/+wMobzPibjAH5TJLDj+qGq5jwVLG9qR4FUswZURBw2qihBm0m06tHoyb3FzpnJs1GRhRwVag== -typescript@3.8.3, typescript@^3.2.2: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - 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.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" resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" @@ -20424,6 +20521,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + uuid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" diff --git a/packages/neo-one-build-tools-web/src/runCypress.ts b/packages/neo-one-build-tools-web/src/runCypress.ts index 15d9266f77..a82e694dfc 100644 --- a/packages/neo-one-build-tools-web/src/runCypress.ts +++ b/packages/neo-one-build-tools-web/src/runCypress.ts @@ -90,6 +90,14 @@ const run = async () => { 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('$ rush run-website-prod'); const startProc = execa('rush', ['run-website-prod']); @@ -98,9 +106,17 @@ const run = async () => { 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/packages/neo-one-local-browser-worker/package.json b/packages/neo-one-local-browser-worker/package.json index 6e1d7b1bf0..ce1bc4d9f2 100644 --- a/packages/neo-one-local-browser-worker/package.json +++ b/packages/neo-one-local-browser-worker/package.json @@ -16,7 +16,7 @@ "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.3" }, diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index a47a5fbbd3..66336849f2 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -22,7 +22,7 @@ "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.3", "safe-stable-stringify": "^1.1.0", diff --git a/packages/neo-one-website/src/utils/getReferences.ts b/packages/neo-one-website/src/utils/getReferences.ts index 9edcc8bfc0..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); diff --git a/packages/neo-one-website/static.config.js b/packages/neo-one-website/static.config.js index 73fca908b7..b8ff9ea3af 100644 --- a/packages/neo-one-website/static.config.js +++ b/packages/neo-one-website/static.config.js @@ -125,7 +125,7 @@ export default { path.resolve( PACKAGE_DIR, 'neo-one-build-tools-web', - 'lib', + 'dist', 'webpack', 'plugin', ), From 9ae3dbd4ec3189c6a993d413e52e612a01fd8964 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 7 Jul 2020 11:15:14 -0700 Subject: [PATCH 066/141] fix(cli): update network docs and cli exports (#2086) --- .../fix-helper_2020-07-07-04-21.json | 11 ++++ .../cli/fix-helper_2020-07-07-04-21.json | 11 ++++ .../neo-one-cli-common-node/src/networks.ts | 4 +- packages/neo-one-cli/src/index.ts | 2 +- .../09-configuration-options.md | 60 +++++++++++++++---- 5 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json create mode 100644 common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json diff --git a/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json b/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json new file mode 100644 index 0000000000..11c216b5f9 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Export createUserAccountProviderFunc.", + "type": "minor" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json b/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json new file mode 100644 index 0000000000..674fee618e --- /dev/null +++ b/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Export createUserAccountProviderFunc.", + "type": "minor" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/src/networks.ts b/packages/neo-one-cli-common-node/src/networks.ts index 19a245d1bf..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 }))); 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-website/docs/2-advanced-guides/09-configuration-options.md b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md index 3848faf80a..6456b081ba 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. @@ -65,19 +65,59 @@ export default { ## 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](https://github.com/neo-one-suite/neo-one/blob/ea855d82640550cb00830ea8a4596c8b01108cf7/packages/neo-one-cli-common-node/src/networks.ts#L5) which will prompt you to provide a list of `privateKeys` for use on the network when deploying _or_ you can provide your own UserAccountProvider, such as: +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 -const keystore = new LocalKeyStore(new LocalMemoryStore()); -keystore.addUserAccount('exampleNetwork', 'PRIVATE_KEY'); export default { -//... + // ... networks: { - exampleNetwork: new LocalUserAccountProvider({ - keystore, - provider: new NEOONEProvider([{ 'exampleNetwork', 'exampleRpcURL.io/rpc'}]) - }) + ...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'}]) + }) + } } + // ... } ``` @@ -85,6 +125,6 @@ export default { Note -While hard coding the `LocalUserAccountProvider` is a viable option in testing this also requires storing a `privateKey` as plain text in a file that would traditionally be checked into version control, like Git/GitHub. For this reason we recommend only using a hard coded value for local on-the-fly testing / debugging. +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. ::: From d55870d5b589764c7b11b7fd5cbb5df35d26e3f3 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 9 Jul 2020 11:56:07 -0700 Subject: [PATCH 067/141] feat(types): add types dependency check (#2091) --- .circleci/config.yml | 6 ++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../cli/fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../node/fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ .../fix-type-deps_2020-07-09-05-11.json | 11 +++ common/config/rush/command-line.json | 8 ++ packages/neo-one-build-tools/package.json | 1 + packages/neo-one-build-tools/src/check.ts | 79 ++++++++++++++++ packages/neo-one-build-tools/src/prepare.ts | 2 +- packages/neo-one-build-tools/src/tsUtils.ts | 91 +++++++++++++++++++ packages/neo-one-cli-common-node/package.json | 2 +- packages/neo-one-cli/package.json | 4 +- packages/neo-one-client-common/package.json | 2 +- packages/neo-one-client-core/package.json | 4 +- packages/neo-one-logger/package.json | 2 +- packages/neo-one-node-bin/package.json | 2 +- packages/neo-one-node-blockchain/package.json | 2 +- packages/neo-one-node-consensus/package.json | 2 +- packages/neo-one-node-core/package.json | 2 +- packages/neo-one-node-http-rpc/package.json | 4 +- .../neo-one-node-neo-settings/package.json | 4 +- packages/neo-one-node-protocol/package.json | 6 +- .../neo-one-node-storage-cache/package.json | 2 +- packages/neo-one-node-vm/package.json | 2 +- packages/neo-one-node/package.json | 2 +- packages/neo-one-react-common/package.json | 2 +- .../package.json | 2 +- packages/neo-one-utils-node/package.json | 4 +- 42 files changed, 409 insertions(+), 26 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json create mode 100644 common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json create mode 100644 packages/neo-one-build-tools/src/check.ts create mode 100644 packages/neo-one-build-tools/src/tsUtils.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 7a26b3af53..701838fbab 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -62,6 +62,9 @@ aliases: - run: name: Build 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: @@ -103,6 +106,9 @@ aliases: - run: name: Build 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: diff --git a/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..fc4b898a85 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..a745beb5a2 --- /dev/null +++ b/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..a7d454a880 --- /dev/null +++ b/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/client-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..890f035dac --- /dev/null +++ b/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/client-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..18d8601542 --- /dev/null +++ b/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/logger", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/logger", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..cd7d34557e --- /dev/null +++ b/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-bin", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-bin", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..6ef5fdc925 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..66d6e04189 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-consensus", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..714d7ba845 --- /dev/null +++ b/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-core", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..e1032c43d1 --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-http-rpc", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..e0d15bc616 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-neo-settings", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..2c7977541f --- /dev/null +++ b/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-protocol", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..876d253f15 --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-cache", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..6317328a2a --- /dev/null +++ b/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node-vm", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..864e8e41e1 --- /dev/null +++ b/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..4d322e8284 --- /dev/null +++ b/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/react-common", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/react-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..1d3a0ede51 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json new file mode 100644 index 0000000000..4d30cd86d0 --- /dev/null +++ b/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/utils-node", + "comment": "Add appropriate @types dependencies.", + "type": "patch" + } + ], + "packageName": "@neo-one/utils-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 1b8a79d786..937f2df531 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -280,6 +280,14 @@ "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", diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json index 8aa1a63078..7c2f11c740 100644 --- a/packages/neo-one-build-tools/package.json +++ b/packages/neo-one-build-tools/package.json @@ -45,6 +45,7 @@ "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", 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/prepare.ts b/packages/neo-one-build-tools/src/prepare.ts index d80049ce29..d5dd86e69e 100644 --- a/packages/neo-one-build-tools/src/prepare.ts +++ b/packages/neo-one-build-tools/src/prepare.ts @@ -12,7 +12,7 @@ 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')); -const packages = rushJSON.projects +export const packages = rushJSON.projects .filter((project: RushProject) => project.shouldPublish) .map((project: RushProject) => project.projectFolder.slice('packages/'.length)); 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-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index fd1c2725c3..7d6a860412 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -16,6 +16,7 @@ "@neo-one/cli-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", "@neo-one/client-full-core": "^2.5.0", + "@types/lodash": "^4.14.138", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", @@ -27,7 +28,6 @@ "devDependencies": { "@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", "gulp": "~4.0.2" diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 7f20ad7c59..0d9dd79048 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -35,6 +35,8 @@ "@neo-one/smart-contract-compiler-node": "^2.5.0", "@neo-one/utils": "^2.5.0", "@neo-one/utils-node": "^2.5.0", + "@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", @@ -61,11 +63,9 @@ "@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", "gulp": "~4.0.2", "react": "^16.12.0", "rxjs": "^6.5.3", diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 6064b797b2..59cd4ec7e7 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -15,6 +15,7 @@ "dependencies": { "@neo-one/ec-key": "^0.1.0", "@neo-one/utils": "^2.5.0", + "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "bs58": "^4.0.1", @@ -31,7 +32,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", "@types/bs58": "^4.0.0", "@types/buffer-xor": "^2.0.0", "@types/elliptic": "^6.4.9", diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 9b2d1e21d2..776ac3f694 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -18,6 +18,8 @@ "@neo-one/utils": "^2.5.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", @@ -32,11 +34,9 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@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", "gulp": "~4.0.2" } } diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index f6d6ab7436..bc33b7688e 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -14,13 +14,13 @@ "sideEffects": false, "dependencies": { "@neo-one/logger-config": "^2.5.0", + "@types/pino": "^5.8.9", "pino": "^5.12.6", "pino-pretty": "^3.2.1", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/pino": "^5.8.9", "gulp": "~4.0.2" } } diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index 066751d095..fd6be96d0a 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -19,6 +19,7 @@ "@neo-one/node-neo-settings": "^2.5.0", "@neo-one/utils": "^2.5.0", "@neo-one/utils-node": "^2.5.0", + "@types/yargs": "^13.0.3", "env-paths": "^2.2.0", "execa": "^3.2.0", "import-local": "^3.0.2", @@ -35,7 +36,6 @@ "@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", "fs-extra": "^8.1.0", "gulp": "~4.0.2" diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 2d6f572026..48af4afeea 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -18,6 +18,7 @@ "@neo-one/logger": "^2.5.0", "@neo-one/node-core": "^2.5.0", "@neo-one/utils": "^2.5.0", + "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", @@ -26,7 +27,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", "@types/js-priority-queue": "^0.0.5", "@types/lodash": "^4.14.138", diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index e1cb0a68bb..1e2a12949b 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -19,6 +19,7 @@ "@neo-one/utils": "^2.5.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", @@ -26,7 +27,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index c0eeffa123..805577ec07 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -16,6 +16,7 @@ "@neo-one/client-common": "^2.6.0", "@neo-one/client-full-common": "^2.5.0", "@neo-one/utils": "^2.5.0", + "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", @@ -25,7 +26,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/through": "^0.0.29", diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index 8800f66984..f268ab328b 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -20,6 +20,8 @@ "@neo-one/node-core": "^2.5.0", "@neo-one/node-rpc-handler": "^2.5.0", "@neo-one/utils": "^2.5.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", @@ -32,8 +34,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@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", diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index 6dc8524670..c47139e0dd 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -16,14 +16,14 @@ "@neo-one/client-common": "^2.6.0", "@neo-one/node-core": "^2.5.0", "@neo-one/utils": "^2.5.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": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138", "gulp": "~4.0.2" } } diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index e1945a74c2..7b90eaf3db 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -19,6 +19,9 @@ "@neo-one/node-consensus": "^2.5.0", "@neo-one/node-core": "^2.5.0", "@neo-one/utils": "^2.5.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", @@ -31,9 +34,6 @@ "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", diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 1486ec7a26..145247b051 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -17,12 +17,12 @@ "@neo-one/node-core": "^2.5.0", "@neo-one/node-storage-common": "^2.5.0", "@neo-one/utils": "^2.5.0", + "@types/lru-cache": "^5.1.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/lru-cache": "^5.1.0", "gulp": "~4.0.2" } } diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 89d2f3bdb5..cda32dc32d 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -19,6 +19,7 @@ "@neo-one/utils": "^2.5.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", + "@types/bn.js": "^4.11.5", "bitwise": "^2.0.3", "bn.js": "^5.0.0", "lodash": "^4.17.15", @@ -27,7 +28,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "gulp": "~4.0.2" diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 085971cb14..3ace19fdda 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -24,6 +24,7 @@ "@neo-one/node-storage-levelup": "^2.5.0", "@neo-one/node-vm": "^2.5.0", "@neo-one/utils": "^2.5.0", + "@types/abstract-leveldown": "^5.0.1", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", "leveldown": "^5.1.1", @@ -32,7 +33,6 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@types/abstract-leveldown": "^5.0.1", "@types/fs-extra": "^8.0.0", "@types/leveldown": "^4.0.0", "@types/levelup": "^3.1.1", diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index 83ae334c86..df0275eb90 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -18,6 +18,7 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@neo-one/react-core": "^2.5.0", + "@types/react": "^16.9.15", "popper.js": "^1.15.0", "react": "^16.12.0", "react-dom": "^16.12.0", @@ -30,7 +31,6 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@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" diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index d64e98d1d5..38e3d33618 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -22,6 +22,7 @@ "@neo-one/ts-utils": "^2.5.0", "@neo-one/typescript-concatenator": "^2.5.0", "@neo-one/utils": "^2.5.0", + "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "lodash": "^4.17.15", "safe-stable-stringify": "^1.1.0", @@ -39,7 +40,6 @@ "@neo-one/smart-contract-compiler-node": "^2.5.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", diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 89a9e71073..651279b215 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -14,6 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/utils": "^2.5.0", + "@types/pino": "^5.8.9", + "@types/yargs": "^13.0.3", "execa": "^3.2.0", "npm-package-arg": "^7.0.0", "pino": "^5.12.6", @@ -24,8 +26,6 @@ "@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.3", "gulp": "~4.0.2" } } From de9d00f268b20229184548248ca57a0602d27b39 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 9 Jul 2020 17:39:53 -0700 Subject: [PATCH 068/141] fix(compiler): fix switch statement inside SC invocations (#2093) --- .../fix-switch_2020-07-09-23-27.json | 11 ++++++ .../statement/BreakStatementCompiler.test.ts | 38 +++++++++++++++++++ .../statement/SwitchStatementCompiler.test.ts | 35 +++++++++++++++++ .../statement/SwitchStatementCompiler.ts | 6 ++- 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json b/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json new file mode 100644 index 0000000000..1ad0f45446 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Fix broken switch statement inside SmartContract methods.", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file 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/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); From 0c10d609de7e8a0a7b08b9e3003382a92fe89e04 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 16 Jul 2020 13:44:32 -0700 Subject: [PATCH 069/141] fix(compiler): fix number mismatches in SetStorage, ArrayStorage, MapStorage (#2095) --- .../fix-arraystorage_2020-07-16-02-18.json | 11 + .../builtins/contract/arrayStorage.test.ts | 275 ++++++++++++++++++ .../builtins/contract/mapStorage.test.ts | 112 +++++++ .../builtins/contract/setStorage.test.ts | 77 ++++- .../ArrayLiteralExpressionCompiler.test.ts | 4 + .../ElementAccessExpressionCompiler.test.ts | 1 + .../builtins/contract/arrayStorage/pop.ts | 2 + .../builtins/contract/arrayStorage/push.ts | 2 + .../builtins/contract/mapStorage/get.ts | 8 + .../builtins/contract/mapStorage/set.ts | 8 + .../builtins/contract/setStorage/add.ts | 8 + .../compile/builtins/contract/storage/at.ts | 8 + .../builtins/contract/storage/delete.ts | 8 + .../compile/builtins/contract/storage/has.ts | 8 + .../ElementAccessExpressionCompiler.ts | 2 + .../src/compile/helper/createHelpers.ts | 3 + .../helper/types/number/CoerceToIntHelper.ts | 16 + .../src/compile/helper/types/number/index.ts | 1 + 18 files changed, 553 insertions(+), 1 deletion(-) create mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json create mode 100644 packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/CoerceToIntHelper.ts diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json b/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json new file mode 100644 index 0000000000..abf7f3be89 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Fix number mismatches in ArrayStorage, SetStorage, MapStorage.", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/arrayStorage.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/arrayStorage.test.ts index 9022378ae0..2470745891 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/arrayStorage.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/arrayStorage.test.ts @@ -14,6 +14,7 @@ describe('ArrayStorage', () => { 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/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/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/ElementAccessExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ElementAccessExpressionCompiler.test.ts index 3fe64ac9d4..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); 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/expression/ElementAccessExpressionCompiler.ts b/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts index 98ab7fa8fe..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 @@ -289,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); }; 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 8bc79a24ee..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, @@ -529,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; @@ -979,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), 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'; From f6b86c6fdd94041b91cfd2e137ae61a9cd75d4e4 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 17 Jul 2020 11:50:49 -0700 Subject: [PATCH 070/141] fix(test): hot fix failing blockchain compiler test (#2103) --- .../__tests__/compile/builtins/contract/blockchain.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 73409f297c..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, 4); + if (attributes.length !== 3 && attributes.length !== 4) { + throw 'Failure'; + } const attribute = attributes[0]; From d5dc995bfdd20034ee861175978f54b53f6bb437 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 21 Jul 2020 10:31:22 -0700 Subject: [PATCH 071/141] fix(tests): update NT dep and website build process (#2106) --- .../cli/nt-update_2020-07-20-19-17.json | 11 + common/config/rush/yarn.lock | 816 +++++++----------- packages/neo-one-cli/package.json | 2 +- .../src/__e2e__/cmd/start/neotracker.test.ts | 2 - .../src/__e2e__/cmd/stop/neotracker.test.ts | 2 - .../neo-one-cli/src/cmd/start/neotracker.ts | 6 +- rush.json | 2 +- 7 files changed, 329 insertions(+), 512 deletions(-) create mode 100644 common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json diff --git a/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json b/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json new file mode 100644 index 0000000000..6d0a666611 --- /dev/null +++ b/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Update NEO Tracker dependency.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index ee3bc75b24..9f8debb9a5 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1551,13 +1551,13 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@neo-one/client-common@^2.4.0", "@neo-one/client-common@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-common/-/client-common-2.5.0.tgz#dad877f2fa7d08103b63ddd2f158e87ac21eaa7e" - integrity sha512-5ltq2nnvgVeHgjOmsztJH6aUswnhx7O4AP+dqMGoM8atRLXLOLgkD2wtw4UFfUG+QImV5rFdVkvJSBGNjd4MWg== +"@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: "@neo-one/ec-key" "^0.1.0" - "@neo-one/utils" "^2.4.0" + "@neo-one/utils" "^2.5.0" bignumber.js "^9.0.0" bn.js "^5.0.0" bs58 "^4.0.1" @@ -1572,14 +1572,14 @@ tslib "^1.10.0" wif "^2.0.6" -"@neo-one/client-core@^2.4.0", "@neo-one/client-core@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-core/-/client-core-2.5.0.tgz#ad99bd9553426b6ce6f331061979687a9434b1ee" - integrity sha512-8oz3U+uxEseNx5WryOZuAdVXCKw+cSeftxc/yowhyNC8Rblvbt+/naBk9TLSt/qYLmgB4RivMvcGckikqL7ysQ== +"@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.5.0" - "@neo-one/client-switch" "^2.4.0" - "@neo-one/utils" "^2.4.0" + "@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" @@ -1593,75 +1593,69 @@ tapable "^1.1.3" tslib "^1.10.0" -"@neo-one/client-full-common@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-full-common/-/client-full-common-2.4.0.tgz#b21d973ee1044f11cfe66e1fbb8945e8ee0281e8" - integrity sha512-A3ZaxCN/ws2MogWTUDX9EZEK+Aezzmnxg7pQE5sKFrgWKXAllw5ahlnzYwtg3/d11drD7tEGGN/D5aGNnD/3IQ== +"@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: - "@neo-one/client-common" "^2.4.0" - "@neo-one/utils" "^2.4.0" + "@neo-one/client-common" "^2.6.0" + "@neo-one/utils" "^2.5.0" tslib "^1.10.0" -"@neo-one/client-full-core@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@neo-one/client-full-core/-/client-full-core-2.4.1.tgz#77de399663878389c29a84571c076355966f7d96" - integrity sha512-OJ/1Ymz2nBJH1Z88Qz72QeHRfAcpD1ZZ1xQ2AbgvjJRBb0SIzX3csLOONC4GcWqPXWVGUiuoxJMJceYW0sKLFQ== - dependencies: - "@neo-one/client-common" "^2.5.0" - "@neo-one/client-core" "^2.5.0" - "@neo-one/client-full-common" "^2.4.0" - "@neo-one/client-switch" "^2.4.0" - "@neo-one/utils" "^2.4.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" lodash "^4.17.15" tslib "^1.10.0" -"@neo-one/client-full@^2.3.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-full/-/client-full-2.4.0.tgz#479617cb218502eb4d7787748cb06d1f57dac931" - integrity sha512-9Y4C1ponYXi4YK0VOlFSGdgR8nQCnsocVuC2fR2m9LbhJiMPd9qwbhSaEwjaOl9wG469kXyeMM92rd6vdy2+Qw== +"@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.4.0" - "@neo-one/client-full-core" "^2.4.0" + "@neo-one/client" "^2.6.0" + "@neo-one/client-full-core" "^2.5.0" -"@neo-one/client-switch@^2.3.0", "@neo-one/client-switch@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/client-switch/-/client-switch-2.4.0.tgz#77e9924dc7152652cad63dd58704a51169d6fdb9" - integrity sha512-OZssG/itq6dK7SrjHSqD+3PTvpmayN1XaQrCiflw4khUb3+lLuNJYeJSKq819IyiSzZabV0ihBeksOa41o+NGg== +"@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.4.0" - "@neo-one/node-vm" "^2.4.0" - "@neo-one/utils" "^2.4.0" - "@opencensus/core" "^0.0.19" - "@opencensus/exporter-jaeger" "^0.0.19" - "@opencensus/exporter-prometheus" "^0.0.19" - "@opencensus/nodejs-base" "^0.0.19" - "@opencensus/propagation-tracecontext" "^0.0.19" - "@opencensus/web-core" "^0.0.7" - "@opencensus/web-propagation-tracecontext" "^0.0.7" - "@opencensus/web-types" "^0.0.7" + "@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.3.0", "@neo-one/client@^2.4.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@neo-one/client/-/client-2.5.0.tgz#becf47c9102032bc0eb346d536147980688eded6" - integrity sha512-oBW053jFwVH8AAhCFfihNeov2UbJ/LWHrD02jEWGO79pY9gNSC62R7bOsorr+9uQK3ungb/FEK3GqlTs2/JV5Q== +"@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.5.0" - "@neo-one/client-core" "^2.5.0" - "@neo-one/developer-tools" "^2.4.0" + "@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.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/developer-tools/-/developer-tools-2.4.0.tgz#0b4e86c3ebcb9a32854ba12aec1f9df8cae5fe2a" - integrity sha512-esVo1M2bIvZLpx1NWnSYqucIa2TKYBznbql1WnbgV7Ze1YR9c8yL7AY9Zi5qO7iuKEtv3j4k0Zqe8v9Hz+J/8Q== +"@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.4.0" + "@neo-one/client-core" "^2.6.0" resize-observer-polyfill "^1.5.0" tslib "^1.10.0" @@ -1672,14 +1666,14 @@ dependencies: asn1.js "^1.0.4" -"@neo-one/node-core@^2.3.0", "@neo-one/node-core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-core/-/node-core-2.4.0.tgz#68bf91db2bfd451af51fa704175b62eeef1acd13" - integrity sha512-r366zoeW2xQRLZOwntrPQxgQKLuauz+A5L5jTdDJz5CMo+Q5E/l5kgoA7PeFZhZ79NDZ+zqEmHBz6b/PD3ExTA== +"@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.4.0" - "@neo-one/client-full-common" "^2.4.0" - "@neo-one/utils" "^2.4.0" + "@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" @@ -1687,27 +1681,27 @@ through "^2.3.8" tslib "^1.10.0" -"@neo-one/node-neo-settings@^2.3.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-neo-settings/-/node-neo-settings-2.4.0.tgz#786499c22c508266be4d772d6ba6e494bccaa1ad" - integrity sha512-Wy6bunvOYbOws1oSTKn/0sJDtsKIjbCkclN+1PM/uhVOKnyKfwcC96mdgXmc7xD0ojW8LFzg+v59OJchdkRF8Q== +"@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.4.0" - "@neo-one/node-core" "^2.4.0" - "@neo-one/utils" "^2.4.0" + "@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.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/node-vm/-/node-vm-2.4.0.tgz#d4b4cb66fafa92d0e6c7fbdb68174c66b94e76d7" - integrity sha512-FThmV53n6EQ1971tqiDTqxHTeK7EfpnwE5HbAU16lfIrJ9yx/5TIJUd4aL9XCFaeSU0BvBvNQiRaKdjbq8aTWA== +"@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.4.0" - "@neo-one/client-full-common" "^2.4.0" - "@neo-one/node-core" "^2.4.0" - "@neo-one/utils" "^2.4.0" + "@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" @@ -1716,28 +1710,28 @@ rxjs "^6.5.3" tslib "^1.10.0" -"@neo-one/utils@^2.3.0", "@neo-one/utils@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@neo-one/utils/-/utils-2.4.0.tgz#433554d96d5dc5aafdc403fcfff8b1477b4fe872" - integrity sha512-93abRWilCFOIVljVYoSrUha75tLDFV4BUNksi6QVvpZbtyKRSz3bIplZdU657P+jWrqCbEdELheRE41Y9kSb3A== +"@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.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.3.1.tgz#ae85cb951e9ce4328d9a80541231756fe8877a8f" - integrity sha512-eIO7LB60bUdYY9nGu/xRSMd3gjYcsIeCz8sZA+7APuhmazcZTmgqnAQJvtRV1jLn5rwp2wq2hBMbC+MwL0P3lQ== +"@neotracker/core@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.4.0.tgz#7745677ea391a2fb4cdd11d6fcbc12e70101f32f" + integrity sha512-MKJOQCCCMXdsZXy3y+9evBaQuWgeLcC+HGS6dFlsEECH8yKJvPBOYgjZ93hFwOyDf3atyn60sQ2C2K6qlnhqMg== 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" + "@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" @@ -1765,14 +1759,110 @@ 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" + lodash "^4.17.11" + lru-cache "^4.1.1" + markdown-it "^8.4.2" + objection "^1.4.0" + pg "^7.7.1" + pino "^5.13.2" + prop-types "^15.6.2" + qr-image "^3.2.0" + rc "^1.2.8" + 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" + react-lifecycles-compat "^3.0.4" + react-loadable "^5.5.0" + react-redux "^5.1.1" + react-relay "1.6.2" + react-router "4.4.0-beta.1" + react-router-config "^4.4.0-beta.6" + react-router-dom "4.4.0-beta.1" + react-tippy "^1.2.3" + react-transition-group "^2.5.0" + recompose "^0.30.0" + redux "^4.0.1" + redux-actions "^2.6.4" + relay-compiler "1.6.2" + relay-runtime "1.6.2" + reselect "^4.0.0" + resolve-path "^1.4.0" + rxjs "^6.3.3" + safe-stable-stringify "^1.1.0" + scrypt-js "^2.0.4" + semver "^5.6.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" + styled-components "^4.1.3" + timeago.js "^4.0.0-beta.1" + toobusy-js "^0.5.1" + ua-parser-js "^0.7.19" + uuid "^3.2.1" + ws "^6.1.2" + +"@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" + headroom.js "^0.9.4" + highcharts "^6.2.0" + http-errors "^1.7.0" + is-running "^2.1.0" + iterall "^1.2.2" + ix "^2.5.3" + js-sha3 "^0.8.0" + jss "^9.8.7" + jss-preset-default "^4.3.0" + 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 "^5.2.0" koa-ratelimit-lru "^1.0.2" koa-router "^7.4.0" locale2 "^2.3.1" @@ -1782,7 +1872,6 @@ 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" @@ -1811,11 +1900,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" @@ -1849,70 +1938,6 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@opencensus/core@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.19.tgz#058a2885179bb9f89db7fa93b366a73e51c0c8dc" - integrity sha512-Y5QXa7vggMU0+jveLcworfX9jNnztix7x1NraAV0uGkTp4y46HrFl0DnNcnNxUDvBu/cYeWRwlmhiWlr9+adOQ== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^6.0.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@opencensus/exporter-jaeger@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@opencensus/exporter-jaeger/-/exporter-jaeger-0.0.19.tgz#38abd5e791202b53c127b3e4f1b3d4ee3f1bcbf4" - integrity sha512-wlbPfTU8EhU7dhQMzMh8vJeHQ3GelEoAiMnKx53KtPjTi4Kl6jaLwizwxxiIWBc2P0QEANVWLyBR1pmazoQ/Jg== - dependencies: - "@opencensus/core" "^0.0.19" - jaeger-client "~3.17.0" - -"@opencensus/exporter-prometheus@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@opencensus/exporter-prometheus/-/exporter-prometheus-0.0.19.tgz#b2f9b3d1a7b8019e3bad9f769b93bc76a2914a6b" - integrity sha512-htVWkHPCA7OO00t21MidSNHJ3+blLnXQkxx6P2reARvKg2bRn5d1RAkIK5sBbS6eHrIFkI21VWGGUtcFJlE6Dw== - dependencies: - "@opencensus/core" "^0.0.19" - express "^4.16.3" - prom-client "^11.1.1" - -"@opencensus/nodejs-base@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@opencensus/nodejs-base/-/nodejs-base-0.0.19.tgz#69aad730543cb740b942928aea9d09c7d7971c13" - integrity sha512-pzhvCQv2HPVdhkazPf9U55pC9LU6jTvJjilWHI+3vnHXNOozDTGK/3UwIxvlLcwzi0K2qJ1ubOsHry38sanBtg== - dependencies: - "@opencensus/core" "^0.0.19" - extend "^3.0.2" - require-in-the-middle "^4.0.0" - -"@opencensus/propagation-tracecontext@^0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@opencensus/propagation-tracecontext/-/propagation-tracecontext-0.0.19.tgz#9776fd0528dfc3432cd40321cf1589a9733dcdca" - integrity sha512-6uO5VA744ESiwSswM5+ADR7NuDaopYHAhgasuKu2sLa4WYOkMHHZzAZ9gRcP+JHSQydwcKDgSlmfBx4QijdB+w== - dependencies: - "@opencensus/core" "^0.0.19" - -"@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== - dependencies: - "@opencensus/web-types" "^0.0.7" - "@types/node" "^12.6.9" - -"@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== - dependencies: - "@opencensus/web-core" "^0.0.7" - -"@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== - "@phenomnomnominal/tsquery@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-4.0.0.tgz#610e8ac968137e4a0f98c842c919bb8ad0e85718" @@ -2122,6 +2147,7 @@ "@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" @@ -2183,7 +2209,7 @@ "@angular/core" "^8.2.7" "@babel/core" "^7.6.2" "@babel/register" "^7.5.5" - "@neotracker/core" "1.3.1" + "@neotracker/core" "1.4.1" "@types/bn.js" "^4.11.5" "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" @@ -3743,7 +3769,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.12.tgz#bf5d348c4d37c026029ad81e874946fa6ad100ba" integrity sha512-iefeBfpmhoYaZfj+gJM5z9H9eiTwhuzhPsJgH/flx4HP2SBI2FNDra1D3vKljqPLGDr9Cazvh9gP9Xszc30ncA== -"@types/node@^12.12.3", "@types/node@^12.6.9", "@types/node@^12.7.7": +"@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== @@ -4407,7 +4433,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@3.0.0, abort-controller@^3.0.0: +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== @@ -4573,11 +4599,6 @@ ansi-align@^3.0.0: dependencies: string-width "^3.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@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" @@ -5082,14 +5103,6 @@ async-limiter@~1.0.0: 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" @@ -5856,11 +5869,6 @@ 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" @@ -5916,7 +5924,7 @@ bluebird@3.7.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== -bluebird@^3.5.1, bluebird@^3.5.5: +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== @@ -6261,16 +6269,6 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -bufrw@^1.3.0: - 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" @@ -6550,15 +6548,6 @@ ccount@^1.0.0, ccount@^1.0.3: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== -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" - chalk@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" @@ -7008,6 +6997,11 @@ 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" @@ -7035,7 +7029,7 @@ 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.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== @@ -7045,7 +7039,7 @@ commander@^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.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== @@ -7252,14 +7246,6 @@ 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" - 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" @@ -7899,13 +7885,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" @@ -7920,6 +7899,13 @@ debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: dependencies: ms "^2.1.1" +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" + decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -8081,14 +8067,6 @@ deferred-leveldown@~5.0.0: abstract-leveldown "~6.0.0" inherits "^2.0.3" -deferred-leveldown@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" - integrity sha512-PvDY+BT2ONu2XVRgxHb77hYelLtMYxKSGuWuJJdVRXh9ntqx9GYTFJno/SKAz5xcd+yjQwyQeIZrUPjPvA52mg== - dependencies: - abstract-leveldown "~6.0.0" - inherits "^2.0.3" - deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -8338,11 +8316,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" @@ -8593,13 +8566,6 @@ 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== - dependencies: - shimmer "^1.2.0" - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -8768,21 +8734,6 @@ 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: - 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" - -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - 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" @@ -8895,6 +8846,11 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" +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" @@ -9126,11 +9082,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" @@ -9448,14 +9399,6 @@ fetch-cookie@0.7.0: es6-denodeify "^0.1.1" tough-cookie "^2.3.1" -fetch-cookie@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.7.3.tgz#b8d023f421dd2b2f4a0eca9cd7318a967ed4eed8" - integrity sha512-rZPkLnI8x5V+zYAiz8QonAHsTb4BY+iFowFBI1RFn0zrO343AVp9X7/yUj/9wL6Ef/8fLls8b/vGtzUvmyAUGA== - dependencies: - es6-denodeify "^0.1.1" - tough-cookie "^2.3.3" - figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -9805,11 +9748,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" @@ -10049,6 +9987,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" @@ -10820,23 +10763,19 @@ helmet-csp@2.10.0: content-security-policy-builder "2.1.0" dasherize "2.0.0" -helmet@^3.15.1: - version "3.22.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.22.0.tgz#3a6f11d931799145f0aff15dbc563cff9e13131f" - integrity sha512-Xrqicn2nm1ZIUxP3YGuTBmbDL04neKsIT583Sjh0FkiwKDXYCMUqGqC88w3NUvVXtA75JyR2Jn6jw6ZEMOD+ZA== +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.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" @@ -10846,16 +10785,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" @@ -11205,11 +11134,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" @@ -11365,7 +11289,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== @@ -11427,6 +11351,11 @@ interpret@^1.1.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" @@ -12157,17 +12086,6 @@ ix@^2.5.3: "@types/node" "^11.11.6" tslib "^1.9.3" -jaeger-client@~3.17.0: - version "3.17.2" - resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.17.2.tgz#92cf26752c5c66f3e66adf595cdde2f548cc0804" - integrity sha512-19YloSidmKbrXHgecLWod8eXo7rm2ieUnsfg0ripTFGRCW5v2OWE96Gte4/tOQG/8N+T39VoLU2nMBdjbdMUJg== - 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" @@ -12979,27 +12897,27 @@ kleur@^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= +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: - 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" + 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" + 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.3.9" @@ -13059,12 +12977,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" @@ -13248,7 +13166,7 @@ level-js@^5.0.0: inherits "^2.0.3" ltgt "^2.1.2" -level-packager@^5.0.0, level-packager@^5.1.0: +level-packager@^5.0.0: 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== @@ -13280,16 +13198,6 @@ level@5.0.1: leveldown "^5.0.0" opencollective-postinstall "^2.0.0" -level@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.0.tgz#d216fb9b9c3940bcec15c5880d8da775ca086c5c" - integrity sha512-3oAi7gXLLNr7pHj8c4vbI6lHkXf35m8qb7zWMrNTrOax6CXBVggQAwL1xnC/1CszyYrW3BsLXsY5TMgTxtKfFA== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - opencollective-postinstall "^2.0.0" - leveldown@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.0.2.tgz#c8edc2308c8abf893ffc81e66ab6536111cae92c" @@ -13300,16 +13208,7 @@ leveldown@5.0.2: napi-macros "~1.8.1" node-gyp-build "~3.8.0" -leveldown@5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.4.1.tgz#83a8fdd9bb52b1ed69be2ef59822b6cdfcdb51ec" - integrity sha512-3lMPc7eU3yj5g+qF1qlALInzIYnkySIosR1AsUKFjL9D8fYbTLuENBAeDRZXIG4qeWOAyqRItOoLu2v2avWiMA== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -leveldown@^5.0.0, leveldown@^5.1.1, leveldown@^5.4.0: +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== @@ -13328,16 +13227,6 @@ levelup@4.0.2: level-iterator-stream "~4.0.0" xtend "~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== - dependencies: - deferred-leveldown "~5.1.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - xtend "~4.0.0" - levelup@^4.1.0, levelup@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" @@ -13381,21 +13270,7 @@ 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= - 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" - -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== @@ -13811,11 +13686,6 @@ lodash@4.17.15, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17. 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: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -13859,11 +13729,6 @@ loglevel@^1.6.6: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== -long@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" - integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= - 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" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -14446,11 +14311,6 @@ modernizr@^3.7.1: requirejs "^2.3.6" yargs "^15.3.1" -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= - moment@2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -14573,6 +14433,11 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nan@~2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== + nanoid@^2.0.3: version "2.1.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" @@ -14775,6 +14640,22 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" +node-pre-gyp@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== + 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-pre-gyp@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" @@ -15242,11 +15123,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" @@ -15808,10 +15684,10 @@ 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" @@ -16442,32 +16318,6 @@ pouchdb@7.1.1: uuid "3.2.1" vuvuzela "1.0.3" -pouchdb@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.2.1.tgz#619e3d5c2463ddd94a4b1bf40d44408c46e9de79" - integrity sha512-AoDPdr6tFqj3xs7oiD2oioYj5MMu87c3UemRHZ/p++BwU+ZsKn5jpnL09OvWTLvMvaICGAOufiaUzmM1/KKoKQ== - dependencies: - abort-controller "3.0.0" - argsarray "0.0.1" - buffer-from "1.1.0" - clone-buffer "1.0.0" - double-ended-queue "2.1.0-0" - fetch-cookie "0.7.3" - immediate "3.0.6" - inherits "2.0.4" - level "6.0.0" - level-codec "9.0.1" - level-write-stream "1.0.0" - leveldown "5.4.1" - levelup "4.1.0" - ltgt "2.2.1" - node-fetch "2.4.1" - readable-stream "1.0.33" - spark-md5 "3.0.0" - through2 "3.0.1" - uuid "3.3.3" - vuvuzela "1.0.3" - 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" @@ -16582,11 +16432,6 @@ 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" @@ -16597,13 +16442,6 @@ progress@^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" @@ -17807,15 +17645,6 @@ require-directory@^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" @@ -18295,11 +18124,6 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" -serialize-javascript@^1.5.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" @@ -18439,11 +18263,6 @@ 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" @@ -18840,13 +18659,23 @@ 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.2.0" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.2.0.tgz#49026d665e9fc4f922e56fb9711ba5b4c85c4901" - integrity sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg== +sqlite3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.0.4.tgz#1f75e3ededad6e26f7dd819929460ce44a49dfcd" + integrity sha512-CO8vZMyUXBPC+E3iXOCc7Tz2pAdq5BWfLcQmOokCOZW5S5sZ/paijiPOCdvzpdP83RroWHYa5xYlVqCxSqpnQg== + dependencies: + nan "~2.10.0" + node-pre-gyp "^0.10.3" + request "^2.87.0" + +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" + request "^2.87.0" sshpk@^1.7.0: version "1.16.1" @@ -18999,11 +18828,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" @@ -19421,17 +19245,10 @@ 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@6.0.1: version "6.0.1" @@ -19569,15 +19386,6 @@ thread-loader@^2.1.3: loader-utils "^1.1.0" neo-async "^2.6.0" -thriftrw@^3.5.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.12.0.tgz#30857847755e7f036b2e0a79d11c9f55075539d9" - integrity sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw== - dependencies: - bufrw "^1.3.0" - 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" @@ -19629,12 +19437,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" @@ -20541,13 +20347,20 @@ uuid@^7.0.0: 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" +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" @@ -21309,11 +21122,6 @@ 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.3.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 0d9dd79048..f31da4cd49 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -59,7 +59,7 @@ "@neo-one/build-tools": "^1.0.0", "@neo-one/smart-contract": "^2.5.0", "@neo-one/smart-contract-test": "^2.5.0", - "@neotracker/core": "1.3.1", + "@neotracker/core": "1.4.1", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", 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 79ae4c1fc9..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 @@ -17,8 +17,6 @@ describe('start network', () => { }); execAsync('start neotracker'); - // this allows us to run the e2e tests in parallel, successfully - await new Promise((resolve) => setTimeout(resolve, 5000)); await one.until(async () => { const live = await isRunning(config.neotracker.port); 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 f0a4e2648d..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 @@ -17,8 +17,6 @@ describe('start network', () => { }); execAsync('start neotracker'); - // this allows us to run the e2e tests in parallel, successfully - await new Promise((resolve) => setTimeout(resolve, 5000)); await one.until(async () => { const live = await isRunning(config.neotracker.port); diff --git a/packages/neo-one-cli/src/cmd/start/neotracker.ts b/packages/neo-one-cli/src/cmd/start/neotracker.ts index 919a62cc66..b98a8b55bc 100644 --- a/packages/neo-one-cli/src/cmd/start/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/start/neotracker.ts @@ -30,9 +30,10 @@ 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'); @@ -43,13 +44,14 @@ export const handler = (argv: Yarguments>) => { ); } const proc = execa( - nodePath.resolve(neotrackerBinPath, '../', '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/rush.json b/rush.json index 04052edfba..d634656b62 100644 --- a/rush.json +++ b/rush.json @@ -16,7 +16,7 @@ "eventHooks": { "preRushInstall": [], - "postRushInstall": ["node ./common/scripts/neo-one-prune.js"], + "postRushInstall": [], "preRushBuild": [], "postRushBuild": [] }, From d3a492d4293bd2bb621e6d2729e344cba663b4e3 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 21 Jul 2020 18:07:12 -0700 Subject: [PATCH 072/141] fix(husky): remove checkout hook (#2111) --- .huskyrc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.huskyrc.js b/.huskyrc.js index 30cf4d6908..db9fb912dd 100644 --- a/.huskyrc.js +++ b/.huskyrc.js @@ -9,7 +9,6 @@ const hooks = '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', - 'post-checkout': 'rush install', }; module.exports = { From f34bfe4c261ccdfe75c3ea6ef64f6b0282bcc904 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 21 Jul 2020 19:32:06 -0700 Subject: [PATCH 073/141] fix(cypress): fix web build process and cypress (#2109) --- .github/workflows/website.yaml | 4 ++-- common/config/rush/command-line.json | 8 ++++++++ cypress/plugins/index.js | 18 +++++++++++++----- cypress/tsconfig.json | 6 ++---- .../src/webpack/plugin/node.tsx | 2 ++ 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 0689408b0e..e2cc9e1c7d 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -27,12 +27,12 @@ jobs: 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: rush test-cypress --express - - name: Rush Unlink Root - run: rush unlink-root - name: Store Cypress Screenshots if: failure() continue-on-error: true diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 937f2df531..559f51ad30 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -17,6 +17,14 @@ "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", 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/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx b/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx index 3c7377e7a0..2c27ceaa68 100644 --- a/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx +++ b/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx @@ -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; From 769a619526415dcc45a0132b5197a50ebdb10958 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 22 Jul 2020 12:26:04 -0700 Subject: [PATCH 074/141] fix(node): fix 'receive' invocations when relaying transactions to live network (#2096) --- .../node-debug_2020-07-14-23-23.json | 11 + .../node-debug_2020-07-14-23-23.json | 11 + .../node-debug_2020-07-14-23-23.json | 11 + .../node-debug_2020-07-14-23-23.json | 11 + .../node-debug_2020-07-14-23-23.json | 11 + .../src/provider/DataProviderBase.ts | 14 ++ .../src/provider/JSONRPCClient.ts | 18 ++ .../src/provider/NEODataProvider.ts | 9 + .../src/provider/NEOONEDataProvider.ts | 13 ++ .../src/provider/ProviderBase.ts | 9 + .../src/user/LocalUserAccountProvider.ts | 190 ++++++++++++++++-- packages/neo-one-node-core/src/Node.ts | 5 + packages/neo-one-node-protocol/src/Node.ts | 116 ++++++++++- packages/neo-one-node-protocol/src/errors.ts | 10 + .../src/createHandler.ts | 44 ++++ 15 files changed, 468 insertions(+), 15 deletions(-) create mode 100644 common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json create mode 100644 common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json create mode 100644 common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json create mode 100644 common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json diff --git a/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json new file mode 100644 index 0000000000..749ab6011c --- /dev/null +++ b/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "fixup utxo invocation transactions", + "type": "patch" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json new file mode 100644 index 0000000000..0c1068a2e2 --- /dev/null +++ b/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "fixup utxo invocation transactions", + "type": "patch" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json new file mode 100644 index 0000000000..339fbe3e58 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-protocol", + "comment": "fixup utxo invocation transactions", + "type": "patch" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json new file mode 100644 index 0000000000..1b74f08836 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-rpc-handler", + "comment": "fixup utxo invocation transactions", + "type": "patch" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json new file mode 100644 index 0000000000..09ac2daa76 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "fixup utxo invocation transactions", + "type": "patch" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-client-core/src/provider/DataProviderBase.ts b/packages/neo-one-client-core/src/provider/DataProviderBase.ts index 93f0a8fcfd..a167732a11 100644 --- a/packages/neo-one-client-core/src/provider/DataProviderBase.ts +++ b/packages/neo-one-client-core/src/provider/DataProviderBase.ts @@ -126,6 +126,14 @@ export abstract class DataProviderBase implements DataProvider { return this.executeRelayTransaction(transaction, networkFee); } + public async relayStrippedTransaction( + verificationTransaction: InvocationTransactionModel, + relayTransaction: InvocationTransactionModel, + networkFee?: BigNumber, + ): Promise { + return this.executeRelayStrippedTransaction(verificationTransaction, relayTransaction, networkFee); + } + public async getTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { return this.executeGetTransactionReceipt(hash, options); } @@ -253,6 +261,12 @@ export abstract class DataProviderBase implements DataProvider { networkFee?: BigNumber, ): Promise; + protected abstract async executeRelayStrippedTransaction( + verificationTransaction: InvocationTransactionModel, + relayTransaction: InvocationTransactionModel, + networkFee?: BigNumber, + ): Promise; + protected abstract async executeGetTransactionReceipt( hash: Hash256String, options?: GetOptions, diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index c95ae4a258..33cfda0f85 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -151,6 +151,24 @@ export class JSONRPCClient { ); } + public async relayStrippedTransaction(verificationTransaction: BufferString, relayTransaction: BufferString) { + return this.withInstance(async (provider) => + provider + .request({ + method: 'relaystrippedtransaction', + params: [verificationTransaction, relayTransaction], + }) + .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 sendRawTransaction(value: BufferString): Promise { return this.withInstance(async (provider) => provider diff --git a/packages/neo-one-client-core/src/provider/NEODataProvider.ts b/packages/neo-one-client-core/src/provider/NEODataProvider.ts index afa00a4072..d93b995acb 100644 --- a/packages/neo-one-client-core/src/provider/NEODataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEODataProvider.ts @@ -190,6 +190,15 @@ export class NEODataProvider extends DataProviderBase { throw new NeoNotImplementedError('Transaction types besides Claim & Invocation are'); } + + protected async executeRelayStrippedTransaction( + verificationTransaction: InvocationTransactionModel, + _relayTransaction: InvocationTransactionModel, + networkFee?: BigNumber, + ): Promise { + return this.executeRelayTransaction(verificationTransaction, networkFee); + } + protected async executeGetUnspentOutputs(address: AddressString): Promise { const unspents = await this.mutableClient.getUnspents(address); diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 48eaf7c606..f8a821bc5f 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -175,6 +175,19 @@ export class NEOONEDataProvider extends DataProviderBase implements DeveloperPro return convertRelayTransactionResult(result); } + protected async executeRelayStrippedTransaction( + verificationTransaction: InvocationTransactionModel, + relayTransaction: InvocationTransactionModel, + _networkFee?: BigNumber, + ): Promise { + const result = await this.mutableClient.relayStrippedTransaction( + verificationTransaction.serializeWire().toString('hex'), + relayTransaction.serializeWire().toString('hex'), + ); + + return convertRelayTransactionResult(result); + } + protected async executeGetTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { const result = await this.mutableClient.getTransactionReceipt(hash, options); diff --git a/packages/neo-one-client-core/src/provider/ProviderBase.ts b/packages/neo-one-client-core/src/provider/ProviderBase.ts index 20b10e36cd..3475a9b15f 100644 --- a/packages/neo-one-client-core/src/provider/ProviderBase.ts +++ b/packages/neo-one-client-core/src/provider/ProviderBase.ts @@ -71,6 +71,15 @@ export abstract class ProviderBase imple return this.getProvider(network).relayTransaction(transaction, networkFee); } + public async relayStrippedTransaction( + network: NetworkType, + verificationTransaction: InvocationTransactionModel, + relayTransaction: InvocationTransactionModel, + networkFee?: BigNumber, + ): Promise { + return this.getProvider(network).relayStrippedTransaction(verificationTransaction, relayTransaction, networkFee); + } + public async getTransactionReceipt( network: NetworkType, hash: Hash256String, diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index ea950371ca..61a89ac99e 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -91,6 +91,12 @@ export interface Provider extends ProviderBase { transaction: TransactionBaseModel, networkFee?: BigNumber | undefined, ) => Promise; + readonly relayStrippedTransaction: ( + network: NetworkType, + verifcationTransaction: InvocationTransactionModel, + relayTransaction: InvocationTransactionModel, + networkFee?: BigNumber | undefined, + ) => Promise; } /** @@ -296,6 +302,153 @@ export class LocalUserAccountProvider({ + inputs, + transaction: transactionUnsignedIn, + from, + onConfirm, + networkFee, + sourceMaps, + }: { + readonly inputs: readonly InputOutput[]; + readonly transaction: InvocationTransactionModel; + readonly from: UserAccountID; + readonly onConfirm: (options: { + readonly transaction: Transaction; + readonly receipt: TransactionReceipt; + }) => Promise; + readonly networkFee?: BigNumber; + readonly sourceMaps?: SourceMaps; + }): Promise> { + // when this problem invocation comes in we need to strip the bad verification script and then sign that transaction + return this.capture( + async () => { + let transactionUnsigned = transactionUnsignedIn; + if (this.keystore.byteLimit !== undefined) { + transactionUnsigned = (await this.consolidate({ + inputs, + from, + transactionUnsignedIn, + byteLimit: this.keystore.byteLimit, + })) as InvocationTransactionModel; + } + 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 relayTransactionUnsigned = transactionUnsigned.clone({ + attributes: [], + scripts: [], + }); + + const [verificationSignature, relaySignature, inputOutputs] = await Promise.all([ + this.keystore.sign({ + account: from, + message: transactionUnsigned.serializeUnsigned().toString('hex'), + }), + this.keystore.sign({ + account: from, + message: relayTransactionUnsigned.serializeUnsigned().toString('hex'), + }), + Promise.all( + transactionUnsigned.inputs.map(async (input) => + this.provider.getOutput(from.network, { hash: common.uInt256ToString(input.hash), index: input.index }), + ), + ), + ]); + + const userAccount = this.getUserAccount(from); + + const verificationWitness = crypto.createWitnessForSignature( + Buffer.from(verificationSignature, 'hex'), + common.stringToECPoint(userAccount.publicKey), + WitnessModel, + ); + + const relayWitness = crypto.createWitnessForSignature( + Buffer.from(relaySignature, 'hex'), + common.stringToECPoint(userAccount.publicKey), + WitnessModel, + ); + + const signedVerificationTransaction = this.addWitness({ + transaction: transactionUnsigned, + inputOutputs, + address, + witness: verificationWitness, + }) as InvocationTransactionModel; + + const signedRelayTransaction = relayTransactionUnsigned.clone({ + scripts: [relayWitness], + }); + + const result = await this.provider.relayStrippedTransaction( + from.network, + signedVerificationTransaction, + signedRelayTransaction, + networkFee, + ); + + 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); + } + + transactionUnsigned.inputs.forEach((transfer) => + this.mutableUsedOutputs.add(`${common.uInt256ToString(transfer.hash)}:${transfer.index}`), + ); + + const { transaction } = result; + + return { + transaction: transaction as InvocationTransaction, + // tslint:disable-next-line no-unnecessary-type-annotation + confirmed: async (optionsIn: GetOptions = {}): Promise => { + const options = { + ...optionsIn, + timeoutMS: optionsIn.timeoutMS === undefined ? 120000 : optionsIn.timeoutMS, + }; + const receipt = await this.provider.getTransactionReceipt(from.network, transaction.hash, options); + + return onConfirm({ transaction, receipt }); + }, + }; + }, + { + name: 'neo_send_stripped_transaction', + }, + ); + } + protected async executeInvokeClaim({ contract, inputs, @@ -450,22 +603,31 @@ export class LocalUserAccountProvider({ - from, - inputs, - transaction: invokeTransaction, - onConfirm: async ({ transaction, receipt }) => { - const data = await this.provider.getInvocationData(from.network, transaction.hash); + const inputsFrom = inputs.filter((input) => input.address === from.address); - return onConfirm({ transaction, receipt, data }); - }, - sourceMaps, - }); + try { + return scripts.length === 1 && scripts[0].verification.length === 0 && inputsFrom.length > 0 + ? this.sendStrippedTransaction({ + from, + inputs, + transaction: invokeTransaction, + onConfirm: async ({ transaction, receipt }) => { + const data = await this.provider.getInvocationData(from.network, transaction.hash); + + return onConfirm({ transaction, receipt, data }); + }, + }) + : this.sendTransaction({ + from, + inputs, + transaction: invokeTransaction, + onConfirm: async ({ transaction, receipt }) => { + const data = await this.provider.getInvocationData(from.network, transaction.hash); - // tslint:disable-next-line:no-var-before-return - return result; + return onConfirm({ transaction, receipt, data }); + }, + sourceMaps, + }); } catch (error) { const message = await processActionsAndMessage({ actions: [], diff --git a/packages/neo-one-node-core/src/Node.ts b/packages/neo-one-node-core/src/Node.ts index 67b4790ac1..b6bb231e04 100644 --- a/packages/neo-one-node-core/src/Node.ts +++ b/packages/neo-one-node-core/src/Node.ts @@ -24,6 +24,11 @@ export interface Node { transaction: Transaction, options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, ) => Promise; + readonly relayStrippedTransaction: ( + verificationTransaction: Transaction, + relayTransaction: Transaction, + options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, + ) => Promise; readonly relayConsensusPayload: (payload: ConsensusPayload) => void; readonly relayBlock: (block: Block) => Promise; readonly connectedPeers: readonly Endpoint[]; diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index b835d32bf3..3e585bdb86 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -11,11 +11,13 @@ import { Endpoint, getEndpointConfig, Header, + Input, MerkleTree, NegotiateResult, Network, NetworkEventMessage, Node as INode, + Output, Peer, RegisterTransaction, RelayTransactionResult, @@ -33,7 +35,12 @@ import { Address6 } from 'ip-address'; import _ from 'lodash'; import LRUCache from 'lru-cache'; import { Command } from './Command'; -import { AlreadyConnectedError, NegotiationError } from './errors'; +import { + AlreadyConnectedError, + InvalidRelayStrippedTransactionType, + NegotiationError, + RelayStrippedTransactionMismatch, +} from './errors'; import { Message, MessageTransform, MessageValue } from './Message'; import { AddrPayload, @@ -394,6 +401,113 @@ export class Node implements INode { return result; } + public async relayStrippedTransaction( + verificationTransaction: Transaction, + relayTransaction: Transaction, + { + throwVerifyError = false, + forceAdd = false, + }: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean } = { + throwVerifyError: false, + forceAdd: false, + }, + ): Promise { + const result = {}; + + // this should only be called by our special invocation transaction (this helps with TS); + if ( + verificationTransaction.type !== TransactionType.Invocation || + relayTransaction.type !== TransactionType.Invocation + ) { + throw new InvalidRelayStrippedTransactionType(verificationTransaction.type); + } + + // verify they are still the same transaction besides witnesses/attributes + if ( + verificationTransaction.inputs.length !== relayTransaction.inputs.length || + verificationTransaction.outputs.length !== relayTransaction.outputs.length || + !(_.zip(verificationTransaction.inputs, relayTransaction.inputs) as ReadonlyArray< + [Input, Input] + >).every(([verify, relay]) => verify.equals(relay)) || + !(_.zip(verificationTransaction.outputs, relayTransaction.outputs) as ReadonlyArray< + [Output, Output] + >).every(([verify, relay]) => verify.equals(relay)) || + !verificationTransaction.script.equals(relayTransaction.script) + ) { + throw new RelayStrippedTransactionMismatch(); + } + + if (!this.mutableKnownTransactionHashes.has(relayTransaction.hash)) { + this.tempKnownTransactionHashes.add(relayTransaction.hashHex); + + try { + const memPool = Object.values(this.mutableMemPool); + if (memPool.length > MEM_POOL_SIZE / 2 && !forceAdd) { + this.mutableKnownTransactionHashes.add(relayTransaction.hash); + + return result; + } + // tslint:disable-next-line prefer-immediate-return + let logLabels: {} = { [Labels.NEO_TRANSACTION_HASH]: relayTransaction.hashHex }; + let finalResult: RelayTransactionResult; + try { + let foundTransaction; + try { + foundTransaction = await this.blockchain.transaction.tryGet({ + hash: relayTransaction.hash, + }); + } finally { + logLabels = { + [Labels.NEO_TRANSACTION_FOUND]: foundTransaction !== undefined, + ...logLabels, + }; + } + let verifyResult: VerifyTransactionResult | undefined; + if (foundTransaction === undefined) { + // if we haven't verified it yet then use the verificationTransaction to do that + verifyResult = await this.blockchain.verifyTransaction({ + transaction: verificationTransaction, + memPool: Object.values(this.mutableMemPool), + }); + const verified = verifyResult.verifications.every(({ failureMessage }) => failureMessage === undefined); + + if (verified) { + this.mutableMemPool[relayTransaction.hashHex] = relayTransaction; + if (this.mutableConsensus !== undefined) { + this.mutableConsensus.onTransactionReceived(relayTransaction); + } + this.relayTransactionInternal(relayTransaction); + await this.trimMemPool(); + } + } + + this.mutableKnownTransactionHashes.add(relayTransaction.hash); + + finalResult = { verifyResult }; + logger.debug({ name: 'neo_relay_transaction', ...logLabels }); + } catch (err) { + logger.error({ name: 'neo_relay_transaction', err, ...logLabels }); + throw err; + } + + return finalResult; + } catch (error) { + if ( + error.code === undefined || + typeof error.code !== 'string' || + !error.code.includes('VERIFY') || + throwVerifyError + ) { + throw error; + } + } finally { + this.tempKnownTransactionHashes.delete(relayTransaction.hashHex); + } + } + + return result; + } + public async relayBlock(block: Block): Promise { await this.persistBlock(block); } diff --git a/packages/neo-one-node-protocol/src/errors.ts b/packages/neo-one-node-protocol/src/errors.ts index 148269852a..d046a735d8 100644 --- a/packages/neo-one-node-protocol/src/errors.ts +++ b/packages/neo-one-node-protocol/src/errors.ts @@ -13,3 +13,13 @@ export const AlreadyConnectedError = makeErrorWithCode( 'ALREADY_CONNECTED', (reason: string) => `Negotiation failed: ${reason}`, ); + +export const InvalidRelayStrippedTransactionType = makeErrorWithCode( + 'INVALID_TRANSACTION_TYPE_FOR_STRIPPED_RELAY', + (type: number) => `tried to use relayStrippedTransaction on a ${type} transaction`, +); + +export const RelayStrippedTransactionMismatch = makeErrorWithCode( + 'RELAY_STRIPPED_TRANSACTION_MISMATCH', + () => "verificationTransaction and relayTransaction weren't identical transactions", +); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index e4ceb79add..6dcb195b60 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -73,6 +73,7 @@ const RPC_METHODS: { readonly [key: string]: string } = { validateaddress: 'validateaddress', getpeers: 'getpeers', relaytransaction: 'relaytransaction', + relaystrippedtransaction: 'relaystrippedtransaction', getoutput: 'getoutput', getclaimamount: 'getclaimamount', getallstorage: 'getallstorage', @@ -462,6 +463,49 @@ export const createHandler = ({ throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); } }, + [RPC_METHODS.relaystrippedtransaction]: async (args): Promise => { + const verificationTransaction = deserializeTransactionWire({ + context: blockchain.deserializeWireContext, + buffer: JSONHelper.readBuffer(args[0]), + }); + + const relayTransaction = deserializeTransactionWire({ + context: blockchain.deserializeWireContext, + buffer: JSONHelper.readBuffer(args[1]), + }); + + try { + const [transactionJSON, result] = await Promise.all([ + relayTransaction.serializeJSON(blockchain.serializeJSONContext), + node.relayStrippedTransaction(verificationTransaction, relayTransaction, { + 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, + })), + }, + }; + + return { + ...resultJSON, + transaction: transactionJSON, + }; + } 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]; From 37bccadda6175bf6dbbe4e46b1e140e2f195e111 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 22 Jul 2020 14:39:50 -0700 Subject: [PATCH 075/141] feat(cli): add support for outputting AVM and debug files for smart contracts (#2071) --- .../cli/debugger_2020-06-23-00-45.json | 11 + .../debugger_2020-06-23-00-45.json | 11 + .../rush/browser-approved-packages.json | 4 + common/config/rush/yarn.lock | 26 +- packages/neo-one-cli/package.json | 1 + .../cmd/__snapshots__/compile.test.ts.snap | 8438 ----------------- .../src/__e2e__/cmd/compile.test.ts | 198 +- packages/neo-one-cli/src/cmd/compile.ts | 22 +- .../src/compile/compileContract.ts | 1 + .../neo-one-cli/src/compile/createTasks.ts | 6 +- packages/neo-one-cli/src/compile/interop.ts | 102 + .../neo-one-cli/src/compile/writeContract.ts | 162 +- .../src/compile/compile.ts | 3 +- .../src/compile/getSmartContractInfo.ts | 18 +- .../src/compile/sb/BaseScriptBuilder.ts | 2 + .../src/compile/types.ts | 2 + .../src/compileContract.ts | 5 +- .../src/contract/DebugInfoProcessor.ts | 261 + .../src/contract/getDebugInfo.ts | 6 + .../src/contract/index.ts | 2 + 20 files changed, 790 insertions(+), 8491 deletions(-) create mode 100644 common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json delete mode 100644 packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap create mode 100644 packages/neo-one-cli/src/compile/interop.ts create mode 100644 packages/neo-one-smart-contract-compiler/src/contract/DebugInfoProcessor.ts create mode 100644 packages/neo-one-smart-contract-compiler/src/contract/getDebugInfo.ts diff --git a/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json b/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json new file mode 100644 index 0000000000..b4611e66c6 --- /dev/null +++ b/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "add debug support", + "type": "minor" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json b/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json new file mode 100644 index 0000000000..d331c29270 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "add debug support", + "type": "minor" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 60f8ad3d72..34508186bd 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -750,6 +750,10 @@ "name": "json", "allowedCategories": [ "tools" ] }, + { + "name": "jszip", + "allowedCategories": [ "production" ] + }, { "name": "koa", "allowedCategories": [ "production", "web" ] diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 9f8debb9a5..325b71496a 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2213,6 +2213,7 @@ "@types/bn.js" "^4.11.5" "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" + "@types/jszip" "^3.4.1" "@types/listr" "^0.14.2" "@types/lodash" "^4.14.138" "@types/prompts" "^2.0.1" @@ -2225,6 +2226,7 @@ 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" @@ -3535,6 +3537,13 @@ csstype "^2.0.0" indefinite-observable "^1.0.1" +"@types/jszip@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@types/jszip/-/jszip-3.4.1.tgz#e7a4059486e494c949ef750933d009684227846f" + integrity sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A== + dependencies: + jszip "*" + "@types/keygrip@*": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" @@ -12810,6 +12819,16 @@ jss@^9.7.0, jss@^9.8.7: symbol-observable "^1.1.0" warning "^3.0.0" +jszip@*, 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" @@ -15397,7 +15416,7 @@ pako@~0.2.0: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= -pako@~1.0.5: +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== @@ -18191,6 +18210,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" diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index f31da4cd49..3968c6dc80 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -43,6 +43,7 @@ "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", diff --git a/packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap b/packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap deleted file mode 100644 index 37bf37fd53..0000000000 --- a/packages/neo-one-cli/src/__e2e__/cmd/__snapshots__/compile.test.ts.snap +++ /dev/null @@ -1,8438 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`compile - exchange compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Coin", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Coin", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d0003456e6f5452c1c6046e616d657c6a52c354c37b7bc403454e4f5452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - exchange compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Coin ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "CoinICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c601006676569c642d0075750100c50673796d626f6ce101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c601006676579c642f0075750100c508646563696d616c73e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c601006676599c64320075750100c50b746f74616c537570706c79e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c60100667601179c642d0075750100c50673796d626f6ce101021bcc607af9232110e25bc9c4aade7db8e29109ec5452c1c60100667601189c642f0075750100c508646563696d616c73e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec5652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100021bcc607af9232110e25bc9c4aade7db8e29109ec5151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101021bcc607af9232110e25bc9c4aade7db8e29109ec768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6498187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662341876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666206187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662cd17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629217760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624017760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373141bcc607af9232110e25bc9c4aade7db8e29109ec5952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b003760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625a0376066465706c6f7987644c0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621903516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc4070080c6a47e8d035652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373141bcc607af9232110e25bc9c4aade7db8e29109ec5952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658ec36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36521c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657dc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b3be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516565be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652cbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f1bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bfbd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - exchange compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "deposited", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "assetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "withdrawn", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "assetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "offerCreated", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "makerAddress", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "offerAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "offerAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "wantAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "wantAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - ], - }, - Object { - "name": "offerCancelled", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - ], - }, - Object { - "name": "burnt", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "filler", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "takerFeeAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "takerFeeAmount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "offerFilled", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "filler", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amountToFill", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "offerAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "offerAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "wantAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "wantAmount", - "optional": false, - "type": "Integer", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amountToTake", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "assetID", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "getOffer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": true, - "properties": Object { - "maker": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - "makerFeeAssetID": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - "makerFeeAvailableAmount": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "nonce": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - "offerAmount": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "offerAssetID": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - "wantAmount": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "wantAssetID": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - "type": "Object", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "depositNEP5", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "assetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "withdrawNEP5", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "assetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "makeOffer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "maker", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "offerAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "offerAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "wantAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "wantAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "makerFeeAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "makerFeeAvailableAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "nonce", - "optional": false, - "type": "String", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "fillOffer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "filler", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amountToTake", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "takerFeeAssetID", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "takerFeeAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "burnTakerFee", - "optional": false, - "type": "Boolean", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "makerFeeAmount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "burnMakerFee", - "optional": false, - "type": "Boolean", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "cancelOffer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "maker", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "offerHash", - "optional": false, - "type": "Hash256", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "constant": true, - "name": "feeAddress", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "name": "setFeeAddress", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "feeAddress", - "optional": false, - "type": "Address", - }, - ], - "returnType": Object { - "type": "Void", - }, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "", - "codeVersion": "1.0", - "description": "", - "dynamicInvoke": true, - "email": "", - "name": "Exchange", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62fd7c7601009c644300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2096465706f73697465647c8bc16804050792165151c1c601006676519c644300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c20977697468647261776e7c8bc16804050792165151c1c601006676529c646400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c75c20c6f66666572437265617465647c8bc16804050792165151c1c601006676539c643400750100c57c760100c351c37b7d7cc87c75c20e6f6666657243616e63656c6c65647c8bc16804050792165151c1c601006676549c643f00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2056275726e747c8bc16804050792165151c1c601006676559c647700750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c75c20b6f6666657246696c6c65647c8bc16804050792165151c1c601006676569c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676579c649a0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50100007c056572726f7253c168040507921604bb01000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90100007c056572726f7253c168040507921604ef01000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc02000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c643a0d75516a52c30100c37cc36a0100c3c7c8760100c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044d0300007c056572726f7253c1680405079216045303000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c352c301007bc475756a0100c352c30100c351629b006239007601009c642200756a0100c352c301007bc475756a0100c352c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075041e04000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575760100c3519c640800750062490bc77d78056d616b65727d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3517bc46a0100c351c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3517bc46a0100c351c351c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3655ef86c7501009c633800040105000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780c6f66666572417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3527bc46a0100c351c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3527bc46a0100c351c352c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f5f66c7501009c63380004e805000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780b6f66666572416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3537bc46a0100c351c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658df56c7501009c63380004cf06000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780b77616e74417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3547bc46a0100c351c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3547bc46a0100c351c354c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36525f46c7501009c63380004b607000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780a77616e74416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3557bc46a0100c351c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3557bc46a0100c351c355c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365bef26c7501009c633800049d08000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d780f6d616b6572466565417373657449447d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3567bc46a0100c351c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3567bc46a0100c351c356c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36552f16c7501009c633800048409000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d78176d616b6572466565417661696c61626c65416d6f756e747d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3577bc46a0100c351c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3577bc46a0100c351c357c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365deef6c7501009c633800046b0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c7d78056e6f6e63657d787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64920075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c643a00756a0100c351c3587bc46a0100c351c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c351c3587bc46a0100c351c358c301006662130076529c640800757562080075756262ff777d78cb649600c376c052876487000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3657cee6c7501009c63380004520b000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620700770100c3620a007575755151c1c651c3c47c776a0100c376c08cca010066765a9c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c354c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676599c64af0a75516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f20b00007c056572726f7253c168040507921604f80b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304260c00007c056572726f7253c1680405079216042c0c000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36468001a43616c6c657220776173206e6f74207468652073656e646572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a60c00007c056572726f7253c168040507921604ac0c000005747261636552c16804050792165162a3086a0100c351c352c3515652c1c651c37c51c37c9f5352c1c651c3646c001e416d6f756e74206d7573742062652067726561746572207468616e2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e80c00007c056572726f7253c168040507921604ee0c000005747261636552c168040507921651621d086a0100c351c352c36a0100c351c351c3680487c3d2645952c1c66a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c86a0100c353c352c36a0100c354c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c354c301007bc46a0100c354c30100c3766a0100c353c353c36a0100c353c351c36a0100c353c30100c353c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3527bc46a0100c354c352c3516290016235007601009c641e00756a0100c354c3527bc46a0100c354c352c3010054626e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b7e96c7501009c631a0004650e000005747261636552c16804050792165162e900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3654ae96c7501009c631a0004af0e000005747261636552c168040507921651627c0051c3915352c1c651c3646e00204661696c656420746f207472616e73666572204e45502d3520746f6b656e73215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304db0e00007c056572726f7253c168040507921604e10e000005747261636552c16804050792165162050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504010f000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63f20476549c63ec04750100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075046010000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e30276549c63dd02756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516243026235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462210262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628a016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462680162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162d4006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462b00062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659be36c7501009c631a00048d12000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504ae12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765c9c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c354c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c642d0d75516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304411300007c056572726f7253c1680405079216044713000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304751300007c056572726f7253c1680405079216047b13000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36430011f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c351621d0b6235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fb0a62130076529c640800757562080075756275ff6a0100c352c352c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1400007c056572726f7253c1680405079216047414000005747261636552c16804050792165162930a6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a015000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63b80876549c63b208756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c36431011f4e6f7420656e6f7567682042616c616e636520746f207769746864726177206a0100c351c352c351c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c35162e3076235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462c10762130076529c640800757562080075756275ff6a0100c352c355c37e01217e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048f1600007c056572726f7253c1680405079216049516000005747261636552c1680405079216516258076a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36479002b43616c6c6572206973206e6f7420617574686f72697a656420746f2077697468647261772066756e6473215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ee1600007c056572726f7253c168040507921604f416000005747261636552c168040507921651628a066a0100c351c352c36a0100c351c351c36a0100c351c30100c3680487c3d2645952c1c654c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c86a0100c353c352c36a0100c354c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c354c301007bc46a0100c354c30100c3766a0100c353c353c36a0100c353c351c36a0100c353c30100c353c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3527bc46a0100c354c352c3516290016235007601009c641e00756a0100c354c3527bc46a0100c354c352c3010054626e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659dda6c7501009c631a00046b18000005747261636552c16804050792165162e900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530da6c7501009c631a0004b518000005747261636552c168040507921651627c0051c3915352c1c651c3646e00204661696c656420746f207472616e73666572204e45502d3520746f6b656e73215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e11800007c056572726f7253c168040507921604e718000005747261636552c16804050792165162050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075040719000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c635f0376549c635903750100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504661a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63500176549c634a017551c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162d3006237007601009c642000756a0100c352c3577bc475756a0100c352c357c301005462af0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36514d66c7501009c631a0004631b000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504841b000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765d9c646d1575516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304d51b00007c056572726f7253c168040507921604db1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304091c00007c056572726f7253c1680405079216040f1c000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc47653c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044c1c00007c056572726f7253c168040507921604521c000005747261636552c168040507921651665952c1c66a0100c351c3537bc47654c35652c1c66a0100c351c3547bc47655c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3048f1c00007c056572726f7253c168040507921604951c000005747261636552c168040507921651665952c1c66a0100c351c3557bc47656c35652c1c66a0100c351c3567bc47657c35452c1c66a0100c351c3577bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648f004143616c6c6572206973206e6f7420617574686f72697a656420746f206d616b6520616e206f66666572206f6e20626568616c66206f6620746865206d616b6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3041e1d00007c056572726f7253c168040507921604241d000005747261636552c1680405079216516248126a0100c351c357c36a0100c351c356c36a0100c351c355c36a0100c351c354c36a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c358c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc47654c36a0100c353c3547bc47655c36a0100c353c3557bc47656c36a0100c353c3567bc47657c36a0100c353c3577bc4756a0100c3c7c86a0100c353c357c351c35952c1c66a0100c353c356c36a0100c353c354c36a0100c353c352c353c15852c1c651c3012c6a0100c354c3517bc4007c680424ef3dbf7c78680442298fe064a703787c786804ab5b018e7b6804813425bc7b7b7c7b01009c64980175760100c3519c6411007509756e646566696e6564627d01760100c3529c640c0075046e756c6c626b01760100c3539c64190051c3640b0004747275656209000566616c7365624c01760100c3569c64bf0051c37601009c64090075013062ad006a0100c354c3527bc4006a0100c354c3537bc46a0100c354c352c30100a06484006a0100c354c352c3765a966a0100c354c3527bc45a970130936a0100c354c353c37e6a0100c354c3537bc462c7ff7576519c641d00756a0100c354c3547bc46a0100c354c354c351546269026235007601009c641e00756a0100c354c3547bc46a0100c354c354c301005462470262130076529c640800757562080075756274ff6a0100c354c353c3628700760100c3549c64080051c3627900760100c3599c64080051c3626b00760100c3559c780100c3589c9b780100c3579c9b6452007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fa1e00007c056572726f7253c168040507921604001f000005747261636552c1680405079216515462aa016205007500629f016a0100c354c351c37e7c760100c3519c6411007509756e646566696e6564627d01760100c3529c640c0075046e756c6c626b01760100c3539c64190051c3640b0004747275656209000566616c7365624c01760100c3569c64bf0051c37601009c64090075013062ad006a0100c354c3557bc4006a0100c354c3567bc46a0100c354c355c30100a06484006a0100c354c355c3765a966a0100c354c3557bc45a970130936a0100c354c356c37e6a0100c354c3567bc462c7ff7576519c641d00756a0100c354c3577bc46a0100c354c357c3515462cb006235007601009c641e00756a0100c354c3577bc46a0100c354c357c301005462a90062130076529c640800757562080075756274ff6a0100c354c356c3628700760100c3549c64080051c3627900760100c3599c64080051c3626b00760100c3559c780100c3589c9b780100c3579c9b6452007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304ff1f00007c056572726f7253c1680405079216040520000005747261636552c16804050792165154620c0062050075007e62abfc7576519c641e00756a0100c354c3587bc475756a0100c354c358c351620f016237007601009c642000756a0100c354c3587bc475756a0100c354c358c301005462eb0062130076529c640800757562080075756255fc775452c1c651c35952c1c66a0100c353c355c36a0100c353c353c36a0100c353c351c36a0100c353c30100c356c15852c1c651c3007c68044eaada587c78680442298fe0646a00787c7c6804ab5b018e7c7c51c37e62e8ff7576519c641e00756a0100c354c3597bc475756a0100c354c359c3516261006237007601009c642000756a0100c354c3597bc475756a0100c354c359c3010054623d0062130076529c640800757562080075756292ff775952c1c66a0100c354c301007bc46a0100c354c30100c351c3aa5952c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075040521000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63880c76549c63820c756a0100c352c301007bc46a0100c352c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f821000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010b76549c63fb0a755151c1c67c760100c3519c640900757551620600757500915352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304472200007c056572726f7253c1680405079216044d22000005747261636552c16804050792165162790a6a0100c351c352c301005652c1c67c51c37c51c37c9f915352c1c67651c3631f00756a0100c351c354c301005652c1c67c51c37c51c37c9f915352c1c651c364760028496e76616c696420616d6f756e742e20416c6c20616d6f756e7473206d757374206265203e2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a92200007c056572726f7253c168040507921604af22000005747261636552c16804050792165162c4096a0100c351c351c36a0100c351c353c37c51c37c51c3875352c1c651c36476002843616e6e6f74206d616b6520616e206f6666657220666f72207468652073616d65206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ed2200007c056572726f7253c168040507921604f322000005747261636552c1680405079216516231096a0100c351c356c301005652c1c651c37c51c37c9f5352c1c651c36471002346656520617661696c61626c6520616d6f756e742063616e6e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3042f2300007c056572726f7253c1680405079216043523000005747261636552c16804050792165162a5080100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075048024000005747261636552c168040507921651620700757501006a0100c376c08cca76519c639d0676549c6397067551c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3517bc475756a0100c352c351c3516220066237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462fc0562130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c355c36a0100c351c353c37c51c37c51c387915352c1c67651c3641e00756a0100c351c356c301005652c1c67c51c37c51c37c9f5352c1c651c36407036a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c355c36a0100c351c30100c352c15852c1c66a0100c351c355c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504b826000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40076549c63de007551c36a0100c351c356c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63830276549c637d02750100c50100066f666665727353c1c6011152c1c66a0100c352c30100c3c7c7c753c15752c1c676056d616b65726a0100c351c30100c37b51c30100c37b7b51c1c4760c6f66666572417373657449446a0100c351c351c37b51c30100c37b7b51c1c4760b6f66666572416d6f756e746a0100c351c352c37b51c30100c37b7b51c1c4760b77616e74417373657449446a0100c351c353c37b51c30100c37b7b51c1c4760a77616e74416d6f756e746a0100c351c354c37b51c30100c37b7b51c1c4760f6d616b6572466565417373657449446a0100c351c355c37b51c30100c37b7b51c1c476176d616b6572466565417661696c61626c65416d6f756e746a0100c351c356c37b51c30100c37b7b51c1c476056e6f6e63656a0100c351c357c37b51c30100c37b7b51c1c47c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162ec006237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462c80062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c30100c36a0100c351c354c36a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c356c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365a4c06c7501009c631a00041929000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075043a29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765e9c64d65175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3048b2900007c056572726f7253c1680405079216049129000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304bf2900007c056572726f7253c168040507921604c529000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc47653c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304022a00007c056572726f7253c168040507921604082a000005747261636552c168040507921651665952c1c66a0100c351c3537bc47654c35652c1c66a0100c351c3547bc47655c3768201009c640a005352c1c66207005352c1c66a0100c351c3557bc47656c35652c1c66a0100c351c3567bc47657c3768201009c640a005352c1c66207005352c1c66a0100c351c3577bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648d003f43616c6c6572206973206e6f7420617574686f72697a656420746f2066696c6c206f66666572206f6e20626568616c66206f66207468652066696c6c6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c32a00007c056572726f7253c168040507921604c92a000005747261636552c16804050792165162e64e6a0100c351c354c301005652c1c651c37c51c37c9f5352c1c651c3646d001f74616b6572466565416d6f756e74206d757374206e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304052b00007c056572726f7253c1680405079216040b2b000005747261636552c168040507921651625e4e6a0100c351c356c301005652c1c651c37c51c37c9f5352c1c651c3646d001f6d616b6572466565416d6f756e74206d757374206e6f74206265203c2030215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304472b00007c056572726f7253c1680405079216044d2b000005747261636552c16804050792165162d64d6a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504252c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63614c76549c635b4c756a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304822c00007c056572726f7253c168040507921604882c000005747261636552c16804050792165162c74b6a0100c351c30100c36a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc351624b4b6235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462294b62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36569b96c7501009c631a00044b2d000005747261636552c16804050792165162a44a620700770100c3620a007575755151c1c67c51c37c51c3875352c1c651c36475002746696c6c65722063616e6e6f74206265207468652073616d6520617320746865206d616b6572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304872d00007c056572726f7253c1680405079216048d2d000005747261636552c16804050792165162114a6a0100c351c352c3515652c1c651c37c51c37c9f5352c1c651c36485003746696c6c6572206d7573742074616b652061206e6f6e7a65726f20616d6f756e74206f6620746865206f666665726564206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c92d00007c056572726f7253c168040507921604cf2d000005747261636552c1680405079216516272496a0100c351c352c36a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162f1486235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462cf4862130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3650fb76c7501009c631a0004922e000005747261636552c168040507921651624a48620700770100c3620a007575755151c1c67c51c37c51c37c9f5352c1c651c3647b002d46696c6c6572207265717565737473206d6f7265207468616e20617661696c61626c6520696e206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304cf2e00007c056572726f7253c168040507921604d52e000005747261636552c16804050792165162b0476a0100c351c352c351c36a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc351622e476235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc3010054620c4762130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3654cb56c7501009c631a00049a2f000005747261636552c168040507921651628746620700770100c3620a007575755151c1c651c3955652c1c651c36a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35e7bc46a0100c352c35ec35162f4456235007601009c641e00756a0100c352c35e7bc46a0100c352c35ec301005462d24562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36512b46c7501009c631a00046b30000005747261636552c168040507921651624d45620700770100c3620a007575755151c1c651c3965652c1c66a0100c352c3517bc46a0100c352c351c3515652c1c651c37c51c37c9f5352c1c651c3647e00304d7573742066696c6c2061206e6f6e7a65726f20616d6f756e74206f6620746865206f666665726564206173736574215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304c23000007c056572726f7253c168040507921604c830000005747261636552c1680405079216516294446a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35f7bc46a0100c352c35fc351621b446235007601009c641e00756a0100c352c35f7bc46a0100c352c35fc301005462f94362130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36539b26c7501009c631a00048431000005747261636552c168040507921651627443620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504b532000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63904176549c638a41756a0100c352c3527bc46a0100c352c352c36a0100c352c351c351c37c51c37c9f5352c1c651c3646f00214e6f7420656e6f7567682062616c616e636520746f2066696c6c206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3040e3300007c056572726f7253c1680405079216041433000005747261636552c16804050792165162f4406a0100c351c353c36a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301107bc46a0100c352c30110c3516270406237007601009c642000756a0100c352c301107bc46a0100c352c30110c3010054624c4062130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658cae6c7501009c631a0004d733000005747261636552c16804050792165162c73f620700770100c3620a007575755151c1c67c51c37c51c387915352c1c66a0100c352c3537bc46a0100c351c353c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042335000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63c63d76549c63c03d756a0100c352c3547bc46a0100c352c353c37651c3641e00756a0100c351c354c301005652c1c67c51c37c51c37c9f5352c1c67651c3642100756a0100c352c354c36a0100c351c354c37c51c37c51c37c9f915352c1c651c3647a002c46696c6c657220646f6573206e6f74206861766520656e6f7567682062616c616e636520666f7220666565215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304a73500007c056572726f7253c168040507921604ad35000005747261636552c16804050792165162ed3c6a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301117bc46a0100c352c30111c35162663c6237007601009c642000756a0100c352c301117bc46a0100c352c30111c301005462423c62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36582aa6c7501009c631a00046936000005747261636552c16804050792165162bd3b620700770100c3620a007575755151c1c66a0100c351c356c351c37c51c37c9f5352c1c651c36479002b4d616b657220646f6573206e6f74206861766520656e6f7567682062616c616e636520666f7220666565215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ac3600007c056572726f7253c168040507921604b236000005747261636552c168040507921651621e3b6a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301127bc46a0100c352c30112c351629f3a6237007601009c642000756a0100c352c301127bc46a0100c352c30112c3010054627b3a62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365bba86c7501009c631a00046e37000005747261636552c16804050792165162f639620700770100c3620a007575755151c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301137bc46a0100c352c30113c351626a396237007601009c642000756a0100c352c301137bc46a0100c352c30113c301005462463962130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36586a76c7501009c631a00043638000005747261636552c16804050792165162c138620700770100c3620a007575755151c1c67c51c37c51c387915352c1c66a0100c352c3557bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301147bc46a0100c352c30114c351620a386237007601009c642000756a0100c352c301147bc46a0100c352c30114c301005462e63762130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36526a66c7501009c631a00041d39000005747261636552c168040507921651626137620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301157bc46a0100c352c30115c35162c6366237007601009c642000756a0100c352c301157bc46a0100c352c30115c301005462a23662130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e2a46c7501009c631a0004f239000005747261636552c168040507921651621d36620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504233b000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63393476549c6333347551c36a0100c352c351c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301167bc475756a0100c352c30116c35162ba336239007601009c642200756a0100c352c301167bc475756a0100c352c30116c301005462943362130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c355c351c3640e006a0100c352c351c3621c006a0100c352c351c351c36a0100c351c356c351c3945652c1c66a0100c352c3567bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301177bc46a0100c352c30117c351628f326237007601009c642000756a0100c352c301177bc46a0100c352c30117c3010054626b3262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365aba06c7501009c631a0004c93c000005747261636552c16804050792165162e631620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301187bc46a0100c352c30118c3516260316237007601009c642000756a0100c352c301187bc46a0100c352c30118c3010054623c3162130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3657c9f6c7501009c631a0004913d000005747261636552c16804050792165162b730620700770100c3620a007575755151c1c652c15852c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301197bc46a0100c352c30119c3516225306237007601009c642000756a0100c352c301197bc46a0100c352c30119c301005462013062130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365419e6c7501009c631a00045f3e000005747261636552c168040507921651627c2f620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3011a7bc46a0100c352c3011ac35162f62e6237007601009c642000756a0100c352c3011a7bc46a0100c352c3011ac301005462d22e62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365129d6c7501009c631a0004273f000005747261636552c168040507921651624d2e620700770100c3620a007575755151c1c652c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075045140000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63722c76549c636c2c756a0100c352c356c37c7d780100c3549c7c0100c3549c9b64950151c37601009c64090075013062b8006a0100c352c3011b7bc4006a0100c352c3011c7bc46a0100c352c3011bc30100a0648b006a0100c352c3011bc3765a966a0100c352c3011b7bc45a970130936a0100c352c3011cc37e6a0100c352c3011c7bc462c2ff7576519c641e00756a0100c352c3011d7bc46a0100c352c3011dc35162cd2b6237007601009c642000756a0100c352c3011d7bc46a0100c352c3011dc301005462a92b62130076529c64080075756208007575626cff6a0100c352c3011cc37c51c37601009c64090075013062b8006a0100c352c3011e7bc4006a0100c352c3011f7bc46a0100c352c3011ec30100a0648b006a0100c352c3011ec3765a966a0100c352c3011e7bc45a970130936a0100c352c3011fc37e6a0100c352c3011f7bc462c2ff7576519c641e00756a0100c352c301207bc46a0100c352c30120c35162082b6237007601009c642000756a0100c352c301207bc46a0100c352c30120c301005462e42a62130076529c64080075756208007575626cff6a0100c352c3011fc37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301217bc475756a0100c352c30121c351624d2a6239007601009c642200756a0100c352c301217bc475756a0100c352c30121c301005462272a62130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c352c353c351c3640e006a0100c351c352c3621c006a0100c351c352c351c36a0100c351c354c351c3945652c1c66a0100c352c3577bc40100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301227bc46a0100c352c30122c3516221296237007601009c642000756a0100c352c301227bc46a0100c352c30122c301005462fd2862130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3653d976c7501009c631a00042743000005747261636552c168040507921651627828620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301237bc46a0100c352c30123c35162dc276237007601009c642000756a0100c352c301237bc46a0100c352c30123c301005462b82762130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f8956c7501009c631a0004fc43000005747261636552c168040507921651623327620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042d45000005747261636552c168040507921651620700757501006a0100c376c08cca76519c634f2576549c634925756a0100c352c357c37c7d780100c3549c7c0100c3549c9b64950151c37601009c64090075013062b8006a0100c352c301247bc4006a0100c352c301257bc46a0100c352c30124c30100a0648b006a0100c352c30124c3765a966a0100c352c301247bc45a970130936a0100c352c30125c37e6a0100c352c301257bc462c2ff7576519c641e00756a0100c352c301267bc46a0100c352c30126c35162aa246237007601009c642000756a0100c352c301267bc46a0100c352c30126c301005462862462130076529c64080075756208007575626cff6a0100c352c30125c37c51c37601009c64090075013062b8006a0100c352c301277bc4006a0100c352c301287bc46a0100c352c30127c30100a0648b006a0100c352c30127c3765a966a0100c352c301277bc45a970130936a0100c352c30128c37e6a0100c352c301287bc462c2ff7576519c641e00756a0100c352c301297bc46a0100c352c30129c35162e5236237007601009c642000756a0100c352c301297bc46a0100c352c30129c301005462c12362130076529c64080075756208007575626cff6a0100c352c30128c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c3012a7bc475756a0100c352c3012ac351622a236239007601009c642200756a0100c352c3012a7bc475756a0100c352c3012ac301005462042362130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c354c301005652c1c67c51c37c51c37c9f5352c1c651c364b0086a0100c352c353c351c36407036a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c353c36a0100c351c30100c352c15852c1c66a0100c351c353c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075048048000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40076549c63de007551c36a0100c351c354c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63a11f76549c639b1f756a0100c351c355c351c36476006a0100c351c354c36a0100c351c353c36a0100c351c30100c353c16a0100c30100c354c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e38d6c7501009c631a00049849000005747261636552c168040507921651621e1f75621f056a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c353c3116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504d249000005747261636552c168040507921651629a04757552c15852c1c66a0100c351c353c3116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504024a000005747261636552c168040507921651623e04757552c16a0100c3c7c8760100c36a0100c354c301007bc47651c36a0100c354c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c354c351c36a0100c354c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c355c3517bc475756a0100c355c351c35162de006237007601009c642000756a0100c355c3517bc475756a0100c355c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c355c301007bc46a0100c355c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c355c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504224b000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63720276549c636c02756a0100c351c354c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c35162d2016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462b00162130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516219016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f70062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c353c3567bc475756a0100c353c356c3516263006237007601009c642000756a0100c353c3567bc475756a0100c353c356c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63051a76549c63ff19756a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012b7bc46a0100c352c3012bc3516277196237007601009c642000756a0100c352c3012b7bc46a0100c352c3012bc301005462531962130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36593876c7501009c631a0004cd4d000005747261636552c16804050792165162ce18620700770100c3620a007575755151c1c66a0100c352c3587bc46a0100c351c356c301005652c1c67c51c37c51c37c9f5352c1c651c364ea0b6a0100c3c7c86a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c353c301007bc46a0100c353c30100c35162480b6237007601009c642000756a0100c353c301007bc46a0100c353c30100c301005462240b62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36524866c7501009c631a0004bd4e000005747261636552c168040507921651629f0a620700770100c3620a007575755151c1c651c36a0100c351c356c351c3945652c1c66a0100c352c3587bc46a0100c351c357c351c364ef026a0100c3c7c86a0100c351c356c36a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c354c301007bc46a0100c354c30100c351624a026237007601009c642000756a0100c354c301007bc46a0100c354c30100c301005462260262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b6846c7501009c631a0004b34f000005747261636552c16804050792165162a101620700770100c3620a007575755151c1c66a0100c352c30100c3056d616b6572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3517bc46a0100c354c351c351621d016235007601009c641e00756a0100c354c3517bc46a0100c354c351c301005462fb0062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658b836c7501009c631a00047b50000005747261636552c168040507921651627600620700770100c3620a007575755151c1c653c16a0100c30100c354c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36524836c7501009c63230004c150000005747261636552c1620900620983624a2c680405079216516206007501006a0100c376c08cca76519c63850776549c637f07756279076a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c354c301007bc46a0100c354c30100c35162c9066237007601009c642000756a0100c354c301007bc46a0100c354c30100c301005462a50662130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b3fe6c7501009c631a0004a351000005747261636552c168040507921651622006620700770100c3620a007575755151c1c6116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504d051000005747261636552c16804050792165162c305757552c15852c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c354c3517bc46a0100c354c351c351623e056235007601009c641e00756a0100c354c3517bc46a0100c354c351c3010054621c0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3652afd6c7501009c631a00049452000005747261636552c168040507921651629704620700770100c3620a007575755151c1c6116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504c152000005747261636552c168040507921651623a04757552c16a0100c3c7c8760100c36a0100c355c301007bc47651c36a0100c355c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c355c351c36a0100c355c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c356c3517bc475756a0100c356c351c35162de006237007601009c642000756a0100c356c3517bc475756a0100c356c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c356c301007bc46a0100c356c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c356c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e153000005747261636552c168040507921651620700757501006a0100c376c08cca76519c636e0276549c636802756a0100c351c356c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c354c3527bc4006a0100c354c3537bc46a0100c354c352c30100a06483006a0100c354c352c3765a966a0100c354c3527bc45a970130936a0100c354c353c37e6a0100c354c3537bc462c7ff7576519c641c00756a0100c354c3547bc46a0100c354c354c35162d2016235007601009c641e00756a0100c354c3547bc46a0100c354c354c301005462b00162130076529c640800757562080075756275ff6a0100c354c353c37c51c37601009c64090075013062ac006a0100c354c3557bc4006a0100c354c3567bc46a0100c354c355c30100a06483006a0100c354c355c3765a966a0100c354c3557bc45a970130936a0100c354c356c37e6a0100c354c3567bc462c7ff7576519c641c00756a0100c354c3577bc46a0100c354c357c3516219016235007601009c641e00756a0100c354c3577bc46a0100c354c357c301005462f70062130076529c640800757562080075756275ff6a0100c354c356c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c354c3587bc475756a0100c354c358c3516263006237007601009c642000756a0100c354c3587bc475756a0100c354c358c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c630c0076549c6306007501006a0100c376c08cca76519c63b50c76549c63af0c756a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012c7bc46a0100c352c3012cc35162330c6237007601009c642000756a0100c352c3012c7bc46a0100c352c3012cc3010054620f0c62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36546f76c7501009c631a00049d56000005747261636552c168040507921651628a0b620700770100c3620a007575755151c1c651c36a0100c351c352c351c3945652c1c66a0100c352c3597bc46a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012d7bc46a0100c352c3012dc35162e50a6237007601009c642000756a0100c352c3012d7bc46a0100c352c3012dc301005462c10a62130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f8f56c7501009c631a00047d57000005747261636552c168040507921651623c0a620700770100c3620a007575755151c1c651c36a0100c352c351c351c3945652c1c66a0100c352c35a7bc46a0100c352c359c301005652c1c67c51c37c51c39c5352c1c651c364da006a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c351c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c353c301007bc475756a0100c353c30100c351624e006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c301005462280062130076529c64080075756208007575628aff776a52c357c378ca6a52c358c37c51c401006a0100c376c08cca76519c63260976549c6320097562ce036a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c351c351c3c7c7c753c15752c1c6766a0100c353c3517bc46a0100c352c30100c3766a0100c353c301007bc451c30100c3cc68044eaada580100c578680442298fe0647d00787c7c6804ab5b018e7c78095f5f70726f746f5f5f87916409007d7cc86204007762d5ff7576519c641e00756a0100c353c3527bc475756a0100c353c352c3516214036237007601009c642000756a0100c353c3527bc475756a0100c353c352c301005462f00262130076529c64080075756208007575627fff7768044eaada5876680442298fe0649b01766804ab5b018e6a0100c353c351c37c6a0100c353c30100c378787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3537bc46a0100c353c353c351624e026235007601009c641e00756a0100c353c3537bc46a0100c353c353c3010054622c0262130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c6f26c7501009c631a0004a759000005747261636552c16804050792165162a701620700770100c3620a007575755151c1c67b51c30100c37b7b51c1c462b5fe7576519c641d00756a0100c353c3547bc4756a0100c353c354c351626a016236007601009c641f00756a0100c353c3547bc4756a0100c353c354c301005462470162130076529c640800757562080075756261fe75760b6f66666572416d6f756e746a0100c352c359c37b51c30100c37b7b51c1c4760a77616e74416d6f756e746a0100c352c35ac37b51c30100c37b7b51c1c476176d616b6572466565417661696c61626c65416d6f756e746a0100c352c358c37b51c30100c37b7b51c1c47c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c353c3557bc475756a0100c353c355c3516263006237007601009c642000756a0100c353c3557bc475756a0100c353c355c3010054623f0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63580576549c635205756a0100c351c352c36a0100c352c30100c30a77616e74416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012e7bc46a0100c352c3012ec35162cf046237007601009c642000756a0100c352c3012e7bc46a0100c352c3012ec301005462ab0462130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365e2ef6c7501009c631a0004935b000005747261636552c168040507921651622604620700770100c3620a007575755151c1c66a0100c352c30100c30b77616e7441737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c3012f7bc46a0100c352c3012fc351629a036237007601009c642000756a0100c352c3012f7bc46a0100c352c3012fc301005462760362130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365adee6c7501009c631a00045b5c000005747261636552c16804050792165162f102620700770100c3620a007575755151c1c66a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301307bc46a0100c352c30130c3516265026237007601009c642000756a0100c352c301307bc46a0100c352c30130c301005462410262130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36578ed6c7501009c631a0004235d000005747261636552c16804050792165162bc01620700770100c3620a007575755151c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a647b0075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641e00756a0100c352c301317bc46a0100c352c30131c351622f016237007601009c642000756a0100c352c301317bc46a0100c352c30131c3010054620b0162130076529c640800757562080075756279ff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36542ec6c7501009c631a0004eb5d000005747261636552c168040507921651628600620700770100c3620a007575755151c1c66a0100c352c351c36a0100c351c351c36a0100c351c30100c358c16a0100c30100c355c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c2eb6c7501009c631a0004465e000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504675e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066765f9c64371575516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b85e00007c056572726f7253c168040507921604be5e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201209c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304ec5e00007c056572726f7253c168040507921604f25e000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3647700294f6e6c7920746865206f66666572206d616b6572206d61792063616e63656c20616e206f66666572215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3045d5f00007c056572726f7253c168040507921604635f000005747261636552c168040507921651622c136a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c50100066f666665727353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c354c301007bc475756a0100c354c30100c351629b006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c301005462750062130076529c64080075756208007575628aff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075043b60000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63b71176549c63b111756a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3646300154f6666657220646f6573206e6f74206578697374215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304986000007c056572726f7253c1680405079216049e60000005747261636552c168040507921651621d110100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3517bc46a0100c352c351c351628d106235007601009c641e00756a0100c352c3517bc46a0100c352c351c3010054626b1062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36568e66c7501009c631a00046561000005747261636552c16804050792165162e60f620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30c6f6666657241737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624c0f6235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622a0f62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36527e56c7501009c631a00043a62000005747261636552c16804050792165162a50e620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075046b63000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63c10c76549c63bb0c756a0100c352c30100c30b6f66666572416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3537bc46a0100c352c353c35162410c6235007601009c641e00756a0100c352c3537bc46a0100c352c353c3010054621f0c62130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3651ce26c7501009c631a00043a64000005747261636552c168040507921651629a0b620700770100c3620a007575755151c1c67c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c35162fc0a6235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462da0a62130076529c640800757562080075756275ff6a0100c352c355c37c51c37601009c64090075013062ac006a0100c352c3577bc4006a0100c352c3587bc46a0100c352c357c30100a06483006a0100c352c357c3765a966a0100c352c3577bc45a970130936a0100c352c358c37e6a0100c352c3587bc462c7ff7576519c641c00756a0100c352c3597bc46a0100c352c359c35162430a6235007601009c641e00756a0100c352c3597bc46a0100c352c359c301005462210a62130076529c640800757562080075756275ff6a0100c352c358c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35a7bc475756a0100c352c35ac351628d096237007601009c642000756a0100c352c35a7bc475756a0100c352c35ac301005462690962130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc351629c086235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc3010054627a0862130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36577de6c7501009c631a0004d166000005747261636552c16804050792165162f507620700770100c3620a007575755151c1c66a0100c351c30100c352c15852c1c66a0100c352c30100c30f6d616b657246656541737365744944787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc3516258076235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462360762130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36533dd6c7501009c631a0004a667000005747261636552c16804050792165162b106620700770100c3620a007575755151c1c66a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504d768000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63cd0476549c63c704756a0100c352c30100c3176d616b6572466565417661696c61626c65416d6f756e74787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516241046235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc3010054621f0462130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3651cda6c7501009c631a0004a669000005747261636552c168040507921651629a03620700770100c3620a007575755151c1c67c7d780100c3549c7c0100c3549c9b648d0151c37601009c64090075013062b0006a0100c352c35e7bc4006a0100c352c35f7bc46a0100c352c35ec30100a06487006a0100c352c35ec3765a966a0100c352c35e7bc45a970130936a0100c352c35fc37e6a0100c352c35f7bc462c7ff7576519c641e00756a0100c352c301107bc46a0100c352c30110c35162fa026237007601009c642000756a0100c352c301107bc46a0100c352c30110c301005462d60262130076529c640800757562080075756271ff6a0100c352c35fc37c51c37601009c64090075013062b8006a0100c352c301117bc4006a0100c352c301127bc46a0100c352c30111c30100a0648b006a0100c352c30111c3765a966a0100c352c301117bc45a970130936a0100c352c30112c37e6a0100c352c301127bc462c2ff7576519c641e00756a0100c352c301137bc46a0100c352c30113c3516236026237007601009c642000756a0100c352c301137bc46a0100c352c30113c301005462120262130076529c64080075756208007575626cff6a0100c352c30112c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c352c301147bc475756a0100c352c30114c351627b016239007601009c642200756a0100c352c301147bc475756a0100c352c30114c301005462550162130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c50100066f666665727353c1c6011152c1c66a0100c351c351c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0647200787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c642000756a0100c352c301157bc475756a0100c352c30115c35162ad006239007601009c642200756a0100c352c301157bc475756a0100c352c30115c301005462870062130076529c64080075756208007575628aff776a52c357c378ca6a52c358c37c51c46a0100c351c351c351c16a0100c30100c353c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36588d66c7501009c631a00042f6c000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504506c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601109c64750075116d757461626c65466565416464726573736a52c354c37d78cb640700c36206007575000100546243005151c1c60100546239007504936c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c30100667601119c64ce0175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304dd6c00007c056572726f7253c168040507921604e36c000005747261636552c168040507921651665952c1c66a0100c351c301007bc475056f776e65726a52c354c37d78cb640700c362060075750051c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3648000324f6e6c792074686520636f6e7472616374206f776e65722063616e206368616e6765207468652046656541646472657373215452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304516d00007c056572726f7253c168040507921604576d000005747261636552c1680405079216516231006a0100c351c30100c3116d757461626c65466565416464726573737c6a52c354c37b7bc45151c1c60100546239007504776d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc46ac2c17601007878c3c2c1c45352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3537bc46ac2c17601007878c3c2c1c45452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3547bc46ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3557bc4680475c893e37601109c64b4057501006a52c30100c37cc376056f776e657287642600755665f6d101009c63180004096f000005747261636552c16804050792165166627805760962616c616e63654f6687644600755765c4d101009c633800041b6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662260576086765744f666665728764460075586573d101009c633800043d6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d504760b6465706f7369744e455035876446007559651fd101009c633800045f6f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066628104760c77697468647261774e45503587644600755b65cad001009c63380004816f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622c0476096d616b654f6666657287644600755d6578d001009c63380004a36f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662da03760966696c6c4f6666657287644600755e6526d001009c63380004c56f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066628803760b63616e63656c4f6666657287644600755f65d2cf01009c63380004e76f000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066623403760a6665654164647265737387644700750110657ecf01009c633800040970000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662e002760d73657446656541646472657373876447007501116527cf01009c633800042b70000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662890276066465706c6f7987647b0275086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000624802516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a17000007c056572726f7253c168040507921604a770000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc4755151c1c6116d757461626c65466565416464726573737c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304387100007c056572726f7253c1680405079216043e71000005747261636552c168040507921651623200680487c3d2645952c1c6116d757461626c65466565416464726573737c6a52c354c37b7bc45151c1c601005462390075045c71000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f0621e087601009c6415087568049a1f194a6804bab953f27602d1009c64a3047501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756267ff779b640700f0622c0301006a52c30100c37cc376056f776e657287642600755665b6ca01009c631800047e72000005747261636552c1680405079216516662f402760962616c616e63654f668764460075576584ca01009c633800049072000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a20276086765744f666665728764460075586533ca01009c63380004b272000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625102760b6465706f7369744e45503587644600755965dfc901009c63380004d472000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662fd01760c77697468647261774e45503587644600755b658ac901009c63380004f672000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a80176096d616b654f6666657287644600755d6538c901009c633800041873000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625601760966696c6c4f6666657287644600755e65e6c801009c633800043a73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620401760b63616e63656c4f6666657287644600755f6592c801009c633800045c73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b000760a6665654164647265737387644700750110653ec801009c633800047e73000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c00760d736574466565416464726573738764470075011165e7c701009c63380004a073000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c35c7bc4756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35c7bc4756a0100c30100c35cc301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35d7bc4756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35d7bc4756a0100c30100c35dc301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - exchange compiles the contracts and outputs the ABI file 4`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - exchange compiles the contracts and outputs the ABI file 5`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-Js compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-Js compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-Js compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angular compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angular compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angular compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-angularJs compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-neotracker compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vue compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vue compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vue compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 1`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "balanceAvailable", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceClaimed", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "balanceRefunded", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": true, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "claim", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "refund", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "Escrow", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Escrow", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "627a1e7601009c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c21062616c616e6365417661696c61626c657c8bc16804050792165151c1c601006676519c645200750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20e62616c616e6365436c61696d65647c8bc16804050792165151c1c601006676529c645300750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c75c20f62616c616e6365526566756e6465647c8bc16804050792165151c1c601006676539c64030375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e60000007c056572726f7253c168040507921604ec00000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3041a0100007c056572726f7253c1680405079216042001000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e0100007c056572726f7253c1680405079216045401000005747261636552c168040507921651665952c1c66a0100c351c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c351c352c36a0100c351c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046802000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676549c649c0775516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b90200007c056572726f7253c168040507921604bf02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0200007c056572726f7253c1680405079216040203000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35952c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c352c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462db056a0100c351c352c36a0100c351c353c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504a704000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e40376549c63de03756a0100c351c351c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c3516244036235007601009c641e00756a0100c352c3527bc46a0100c352c352c301005462220362130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c351628b026235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462690262130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c66a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042007000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c63900076549c638a00756a0100c351c351c36a0100c351c352c36a0100c351c353c36a0100c351c30100c354c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecf46c7501009c631a00048a07000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b307000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676559c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304040800007c056572726f7253c1680405079216040a08000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304470800007c056572726f7253c1680405079216044d08000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075046908000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca01006676579c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676569c646f0875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fc0800007c056572726f7253c1680405079216040209000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304300900007c056572726f7253c1680405079216043609000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304640900007c056572726f7253c1680405079216046a09000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625d066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c351c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659def6c7501009c631a0004ec0a000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36530ef6c7501009c631a0004360b000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047e0c000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c70d000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f4ea6c7501009c631a0004310e000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504620e000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676599c645400750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75087472616e736665726a0100c352c351c351c3e20102768201009c640a005352c1c66207005352c1c601006676589c64710875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304f50e00007c056572726f7253c168040507921604fb0e000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304290f00007c056572726f7253c1680405079216042f0f000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045d0f00007c056572726f7253c168040507921604630f000005747261636552c168040507921651665952c1c66a0100c351c3527bc47653c35652c1c66a0100c351c3537bc4756a0100c3c7c86a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054625e066a0100c351c352c36a0100c352c3517bc4c7c7c753c15752c1c676087472616e736665726ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c352c301007bc46a0100c352c30100c3766a0100c351c353c36a0100c351c30100c3680487c3d2645952c1c653c17b7b087472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c3527bc46a0100c352c352c351626c056235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054624a0562130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365d2e66c7501009c631a0004e510000005747261636552c16804050792165162c504620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36565e66c7501009c631a00042f11000005747261636552c16804050792165162580451c36446046a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047712000005747261636552c168040507921651620700757501006a0100c376c08cca76519c635c0276549c6356027551c36a0100c351c353c351c3945652c1c66a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc47652c36a0100c353c3527bc47653c36a0100c353c3537bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c36a0100c353c352c36a0100c353c351c353c15852c1c66a0100c353c353c37c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c354c301007bc475756a0100c354c30100c3516265006239007601009c642200756a0100c354c301007bc475756a0100c354c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504c013000005747261636552c16804050792165162080075757501006a0100c376c08cca76519c639a0076549c639400756a0100c351c353c36a0100c351c352c36a0100c351c351c36a0100c351c30100c354c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36529e26c7501009c631a00042a14000005747261636552c168040507921651621c0075515352c1c6010054621000005352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045b14000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c87658c7c47657c7c4765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c6415027501006a52c30100c37cc3760962616c616e63654f66876446007553654fe001009c633800046f15000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b5017616617070726f7665526563656976655472616e7366657287644600755465f0df01009c633800049115000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662560176146f6e5265766f6b6553656e645472616e736665728764460075556593df01009c63380004b315000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f9007605636c61696d8764460075566545df01009c63380004d515000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ab007606726566756e6487644600755865f6de01009c63380004f715000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625c0076066465706c6f7987644e0075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621b00515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac067601009c64a3067568049a1f194a6804bab953f27602d1009c6431037501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f062ba0101006a52c30100c37cc3760962616c616e63654f6687644600755365aedc01009c633800043017000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625e017616617070726f7665526563656976655472616e73666572876446007554654fdc01009c633800045217000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662ff0076146f6e5265766f6b6553656e645472616e7366657287644600755565f2db01009c633800047417000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662a2007605636c61696d87644600755665a4db01009c633800049617000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666254007606726566756e648764460075586555db01009c63380004b817000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c37658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 2`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "amountPerNEO", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "owner", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Address", - }, - }, - Object { - "constant": true, - "name": "startTimeSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "icoDurationSeconds", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "remaining", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": false, - "name": "mintTokens", - "parameters": Array [], - "receive": true, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "refundAssets", - "parameters": Array [], - "returnType": Object { - "type": "Void", - }, - "sendUnsafe": true, - }, - Object { - "name": "deploy", - "parameters": Array [ - Object { - "default": Object { - "type": "sender", - }, - "forwardedValue": false, - "name": "owner", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "startTimeSeconds", - "optional": true, - "type": "Integer", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "icoDurationSeconds", - "optional": true, - "type": "Integer", - }, - ], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE ICO", - "dynamicInvoke": false, - "email": "alex.dicarlo@neotracker.io", - "name": "ICO", - "parameters": Array [ - "String", - "Array", - ], - "payable": true, - "returnType": "Buffer", - "script": "621e127601009c642800750c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c301006676519c64210075056f776e65726a52c354c37d78cb640700c362060075750051c301006676529c642c007510737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c301006676539c642e00751269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c362060075750051c301006676549c64740075106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075048100000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676559c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676569c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c601006676579c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676589c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676599c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765a9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765b9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c6010066765c9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765d9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765e9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066765f9c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601109c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601119c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601129c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601139c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601149c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601159c6494037568049a1f194a6804301111106a0100c30100c3547bc468049a1f194a680417a588c1c77c680424ef3dbf7c78680442298fe064b800787c786804ab5b018e7b6804813425bc7b7b7c7b6a0100c30100c354c37cc368041f846c63680487c3d264876410007d7c68046f6c6e8d51c46204007762b9ff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756244ff7776c0519c641e02cc0100c3760100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c3640800750062e8006804cdcf172c68043011111068044eaada58517c7d787c680442298fe09a64c60075766804ab5b018e68041f846c63766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a620500750062a7ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756232ff776205007500637a0018496e76616c6964526566756e644173736574734572726f725452c1c676760100c3549c63080051c30100c351c304010600007c056572726f7253c1680405079216040706000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100665151c1c60100667601169c642b0075750100c5046e616d65e101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601179c642d0075750100c50673796d626f6ce101029ec66683e2aa3c951a57202296a313bc4a6327445452c1c60100667601189c642f0075750100c508646563696d616c73e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c60100667601199c643800750100c351c351c10e736574546f74616c537570706c79e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c601006676011a9c64320075750100c50b746f74616c537570706c79e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011b9c643c00750100c57c760100c351c37b7d7cc87c750962616c616e63654f66e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011c9c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7510617070726f7665645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a6327445652c1c601006676011d9c64f101750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c352c3597bc46a0100c352c359c351666232007601009c641b00756a0100c352c3597bc46a0100c352c359c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c641c00756a0100c352c35a7bc475756a0100c352c35ac351666234007601009c641d00756a0100c352c35a7bc475756a0100c352c35ac301006662130076529c640800757562080075756296ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c352c35b7bc4776a0100c352c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c352c35b7bc4776a0100c352c35bc301006662130076529c64080075756208007575627eff77087472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011e9c646900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7513617070726f766553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c601006676011f9c646c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7516617070726f7665526563656976655472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601209c646800750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75127265766f6b6553656e645472616e73666572e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601219c645b00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e73666572e100029ec66683e2aa3c951a57202296a313bc4a6327445151c1c60100667601229c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c75056973737565e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601239c644300750100c57c750c726566756e64417373657473e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601249c644300750100c57c750c636f6d706c65746553656e64e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c60100667601259c649900750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c7653c351c37b7d7cc87c7654c351c37b7d7cc87c7655c351c37b7d7cc87c7656c351c37b7d7cc87c7657c351c37b7d7cc87c7658c351c37b7d7cc87c750775706772616465e101029ec66683e2aa3c951a57202296a313bc4a632744768201009c640a005352c1c66207005352c1c6010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c475680475c893e37601109c6499187501006a52c30100c37cc3760c616d6f756e745065724e454f876447007501006530ed01009c633800042a0a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662351876056f776e657287642600755165e2ec01009c631800044c0a000005747261636552c168040507921651666207187610737461727454696d655365636f6e647387642600755265a9ec01009c631800045e0a000005747261636552c1680405079216516662ce17761269636f4475726174696f6e5365636f6e6473876426007553656eec01009c63180004700a000005747261636552c16804050792165166629317760972656d61696e696e67876446007554653cec01009c63380004820a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066624117760a6d696e74546f6b656e73876483137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0649100787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c644000756a0100c30100c301007bc475756a0100c30100c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301007bc475756a0100c30100c30100c301006662130076529c64080075756208007575626bff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3517bc475756a0100c30100c351c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3517bc475756a0100c30100c351c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3527bc475756a0100c30100c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3527bc475756a0100c30100c352c301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756269ff77919b6407000062db0f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504e80c000005747261636552c16804050792165162e50d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890e000005747261636552c16804050792165162930b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304b00e00007c056572726f7253c168040507921604b60e000005747261636552c168040507921651622f0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162d40a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462b00a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304610f00007c056572726f7253c168040507921604670f000005747261636552c168040507921651620c0a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516269096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462450962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3046e1000007c056572726f7253c1680405079216047410000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162c4076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462a10762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b0075041911000005747261636552c168040507921651623a0775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3044c1100007c056572726f7253c1680405079216045211000005747261636552c16804050792165162ca066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c3048e1100007c056572726f7253c1680405079216049411000005747261636552c168040507921651624f06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c45552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c45652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c45752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c45852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c45952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c45c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c45d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4011152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4011252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4011352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4011452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36531db6c7501009c631a00046815000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365c4da6c7501009c631a0004b215000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304de1500007c056572726f7253c168040507921604e415000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075042d16000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca62b103760c726566756e64417373657473876447007501156556d801009c633800040a17000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066625b0376066465706c6f7987644d0375086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000621a03516a52c30100c37cc36a0100c3c7c876c00100a1641f001400000000000000000000000000000000000000005952c1c6628f00760100c3768201009c640b00755151c1c6625800768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304801700007c056572726f7253c1680405079216048617000005747261636552c168040507921651665952c1c6760100c3519c641d00751400000000000000000000000000000000000000005952c1c66a0100c351c301007bc476c051a16410006804420111be5652c1c6622e007651c3768201009c640b00755151c1c66207005652c1c6760100c3519c640e00756804420111be5652c1c66a0100c351c3517bc476c052a1640f0004a04f66095652c1c6622d007652c3768201009c640b00755151c1c66207005652c1c6760100c3519c640d007504a04f66095652c1c66a0100c351c3527bc4755a5652c1c60c616d6f756e745065724e454f7c6a52c354c37b7bc408000064a7b3b6e00d5652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc46a0100c351c30100c3056f776e65727c6a52c354c37b7bc46a0100c351c351c310737461727454696d655365636f6e64737c6a52c354c37b7bc46a0100c351c352c31269636f4475726174696f6e5365636f6e64737c6a52c354c37b7bc46a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36467001953656e64657220776173206e6f7420746865206f776e65722e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304ab1800007c056572726f7253c168040507921604b118000005747261636552c168040507921651620d005151c1c60100546239007504c018000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667575756a0100c376c08cca515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f062ac1a7601009c64a31a7568049a1f194a6804bab953f27602d1009c6429177501006a52c30100c37cc3760a6d696e74546f6b656e738764c01368049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e11987620600757500766488137568049a1f194a68048d64b0590100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c67c5952c1c651c17c51c3cdc60100c37c68044eaada587c78680442298fe0648d00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c64080075756208007575626fff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640c0075005352c1c662090075515352c1c651c368049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3597bc475756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3597bc475756a0100c30100c359c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35a7bc475756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35a7bc475756a0100c30100c35ac301006662130076529c640800757562080075756238ff77680424ef3dbf517c7d787c680442298fe09a648f007576766804ab5b018e7c6804813425bc750100a062deff7576519c643e00756a0100c30100c35b7bc475756a0100c30100c35bc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35b7bc475756a0100c30100c35bc301006662130076529c640800757562080075756269ff77919b6407000062e60f516a52c30100c37cc36a0100c3c7c8756a0100c3c7c80100c1756804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c362060075750051c37c51c37c9f915352c1c60100546225005151c1c6010054621b007504701b000005747261636552c16804050792165162f00d757551c3915352c1c67651c3634802750100c1756a0100c3c7c86804420111be5652c1c610737461727454696d655365636f6e64736a52c354c37d78cb640700c36206007575001269636f4475726174696f6e5365636f6e64736a52c354c37d78cb640700c36206007575007c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c3516221016235007601009c641e00756a0100c353c3527bc46a0100c353c352c301005462ff0062130076529c640800757562080075756272ff6a0100c353c351c37c51c37601009c64090075013062ac006a0100c353c3537bc4006a0100c353c3547bc46a0100c353c353c30100a06483006a0100c353c353c3765a966a0100c353c3537bc45a970130936a0100c353c354c37e6a0100c353c3547bc462c7ff7576519c641c00756a0100c353c3557bc46a0100c353c355c3516268006235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462460062130076529c640800757562080075756275ff6a0100c353c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37c51c37c9f5352c1c601005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504111d000005747261636552c168040507921651629e0b757551c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304381d00007c056572726f7253c1680405079216043e1d000005747261636552c168040507921651623a0b68049a1f194a011352c1c67651c368043011111068044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3547bc475756a0100c352c354c35162df0a6237007601009c642000756a0100c352c3547bc475756a0100c352c354c301005462bb0a62130076529c64080075756208007575628eff775852c1c66a0100c352c3537bc4756a0100c352c353c351c3c05652c1c601005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304e91d00007c056572726f7253c168040507921604ef1d000005747261636552c16804050792165162170a6a0100c352c353c301005652c1c651c37c51c37dc078a0640700c362090075755151c1c651c368041f846c635952c1c66a0100c352c301007bc401005652c1c66a0100c352c3517bc468049a1f194a011352c1c651c36804c6c5088668044eaada580100c578680442298fe0646e00787c7c6804ab5b018e7c7d7c011452c1c6c862e4ff7576519c641e00756a0100c352c3557bc475756a0100c352c355c3516274096237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462500962130076529c64080075756208007575628eff775852c1c651c368044eaada5876680442298fe0649001766804ab5b018e6a0100c352c3567bc46a0100c352c356c351c368041f846c635952c1c6680487c3d2645952c1c6875352c1c651c36401016a0100c352c356c351c3680484848b745952c1c6209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc55952c1c6875352c1c651c3915352c1c651c364610012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304f61e00007c056572726f7253c168040507921604fc1e000005747261636552c16804050792165154625c006a0100c352c351c351c36a0100c352c356c351c368049304570f5652c1c651c30c616d6f756e745065724e454f6a52c354c37d78cb640700c362060075750051c3955652c1c651c3935652c1c66a0100c352c3517bc462c0fe7576519c641d00756a0100c352c3577bc4756a0100c352c357c35162cf076236007601009c641f00756a0100c352c3577bc4756a0100c352c357c301005462ac0762130076529c64080075756208007575626cfe756a0100c352c351c3106d757461626c6552656d61696e696e676a52c354c37d78cb640700c36206007575000100546225005151c1c6010054621b007504a11f000005747261636552c16804050792165162450775757c51c37c51c37c9f5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304d41f00007c056572726f7253c168040507921604da1f000005747261636552c16804050792165162d5066a0100c352c351c301005652c1c67c51c37c51c39c5352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304162000007c056572726f7253c1680405079216041c20000005747261636552c168040507921651625a06c7c7c753c15752c1c676046e616d656ac2c17601007878c3c2c1c4011652c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760673796d626f6c6ac2c17601007878c3c2c1c4011752c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc47608646563696d616c736ac2c17601007878c3c2c1c4011852c1c7c7c753c15752c1c67d517b7b51c352c37b7bc45151c1c67c52c17b51c30100c37b7bc4760b746f74616c537570706c796ac2c17601007878c3c2c1c4011952c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46ac2c17601007878c3c2c1c4011a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc452c17b51c30100c37b7bc4760962616c616e63654f666ac2c17601007878c3c2c1c4011b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47610617070726f7665645472616e736665726ac2c17601007878c3c2c1c4011c52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476087472616e736665726ac2c17601007878c3c2c1c4011d52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47613617070726f766553656e645472616e736665726ac2c17601007878c3c2c1c4011e52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c4011f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476127265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4012152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760569737375656ac2c17601007878c3c2c1c4012252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c726566756e644173736574736ac2c17601007878c3c2c1c4012352c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760c636f6d706c65746553656e646ac2c17601007878c3c2c1c4012452c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c47607757067726164656ac2c17601007878c3c2c1c4012552c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c4760761646472657373149ec66683e2aa3c951a57202296a313bc4a6327445952c1c67b51c30100c37b7b51c1c46a0100c352c3527bc46a0100c352c352c3766a0100c352c351c36a0100c352c30100c352c17b7b056973737565787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c352c35c7bc46a0100c352c35cc35162d0016235007601009c641e00756a0100c352c35c7bc46a0100c352c35cc301005462ae0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3658dc36c7501009c631a0004f023000005747261636552c168040507921651622901620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36520c36c7501009c631a00043a24000005747261636552c16804050792165162bc0051c3915352c1c651c364600012496e76616c6964206d696e74546f6b656e735452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304662400007c056572726f7253c1680405079216046c24000005747261636552c168040507921651625300106d757461626c6552656d61696e696e676a52c354c37d78cb640700c362060075750051c36a0100c352c351c351c3945652c1c6106d757461626c6552656d61696e696e677c6a52c354c37b7bc401006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504b524000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575000100c501001570726f6365737365645472616e73616374696f6e7353c1c6011252c1c668049a1f194a68048d64b0595952c1c6515352c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe064a400787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c643e00756a0100c351c301007bc475756a0100c351c30100c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c351c301007bc475756a0100c351c30100c301006662130076529c640800757562080075756258ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c376c08cca75624e03760c726566756e6441737365747387647d0068049a1f194a68044105c33d7601157d810167680487c3d2647e8764130078827c9480a968041d59e1198762060075750076644500750115657cc001009c63380004ac25000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100667562c2027568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35c7bc475756a0100c30100c35cc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35c7bc475756a0100c30100c35cc301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c35d7bc475756a0100c30100c35dc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35d7bc475756a0100c30100c35dc301006662130076529c640800757562080075756267ff779b640700f062590101006a52c30100c37cc3760c616d6f756e745065724e454f8764470075010065b2be01009c633800049e26000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662f90076056f776e65728764260075516564be01009c63180004c026000005747261636552c1680405079216516662cb007610737461727454696d655365636f6e6473876426007552652bbe01009c63180004d226000005747261636552c16804050792165166629200761269636f4475726174696f6e5365636f6e647387642600755365f0bd01009c63180004e426000005747261636552c16804050792165166625700760972656d61696e696e6787644600755465bebd01009c63380004f626000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f062650376529c645d037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c35e7bc475756a0100c30100c35ec3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35e7bc475756a0100c30100c35ec301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c35f7bc475756a0100c30100c35fc3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c35f7bc475756a0100c30100c35fc301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b7007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c644000756a0100c30100c301107bc475756a0100c30100c30110c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301107bc475756a0100c30100c30110c301006662130076529c640800757562080075756240ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64940075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c644000756a0100c30100c301117bc475756a0100c30100c30111c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666238007601009c642100756a0100c30100c301117bc475756a0100c30100c30111c301006662130076529c640800757562080075756263ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64ac00680424ef3dbf76680442298fe0649800766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643f00756a0100c30100c301127bc4756a0100c30100c30112c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301127bc4756a0100c30100c30112c301006662130076529c640800757562080075756264ff75620400757657c3680475c893e301109c64ab00680424ef3dbf76680442298fe0649700766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643f00756a0100c30100c301137bc4756a0100c30100c30113c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666237007601009c642000756a0100c30100c301137bc4756a0100c30100c30113c301006662130076529c640800757562080075756265ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; - -exports[`compile - ico-vueJs compiles the contracts and outputs the ABI file 3`] = ` -Object { - "abi": Object { - "events": Array [ - Object { - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": true, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": true, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - Object { - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - }, - ], - "functions": Array [ - Object { - "constant": true, - "name": "name", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "symbol", - "parameters": Array [], - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "String", - }, - }, - Object { - "constant": true, - "name": "decimals", - "parameters": Array [], - "returnType": Object { - "decimals": 0, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "constant": true, - "name": "totalSupply", - "parameters": Array [], - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - }, - Object { - "claim": false, - "constant": true, - "name": "balanceOf", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "address", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": true, - "name": "approvedTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "decimals": 8, - "forwardedValue": false, - "optional": false, - "type": "Integer", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "transfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "approveArgs", - "optional": false, - "rest": true, - "type": "ForwardValue", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 0, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "approveReceiveTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "revokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "onRevokeSendTransfer", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "from", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - Object { - "forwardedValue": false, - "name": "asset", - "optional": false, - "type": "Address", - }, - ], - "receive": false, - "returnType": Object { - "optional": false, - "type": "Void", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "claim": false, - "constant": false, - "name": "issue", - "parameters": Array [ - Object { - "forwardedValue": false, - "name": "to", - "optional": false, - "type": "Address", - }, - Object { - "decimals": 8, - "forwardedValue": false, - "name": "amount", - "optional": false, - "type": "Integer", - }, - ], - "receive": false, - "returnType": Object { - "forwardedValue": false, - "optional": false, - "type": "Boolean", - }, - "send": false, - "sendUnsafe": false, - }, - Object { - "name": "deploy", - "parameters": Array [], - "returnType": Object { - "type": "Boolean", - }, - }, - ], - }, - "contract": Object { - "author": "dicarlo2", - "codeVersion": "1.0", - "description": "NEO•ONE Token", - "dynamicInvoke": true, - "email": "alex.dicarlo@neotracker.io", - "name": "Token", - "parameters": Array [ - "String", - "Array", - ], - "payable": false, - "returnType": "Buffer", - "script": "62bd3c7601009c645e00750100c57c760100c3760100c3519c640800750062050051c37b7d7cc87c7651c3760100c3519c640800750062050051c37b7d7cc87c7652c351c37b7d7cc87c75c2087472616e736665727c8bc16804050792165151c1c601006676519c644d00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c213617070726f766553656e645472616e736665727c8bc16804050792165151c1c601006676529c644c00750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75c2127265766f6b6553656e645472616e736665727c8bc16804050792165151c1c601006676539c64200075046e616d656a52c354c37d78cb640700c362060075750051c301006676549c642200750673796d626f6c6a52c354c37d78cb640700c362060075750051c301006676559c6424007508646563696d616c736a52c354c37d78cb640700c362060075750051c301006676569c647100750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575000100546243005151c1c601005462390075041401000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c301006676579c642b0275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3045e0100007c056572726f7253c1680405079216046401000005747261636552c168040507921651665952c1c66a0100c351c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075046402000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca01006676589c64a30275516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304b50200007c056572726f7253c168040507921604bb02000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e90200007c056572726f7253c168040507921604ef02000005747261636552c168040507921651665952c1c66a0100c351c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c352c3517bc475756a0100c352c351c35162de006237007601009c642000756a0100c352c3517bc475756a0100c352c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c352c301007bc46a0100c352c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c352c30100c301005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fc03000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765a9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c6010066765b9c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c601006676599c648b1375516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304fb0500007c056572726f7253c1680405079216040106000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3042f0600007c056572726f7253c1680405079216043506000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc45378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f645e007c7b7d7855797cc3c88b7b62eeff7576519c641a00756a0100c351c3537bc46a0100c351c353c351666232007601009c641b00756a0100c351c3537bc46a0100c351c353c301006662130076529c6408007575620800757562a1ff75757768044eaada580100c578680442298fe0646800787c7c6804ab5b018e7c7d7c5c52c1c6c862e5ff7576519c641c00756a0100c351c3547bc475756a0100c351c354c351666234007601009c641d00756a0100c351c3547bc475756a0100c351c354c301006662130076529c640800757562080075756294ff775852c1c66a0100c351c3557bc46a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304fa0700007c056572726f7253c1680405079216040008000005747261636552c16804050792165162050001006a0100c376c08cca76519c63c10f76549c63bb0f756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075041e09000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63010e76549c63fb0d756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c601005462c40d6a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504890a000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63e00b76549c63da0b756a0100c352c3517bc46a0100c352c351c36a0100c351c352c351c37c51c37c9f915352c1c67651c3644f00756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c66a0100c352c3527bc46a0100c352c352c351c3915352c1c67651c3645700756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c601005462e00a6a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3537bc46a0100c352c353c35151c1c67c760100c3519c640900757551620600757500915352c1c67651c3645600756a0100c351c351c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c36428036a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45a52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c45b52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c3760100c5766a0100c351c30100c3c8766a0100c351c352c3c876680487c3d2645952c1c6c86a0100c351c355c351c37c7c68044eaada587c78680442298fe0646900787c7c6804ab5b018e7c7d7cc862e9ff7576519c641e00756a0100c353c3557bc475756a0100c353c355c35162e5016237007601009c642000756a0100c353c3557bc475756a0100c353c355c301005462c10162130076529c640800757562080075756293ff777b7b16617070726f7665526563656976655472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3567bc46a0100c353c356c3516230016235007601009c641e00756a0100c353c3567bc46a0100c353c356c3010054620e0162130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36559eb6c7501009c631a0004770d000005747261636552c168040507921651628900620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365ecea6c7501009c631a0004c10d000005747261636552c168040507921651621c0051c3915352c1c651c3640e00005352c1c601005462050001006a0100c376c08cca76519c63140776549c630e07756a0100c351c351c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504f10e000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63550576549c634f05756a0100c352c3547bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3557bc475756a0100c352c355c35162a7046237007601009c642000756a0100c352c3557bc475756a0100c352c355c301005462830462130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca0100c501000862616c616e63657353c1c6011152c1c66a0100c351c351c36a0100c352c354c36a0100c351c352c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3567bc4006a0100c352c3577bc46a0100c352c356c30100a06483006a0100c352c356c3765a966a0100c352c3567bc45a970130936a0100c352c357c37e6a0100c352c3577bc462c7ff7576519c641c00756a0100c352c3587bc46a0100c352c358c351628e036235007601009c641e00756a0100c352c3587bc46a0100c352c358c3010054626c0362130076529c640800757562080075756275ff6a0100c352c357c37c51c37601009c64090075013062ac006a0100c352c3597bc4006a0100c352c35a7bc46a0100c352c359c30100a06483006a0100c352c359c3765a966a0100c352c3597bc45a970130936a0100c352c35ac37e6a0100c352c35a7bc462c7ff7576519c641c00756a0100c352c35b7bc46a0100c352c35bc35162d5026235007601009c641e00756a0100c352c35b7bc46a0100c352c35bc301005462b30262130076529c640800757562080075756275ff6a0100c352c35ac37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c35c7bc475756a0100c352c35cc351621f026237007601009c642000756a0100c352c35c7bc475756a0100c352c35cc301005462fb0162130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36502e56c7501009c631a0004f311000005747261636552c168040507921651625101756a0100c352c352c351c36436016a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c351c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648900787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c642000756a0100c353c301007bc475756a0100c353c30100c3516265006239007601009c642200756a0100c353c301007bc475756a0100c353c30100c3010054623f0062130076529c640800757562080075756273ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca01006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c60100546239007504fd12000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765c9c64250875516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3044e1300007c056572726f7253c1680405079216045413000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304821300007c056572726f7253c1680405079216048813000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304801400007c056572726f7253c1680405079216048614000005747261636552c16804050792165162050001006a0100c376c08cca76519c63710576549c636b05756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c60100546207050100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075042116000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ed0276549c63e702756a0100c351c352c37c7d780100c3549c7c0100c3549c9b64810151c37601009c64090075013062b0006a0100c352c301007bc4006a0100c352c3517bc46a0100c352c30100c30100a06485006a0100c352c30100c3765a966a0100c352c301007bc45a970130936a0100c352c351c37e6a0100c352c3517bc462c4ff7576519c641c00756a0100c352c3527bc46a0100c352c352c351624d026235007601009c641e00756a0100c352c3527bc46a0100c352c352c3010054622b0262130076529c640800757562080075756272ff6a0100c352c351c37c51c37601009c64090075013062ac006a0100c352c3537bc4006a0100c352c3547bc46a0100c352c353c30100a06483006a0100c352c353c3765a966a0100c352c3537bc45a970130936a0100c352c354c37e6a0100c352c3547bc462c7ff7576519c641c00756a0100c352c3557bc46a0100c352c355c3516294016235007601009c641e00756a0100c352c3557bc46a0100c352c355c301005462720162130076529c640800757562080075756275ff6a0100c352c354c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3567bc475756a0100c352c356c35162de006237007601009c642000756a0100c352c3567bc475756a0100c352c356c301005462ba0062130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c351c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659adb6c7501009c631a00044e18000005747261636552c16804050792165162110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075047718000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765d9c64420175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304c81800007c056572726f7253c168040507921604ce18000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c3040b1900007c056572726f7253c1680405079216041119000005747261636552c168040507921651665952c1c66a0100c351c3527bc475005352c1c60100546243005151c1c601005462390075043519000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066765f9c643502750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c5378c07c7d01009f6409007c7b7dc0937b7601009f6409007b7dc0937b7c7b7dc0a37b0100a47c0100c57b7b7c7d789f647e007c7b7d7855797cc3c88b7b62eeff7576519c643a00756a0100c353c3527bc46a0100c353c352c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666232007601009c641b00756a0100c353c3527bc46a0100c353c352c301006662130076529c640800757562080075756281ff75757768044eaada580100c578680442298fe0648600787c7c6804ab5b018e7c7d7c51c3c862e7ff7576519c643c00756a0100c353c3537bc475756a0100c353c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666234007601009c641d00756a0100c353c3537bc475756a0100c353c353c301006662130076529c640800757562080075756276ff7768044eaada587d680442298fe0647e007d786804ab5b018ec862edff7576519c643b00756a0100c353c3547bc4776a0100c353c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666233007601009c641c00756a0100c353c3547bc4776a0100c353c354c301006662130076529c64080075756208007575627eff7716617070726f7665526563656976655472616e736665726a0100c353c351c351c3e20102768201009c640a005352c1c66207005352c1c60100667601109c645100750100c57c760100c351c37b7d7cc87c7651c351c37b7d7cc87c7652c351c37b7d7cc87c75146f6e5265766f6b6553656e645472616e736665726a0100c353c351c351c3e200025151c1c6010066765e9c64aa0975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304341b00007c056572726f7253c1680405079216043a1b000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304681b00007c056572726f7253c1680405079216046e1b000005747261636552c168040507921651665952c1c66a0100c351c3517bc47652c35652c1c66a0100c351c3527bc4756a0100c3c7c86a0100c351c352c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c352c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304661c00007c056572726f7253c1680405079216046c1c000005747261636552c16804050792165162050001006a0100c376c08cca76519c63f60676549c63f006756a0100c351c30100c351c3766a52c352c3876408007551623100766804a16ba92e00876423006804efdfe6946a52c352c368041d59e11987680475c893e301009c9b9a62050075005352c1c651c3915352c1c651c3640e00005352c1c6010054628c066a0100c351c351c36a0100c351c30100c352c16a0100c3c7c8760100c36a0100c353c301007bc47651c36a0100c353c3517bc4756a0100c3c7c80100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c353c351c36a0100c353c30100c352c15852c1c651c37c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b007504e81d000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63a80476549c63a204756a0100c352c301007bc46a0100c352c30100c36a0100c351c352c351c37c51c37c9f5352c1c651c3640e00005352c1c6010054626b040100c5010011617070726f7665645472616e736665727353c1c6011152c1c66a0100c351c351c36a0100c351c30100c352c15852c1c66a0100c352c30100c351c36a0100c351c352c351c3945652c1c67c51c37b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3527bc475756a0100c352c352c35162b6036237007601009c642000756a0100c352c3527bc475756a0100c352c352c301005462920362130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c352c36a0100c351c351c36a0100c351c30100c353c16a0100c30100c352c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365f3d06c7501009c631a0004371f000005747261636552c16804050792165162e902756a0100c351c351c351c36804a16ba92e760087640b00755151c1c6620800011952c1c66a0100c352c3517bc46a0100c352c351c35151c1c67c760100c3519c640900757551620600757500915352c1c651c36486026a0100c3c7c86a0100c351c351c36a0100c353c3517bc4c7c7c753c15752c1c67616617070726f7665526563656976655472616e736665726ac2c17601007878c3c2c1c45f52c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c476146f6e5265766f6b6553656e645472616e736665726ac2c17601007878c3c2c1c4011052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc47b51c30100c37b7b51c1c46a0100c353c301007bc46a0100c353c30100c376680487c3d2645952c1c66a0100c351c352c36a0100c351c30100c353c17b7b146f6e5265766f6b6553656e645472616e73666572787c7c7651c30100c3767b51c30100c3765479cb917b095f5f70726f746f5f5fcb9a64770075095f5f70726f746f5f5fc30100c37651c30100c3767b51c30100c376547962cfff7576519c641c00756a0100c353c3557bc46a0100c353c355c351621a016235007601009c641e00756a0100c353c3557bc46a0100c353c355c301005462f80062130076529c64080075756208007575627dff777d78cb647800c376c052876469000100c3517c51c352c37cc3c2c17d76c0539c64080075756205007cc80100c57c7651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c3659fce6c7501009c631a0004ce20000005747261636552c168040507921651627300620700770100c3620a007575755151c1c6517c51c352c37cc3c2c17d76c0539c64080075756205007cc87651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c36532ce6c7501009c631a00041821000005747261636552c1680405079216516206007501006a0100c376c08cca76519c63170076549c63110075515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075045221000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca0100667601119c64370175516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304a32100007c056572726f7253c168040507921604a921000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc47652c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304e62100007c056572726f7253c168040507921604ec21000005747261636552c168040507921651665952c1c66a0100c351c3527bc4755151c1c601005462390075040822000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757575006a0100c376c08cca0100667601129c64010975516a52c30100c37cc36a0100c3c7c8760100c3768201149c634c007509547970654572726f725452c1c676760100c3549c63080051c30100c351c304592200007c056572726f7253c1680405079216045f22000005747261636552c168040507921651665952c1c66a0100c351c301007bc47651c35652c1c66a0100c351c3517bc4756a0100c3c7c86a0100c351c351c301005652c1c651c37c51c37c9f5352c1c651c36451016a0100c3c7c81f416d6f756e74206d7573742062652067726561746572207468616e20303a206a0100c351c351c351c37601009c64090075013062b0006a0100c353c301007bc4006a0100c353c3517bc46a0100c353c30100c30100a06485006a0100c353c30100c3765a966a0100c353c301007bc45a970130936a0100c353c351c37e6a0100c353c3517bc462c4ff7576519c641c00756a0100c353c3527bc46a0100c353c352c351628f006235007601009c641e00756a0100c353c3527bc46a0100c353c352c3010054626d0062130076529c640800757562080075756272ff6a0100c353c351c37e007e5452c1c6c77d01007bc45f52c1c676760100c3549c63080051c30100c351c304572300007c056572726f7253c1680405079216045d23000005747261636552c16804050792165162050001006a0100c376c08cca76519c63ae0676549c63a806756a0100c351c30100c351c16a0100c3c7c8760100c36a0100c353c301007bc4756a0100c3c7c80100c501000862616c616e63657353c1c6011152c1c66a0100c353c30100c351c17c51c3cdc60100c37c68044eaada587c78680442298fe0646e00787c7c6804ab5b018e7c7c6804c3b044617e62e4ff7576519c641e00756a0100c354c3517bc475756a0100c354c351c35162de006237007601009c642000756a0100c354c3517bc475756a0100c354c351c301005462ba0062130076529c64080075756208007575628eff776a52c358c378cb64080075006234006a52c357c37d78cb640700c36225007768042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640b00755151c1c6620b00680459e9c3ee51c36a0100c354c301007bc46a0100c354c30100c35151c1c67c760100c3519c6409007575516206007575005352c1c651c3640c0001005652c1c6620c006a0100c354c30100c301005462050001006a0100c376c08cca76519c63140076549c632600755151c1c6010054621b0075047b24000005747261636552c168040507921651620700757501006a0100c376c08cca76519c63ee0476549c63e804756a0100c352c301007bc40100c501000862616c616e63657353c1c6011152c1c66a0100c351c30100c36a0100c352c30100c36a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3517bc4006a0100c352c3527bc46a0100c352c351c30100a06483006a0100c352c351c3765a966a0100c352c3517bc45a970130936a0100c352c352c37e6a0100c352c3527bc462c7ff7576519c641c00756a0100c352c3537bc46a0100c352c353c3516220046235007601009c641e00756a0100c352c3537bc46a0100c352c353c301005462fe0362130076529c640800757562080075756275ff6a0100c352c352c37c51c37601009c64090075013062ac006a0100c352c3547bc4006a0100c352c3557bc46a0100c352c354c30100a06483006a0100c352c354c3765a966a0100c352c3547bc45a970130936a0100c352c355c37e6a0100c352c3557bc462c7ff7576519c641c00756a0100c352c3567bc46a0100c352c356c3516267036235007601009c641e00756a0100c352c3567bc46a0100c352c356c301005462450362130076529c640800757562080075756275ff6a0100c352c355c37c7e5452c1c6620e0051c37c51c37c935652c1c67c51c17b51c3cdc67c68044eaada587c78680442298fe0648500787c7c6804ab5b018e7c760100c37b7d6804c3b044617e7b76527852c3c2c176567ac8c47d01007bc462cdff7576519c641e00756a0100c352c3577bc475756a0100c352c357c35162b1026237007601009c642000756a0100c352c3577bc475756a0100c352c357c3010054628d0262130076529c640800757562080075756277ff77760100c37c52c35852c1c67b7c52c16804c3b044617c7d6a52c357c37c7bc46a52c358c37cca6a0100c351c351c36a0100c351c30100c35151c1c653c16a0100c30100c30100c3517c51c352c37cc37651c3c2c1760100780100c3c2c1c478c0539c640a007852c378517bc46b0100c365b1c56c7501009c631a0004c626000005747261636552c16804050792165162e701750d6d757461626c65537570706c796a52c354c37d78cb640700c36206007575006a0100c351c351c37c7d780100c3549c7c0100c3549c9b647d0151c37601009c64090075013062ac006a0100c352c3587bc4006a0100c352c3597bc46a0100c352c358c30100a06483006a0100c352c358c3765a966a0100c352c3587bc45a970130936a0100c352c359c37e6a0100c352c3597bc462c7ff7576519c641c00756a0100c352c35a7bc46a0100c352c35ac3516231016235007601009c641e00756a0100c352c35a7bc46a0100c352c35ac3010054620f0162130076529c640800757562080075756275ff6a0100c352c359c37c51c37601009c64090075013062ac006a0100c352c35b7bc4006a0100c352c35c7bc46a0100c352c35bc30100a06483006a0100c352c35bc3765a966a0100c352c35b7bc45a970130936a0100c352c35cc37e6a0100c352c35c7bc462c7ff7576519c641c00756a0100c352c35d7bc46a0100c352c35dc3516278006235007601009c641e00756a0100c352c35d7bc46a0100c352c35dc301005462560062130076529c640800757562080075756275ff6a0100c352c35cc37c7e5452c1c6620e0051c37c51c37c935652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c601005462050001006a0100c376c08cca76519c63140076549c634400755151c1c601005462390075044828000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066757551c36a0100c376c08cca010066f05151c1c65151c1c60100c553c1766b0100c3c7c874c1c77d01007bc476510100c5c47652680445995a5cc4766a7d78527cc4517cc47651c3c7c8765578540068042e3cc04d6804881908e976680442298fe0640c006804ab5b018e6205007500760087640f0075c7766804c3b04461620b0076680459e9c3ee7c547375c4c47658c7c47657c7c4756ac2c17601007878c3c2c1c4010052c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c301007bc46ac2c17601007878c3c2c1c45152c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3517bc46ac2c17601007878c3c2c1c45252c1c7c7c753c15752c1c67d517b7b51c352c37b7bc46a0100c30100c3527bc4680475c893e37601109c64cc047501006a52c30100c37cc376046e616d658764460075536511c201009c633800045c29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627104760673796d626f6c87644600755465c2c101009c633800047e29000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666222047608646563696d616c738764460075556571c101009c63380004a029000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d103760b746f74616c537570706c79876446007556651dc101009c63380004c229000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066627d03760962616c616e63654f6687644600755765cbc001009c63380004e429000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066622b037610617070726f7665645472616e736665728764460075586572c001009c63380004062a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662d20276087472616e736665728764460075596521c001009c63380004282a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666281027613617070726f766553656e645472616e7366657287644600755c65c5bf01009c633800044a2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666225027616617070726f7665526563656976655472616e7366657287644600755d6566bf01009c633800046c2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c60176127265766f6b6553656e645472616e7366657287644600755e650bbf01009c633800048e2a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626b0176146f6e5265766f6b6553656e645472616e736665728764470075011165adbe01009c63380004b02a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d017605697373756587644700750112655ebe01009c63380004d22a000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662be0076066465706c6f798764b00075086465706c6f7965646a52c354c37d78cb640700c3620600757500760087640800750062050051c364070000627d00034f6e655452c1c6046e616d657c6a52c354c37b7bc4034f4e455452c1c60673796d626f6c7c6a52c354c37b7bc4585652c1c608646563696d616c737c6a52c354c37b7bc401005652c1c60d6d757461626c65537570706c797c6a52c354c37b7bc4515352c1c6086465706c6f7965647c6a52c354c37b7bc45162050075f06201097601009c64f8087568049a1f194a6804bab953f27602d1009c6486057501006a52c30100c37cc37568049a1f194a6804c6c5088668044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3537bc475756a0100c30100c353c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3537bc475756a0100c30100c353c301006662130076529c640800757562080075756267ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3547bc475756a0100c30100c354c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3547bc475756a0100c30100c354c301006662130076529c640800757562080075756267ff779b640700f0620f0401006a52c30100c37cc376046e616d6587644600755365b9bb01009c63380004472c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b803760673796d626f6c876446007554656abb01009c63380004692c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666269037608646563696d616c738764460075556519bb01009c633800048b2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066621803760b746f74616c537570706c7987644600755665c5ba01009c63380004ad2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c402760962616c616e63654f668764460075576573ba01009c63380004cf2c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666272027610617070726f7665645472616e73666572876446007558651aba01009c63380004f12c000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662190276087472616e7366657287644600755965c9b901009c63380004132d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662c8017613617070726f766553656e645472616e7366657287644600755c656db901009c63380004352d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066626c017616617070726f7665526563656976655472616e7366657287644600755d650eb901009c63380004572d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f062070000010066620d0176127265766f6b6553656e645472616e7366657287644600755e65b3b801009c63380004792d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662b20076146f6e5265766f6b6553656e645472616e73666572876447007501116555b801009c633800049b2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662540076056973737565876447007501126506b801009c63380004bd2d000005747261636552c1680405079216756a52c352c368041d59e11987680475c893e301009c9b640700f06207000001006662050075f0625d0376529c6455037568049a1f194a6804c6c50886c77c7c7c68044eaada587c78680442298fe064c300787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642b0078787c680484848b747dcb6411007dc37b68049304570f93c4620c007b68049304570fc47562060075757562aeff7576519c643e00756a0100c30100c3557bc475756a0100c30100c355c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3557bc475756a0100c30100c355c301006662130076529c640800757562080075756239ff7768049a1f194a6804301111107c7c68044eaada587c78680442298fe064c400787c7c6804ab5b018e7c7d7d7868041f846c63680487c3d26487642c0078787c680484848b747dcb6411007dc37b68049304570f94c4620d007b68049304570f8fc47562060075757562adff7576519c643e00756a0100c30100c3567bc475756a0100c30100c356c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3567bc475756a0100c30100c356c301006662130076529c640800757562080075756238ff77680424ef3dbf007c7d78917c680442298fe09a64b3007576766804ab5b018e7c6804813425bc20e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6087917c0100a09a62b9ff7576519c643e00756a0100c30100c3577bc475756a0100c30100c357c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3577bc475756a0100c30100c357c301006662130076529c640800757562080075756244ff7768049a1f194a68043011111068044eaada58007c7d78917c680442298fe09a64900075766804ab5b018e68041f846c63680487c3d2648762dcff7576519c643e00756a0100c30100c3587bc475756a0100c30100c358c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666236007601009c641f00756a0100c30100c3587bc475756a0100c30100c358c301006662130076529c640800757562080075756267ff779b64070000620f0001006a52c30100c37cc375f062050075f062050075f06a52c3767655c37c54c36804c3b044617d8764070075622000680475c893e301109c6413000068048418d60d680452a141f5620400757658c3680475c893e301109c64a800680424ef3dbf76680442298fe0649400766804ab5b018e786804813425bc68048418d60d6804ef7cef5d7562dbff7576519c643d00756a0100c30100c3597bc4756a0100c30100c359c3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c3597bc4756a0100c30100c359c301006662130076529c640800757562080075756268ff75620400757657c3680475c893e301109c64a700680424ef3dbf76680442298fe0649300766804ab5b018e786804813425bc68048418d60d680452a141f562dcff7576519c643d00756a0100c30100c35a7bc4756a0100c30100c35ac3756a52c352c368041d59e11987680475c893e301009c9b640700f0620700000100666235007601009c641e00756a0100c30100c35a7bc4756a0100c30100c35ac301006662130076529c640800757562080075756269ff7562040075756c75", - "storage": true, - }, - "diagnostics": Array [], - "sourceMap": Object {}, -} -`; diff --git a/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts index 75f642d195..bd7a6d67ae 100644 --- a/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts +++ b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts @@ -1,60 +1,178 @@ +import { args } from '@neo-one/client-core'; import fs from 'fs-extra'; +import JSZip from 'jszip'; import path from 'path'; -const testCompileProject = async (project: string) => { - const execAsync = one.createExec(project); - await execAsync('compile'); +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]) => acc.concat(` --${flag} ${value}`), 'compile'); + await one.createExec(project)(command); + const { contracts: { outDir }, } = await one.getProjectConfig(project); expect(outDir).toBeDefined(); - const abiFiles = await fs.readdir(outDir); - const abiJsons = await Promise.all(abiFiles.map(async (file) => fs.readJSON(path.join(outDir, file)))); + const getTmpPath = (file: string) => path.resolve(outDir, file); - abiJsons.forEach((abi) => { - expect(abi).toMatchSnapshot(); - }); + 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 - exchange', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('exchange'); - }); -}); -describe('compile - ico', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico'); +describe('Compile ICO', () => { + test('compile -- no flags', async () => { + await testCompileProject('ico', createOptions()); }); -}); -describe('compile - ico-angular', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-angular'); + + test('compile -- avm flag', async () => { + await testCompileProject('ico', createOptions({ avm: true })); }); -}); -describe('compile - ico-angularJs', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-angularJs'); + + test('compile -- json & avm flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, json: true })); }); -}); -describe('compile - ico-Js', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-Js'); + + test('compile -- debug flag', async () => { + await testCompileProject('ico', createOptions({ debug: true })); }); -}); -describe('compile - ico-neotracker', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-neotracker'); + + test('compile -- avm & debug flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, debug: true })); }); -}); -describe('compile - ico-vue', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-vue'); + + test('compile -- avm && debug && opcodes flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, debug: true, opcodes: true })); }); -}); -describe('compile - ico-vueJs', () => { - it('compiles the contracts and outputs the ABI file', async () => { - await testCompileProject('ico-vueJs'); + + test('compile -- json & avm & debug', async () => { + await testCompileProject('ico', createOptions({ json: true, avm: true, debug: true })); }); }); diff --git a/packages/neo-one-cli/src/cmd/compile.ts b/packages/neo-one-cli/src/cmd/compile.ts index fa80a3000d..777afb14c0 100644 --- a/packages/neo-one-cli/src/cmd/compile.ts +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -8,15 +8,33 @@ export const describe = 'Compiles a project and outputs code to a local director export const builder = (yargsBuilder: typeof yargs) => yargsBuilder .string('outDir') - .describe('outDir', 'output code directory') + .describe('outDir', 'Output code directory') .string('path') - .describe('path', 'contract directory'); + .describe('path', 'Contract directory') + .boolean('json') + .describe('json', 'Output the contract with the JSON format') + .default('json', true) + .boolean('avm') + .describe('avm', 'Output the contract with the AVM format') + .default('avm', false) + .boolean('debug') + .describe('debug', 'Output additional debug information') + .default('debug', false) + .boolean('opcodes') + .describe('opcodes', 'Output the AVM in a human readable format for debugging, requires --debug') + .default('opcodes', false); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => { await createTasks( argv.path ? argv.path : config.contracts.path, argv.outDir ? argv.outDir : config.contracts.outDir, + { + json: argv.json ? argv.json : !argv.avm, + avm: argv.avm, + debug: argv.debug, + opcodes: argv.debug ? argv.opcodes : false, + }, ).run(); }); }; diff --git a/packages/neo-one-cli/src/compile/compileContract.ts b/packages/neo-one-cli/src/compile/compileContract.ts index 5f613c9fb8..8104bc81ab 100644 --- a/packages/neo-one-cli/src/compile/compileContract.ts +++ b/packages/neo-one-cli/src/compile/compileContract.ts @@ -17,6 +17,7 @@ export const compileContract = async ( const address = scriptHashToAddress( common.uInt160ToString(crypto.toScriptHash(Buffer.from(contract.contract.script, 'hex'))), ); + const sourceMap = await contract.sourceMap; const nextSourceMaps = { ...sourceMaps, diff --git a/packages/neo-one-cli/src/compile/createTasks.ts b/packages/neo-one-cli/src/compile/createTasks.ts index 84383b96c5..fb91d24f35 100644 --- a/packages/neo-one-cli/src/compile/createTasks.ts +++ b/packages/neo-one-cli/src/compile/createTasks.ts @@ -3,9 +3,9 @@ import { Contracts } from '@neo-one/smart-contract-compiler'; import Listr from 'listr'; import { compileContract } from './compileContract'; import { findContracts } from './findContracts'; -import { writeContract } from './writeContract'; +import { CompileWriteOptions, writeContract } from './writeContract'; -export const createTasks = (path: string, outDir: string) => +export const createTasks = (path: string, outDir: string, options: CompileWriteOptions) => new Listr([ { title: 'Find Contracts', @@ -33,7 +33,7 @@ export const createTasks = (path: string, outDir: string) => innerCtx.sourceMaps, ); - await writeContract(result, outDir); + await writeContract(contract.filePath, result, outDir, options); innerCtx.linked = linked; innerCtx.sourceMaps = sourceMaps; 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..19cb6856fc --- /dev/null +++ b/packages/neo-one-cli/src/compile/interop.ts @@ -0,0 +1,102 @@ +import { ABI } 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: ABI, metadata: NEOONEContractMetadata, script: Buffer) => ({ + hash: common.uInt160ToHex(crypto.toScriptHash(script)), + entrypoint: '@Jmp', + functions: [ + jmpABI, + dispatcherABI, + ...abi.functions.map((func) => ({ + name: func.name, + parameters: func.parameters + ? func.parameters.map(({ name, type }) => ({ + name, + type, + })) + : [], + returntype: func.returnType.type, + })), + ], + events: abi.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 index 66b8c6702f..26a45f39b6 100644 --- a/packages/neo-one-cli/src/compile/writeContract.ts +++ b/packages/neo-one-cli/src/compile/writeContract.ts @@ -1,12 +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 const writeContract = async (contract: CompileContractResult, outDir: string) => { +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, `${contract.contract.name}.contract.json`); + 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(); + }), + ); + } - const contractJSON = JSON.stringify(contract, undefined, 2); + if (jsonFlag) { + await fs.writeFile(outputPath.replace('.contract.json', '.debug.json'), JSON.stringify(debugJSON, undefined, 2)); + } - return fs.writeFile(outputPath, contractJSON); + 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-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/getSmartContractInfo.ts b/packages/neo-one-smart-contract-compiler/src/compile/getSmartContractInfo.ts index a7261c70ab..ee9b98068e 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/getSmartContractInfo.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/getSmartContractInfo.ts @@ -5,7 +5,15 @@ import { OmitStrict, utils } from '@neo-one/utils'; import ts from 'typescript'; import { DEFAULT_CONTRACT_PROPERTIES } from '../constants'; import { Context } from '../Context'; -import { ContractInfo, getABI, getAllPropInfos, getContractInfo, getContractProperties } from '../contract'; +import { + ContractInfo, + DebugInfo, + getABI, + getAllPropInfos, + getContractInfo, + getContractProperties, + getDebugInfo, +} from '../contract'; import { DiagnosticCode } from '../DiagnosticCode'; import { DiagnosticMessage } from '../DiagnosticMessage'; import { @@ -120,6 +128,7 @@ const addContractInfo = (context: Context, contractInfo: ContractInfo) => { 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/sb/BaseScriptBuilder.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts index 05795dd499..63a6ec1b6c 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 @@ -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 }, 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..025fe23dd5 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'; @@ -45,4 +46,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..1343c9b634 100644 --- a/packages/neo-one-smart-contract-compiler/src/compileContract.ts +++ b/packages/neo-one-smart-contract-compiler/src/compileContract.ts @@ -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'; @@ -20,6 +21,7 @@ export interface CompileContractResult { 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 { abi, sourceMap: finalSourceMap, contract, debugInfo } = compile({ sourceFile: tsUtils.file.getSourceFileOrThrow(context.program, filePath), context, linked, @@ -51,5 +53,6 @@ export const compileContract = ({ sourceMap: finalSourceMap, abi, 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'; From f728dd0194c9f94d0a7e46a29d13210cf01b1fc9 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 22 Jul 2020 14:40:11 -0700 Subject: [PATCH 076/141] fix(cli): migration.ts fix (#2112) --- .../cli/migration-ts-fix_2020-07-22-20-43.json | 11 +++++++++++ packages/neo-one-cli/src/common/load.ts | 12 +----------- 2 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json diff --git a/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json b/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json new file mode 100644 index 0000000000..c9bd2297fe --- /dev/null +++ b/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "patch migration.ts file transpiling", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file 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; From ebf279cf5a806aab568ddf52c899fc1af2a70295 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 22 Jul 2020 15:38:24 -0700 Subject: [PATCH 077/141] fix(ci): update ci cache (#2116) --- .circleci/config.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 701838fbab..adc3134399 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,27 +1,27 @@ aliases: - &restore-yarn-cache-10 keys: - - v9-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + - v10-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v9-yarn-10-{{ .Branch }}- + - v10-yarn-10-{{ .Branch }}- - &save-yarn-cache-10 paths: - common/temp/node_modules - common/temp/yarn-cache - key: v9-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + key: v10-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &restore-yarn-cache-12 keys: - - v9-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + - v10-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v9-yarn-12-{{ .Branch }}- + - v10-yarn-12-{{ .Branch }}- - &save-yarn-cache-12 paths: - common/temp/node_modules - common/temp/yarn-cache - key: v9-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} + key: v10-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &filter-ignore-bors-tmp branches: From b5ed92e3a13b5920306aa7abb30b86a71e3f9c14 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 23 Jul 2020 14:28:44 -0700 Subject: [PATCH 078/141] feat(docs): add docs on contributing (#2117) --- .../release_2020-07-23-21-27.json | 11 ++ .../cli-common/release_2020-07-23-21-27.json | 11 ++ .../cli/release_2020-07-23-21-27.json | 11 ++ .../src/configuration.ts | 30 +++-- .../neo-one-cli-common/src/configuration.ts | 6 +- packages/neo-one-cli/src/cmd/compile.ts | 34 +++--- packages/neo-one-cli/src/cmd/console.ts | 4 +- .../neo-one-cli/src/cmd/stop/neotracker.ts | 2 +- .../2020-07-23-neo-one-2-7-announcement.md | 67 ++++++++++++ .../docs/0-installation/2-cli.md | 103 ++++++++++++++++++ .../{2-playground.md => 3-playground.md} | 0 .../4-contributing/0-how-to-contribute.md | 19 ++++ .../2-smart-contract-compiler.md | 58 +++++++++- 13 files changed, 329 insertions(+), 27 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json create mode 100644 common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json create mode 100644 common/changes/@neo-one/cli/release_2020-07-23-21-27.json create mode 100644 packages/neo-one-website/blog/2020-07-23-neo-one-2-7-announcement.md create mode 100644 packages/neo-one-website/docs/0-installation/2-cli.md rename packages/neo-one-website/docs/0-installation/{2-playground.md => 3-playground.md} (100%) diff --git a/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json new file mode 100644 index 0000000000..19a6b98e32 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "Update CLI compile options.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json new file mode 100644 index 0000000000..e911433ed1 --- /dev/null +++ b/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common", + "comment": "Update CLI compile options.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli/release_2020-07-23-21-27.json new file mode 100644 index 0000000000..7a1bd89368 --- /dev/null +++ b/common/changes/@neo-one/cli/release_2020-07-23-21-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "Update CLI compile options.", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index a58b3116d5..94b394a2e1 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -17,8 +17,12 @@ const configurationDefaults = { path: nodePath.join('neo-one', 'migration.js'), }, contracts: { - path: nodePath.join('neo-one', 'contracts'), outDir: nodePath.join('neo-one', 'compiled'), + path: nodePath.join('neo-one', 'contracts'), + json: true, + avm: false, + debug: false, + opcodes: false, }, codegen: { path: nodePath.join('src', 'neo-one'), @@ -91,11 +95,15 @@ const configurationSchema = { }, contracts: { type: 'object', - allRequired: true, + allRequired: false, additionalProperties: false, properties: { - path: { type: 'string' }, outDir: { type: 'string' }, + path: { type: 'string' }, + json: { type: 'boolean' }, + avm: { type: 'boolean' }, + debug: { type: 'boolean' }, + opcodes: { type: 'boolean' }, }, }, codegen: { @@ -157,8 +165,8 @@ const relativizePaths = (config: Configuration) => ({ }, contracts: { ...config.contracts, - path: nodePath.relative(process.cwd(), config.contracts.path), outDir: nodePath.relative(process.cwd(), config.contracts.outDir), + path: nodePath.relative(process.cwd(), config.contracts.path), }, codegen: { ...config.codegen, @@ -181,10 +189,18 @@ const createDefaultConfiguration = (configIn: Configuration, importDefaultNetwor ${exportConfig} { contracts: { - // NEO•ONE will look for smart contracts in this directory. - path: '${config.contracts.path}', // 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: ${config.contracts.json}, + // Set this to true if you want the compile command to output AVM. + // avm: ${config.contracts.avm}, + // Set this to true if you want the compile command to output additional debug information. + // debug: ${config.contracts.debug}, + // 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: ${config.contracts.opcodes}, }, artifacts: { // NEO•ONE will store build and deployment artifacts that should be checked in to vcs in this directory. @@ -297,8 +313,8 @@ const validateConfig = async (rootDir: string, configIn: any): Promise .describe('path', 'Contract directory') .boolean('json') .describe('json', 'Output the contract with the JSON format') - .default('json', true) .boolean('avm') .describe('avm', 'Output the contract with the AVM format') - .default('avm', false) .boolean('debug') .describe('debug', 'Output additional debug information') - .default('debug', false) .boolean('opcodes') - .describe('opcodes', 'Output the AVM in a human readable format for debugging, requires --debug') - .default('opcodes', false); + .describe('opcodes', 'Output the AVM in a human readable format for debugging, requires --debug'); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => { - await createTasks( - argv.path ? argv.path : config.contracts.path, - argv.outDir ? argv.outDir : config.contracts.outDir, - { - json: argv.json ? argv.json : !argv.avm, - avm: argv.avm, - debug: argv.debug, - opcodes: argv.debug ? argv.opcodes : false, - }, - ).run(); + 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/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-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..0f396eda2b --- /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 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 install @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 install @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/configuration-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/docs/0-installation/2-cli.md b/packages/neo-one-website/docs/0-installation/2-cli.md new file mode 100644 index 0000000000..27742281f9 --- /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/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/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. From e8b0c8052cfff3aa5fe652741ac7d9ec77a27735 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 23 Jul 2020 14:29:29 -0700 Subject: [PATCH 079/141] fix(version): bump version before release for future clarity (#2118) --- .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ .../versioning-upgrade_2020-07-23-20-14.json | 11 ++ common/config/rush/version-policies.json | 110 +++------------- packages/neo-one-build-tests/package.json | 2 +- packages/neo-one-cli-common-node/package.json | 2 +- packages/neo-one-cli-common/package.json | 4 +- packages/neo-one-cli/package.json | 30 ++--- packages/neo-one-client-common/package.json | 2 +- packages/neo-one-client-core/package.json | 4 +- .../neo-one-client-full-common/package.json | 4 +- .../neo-one-client-full-core/package.json | 10 +- packages/neo-one-client-full/package.json | 4 +- packages/neo-one-client-switch/package.json | 6 +- packages/neo-one-client/package.json | 2 +- .../package.json | 6 +- packages/neo-one-developer-tools/package.json | 2 +- packages/neo-one-editor-server/package.json | 8 +- packages/neo-one-editor/package.json | 10 +- packages/neo-one-http-context/package.json | 8 +- packages/neo-one-http/package.json | 2 +- packages/neo-one-local-browser/package.json | 6 +- packages/neo-one-logger-config/package.json | 2 +- packages/neo-one-logger/package.json | 4 +- packages/neo-one-node-bin/package.json | 12 +- packages/neo-one-node-blockchain/package.json | 10 +- packages/neo-one-node-browser/package.json | 16 +-- packages/neo-one-node-consensus/package.json | 8 +- packages/neo-one-node-core/package.json | 6 +- packages/neo-one-node-http-rpc/package.json | 14 +-- .../neo-one-node-neo-settings/package.json | 6 +- packages/neo-one-node-network/package.json | 10 +- packages/neo-one-node-offline/package.json | 8 +- packages/neo-one-node-protocol/package.json | 12 +- .../neo-one-node-rpc-handler/package.json | 10 +- .../neo-one-node-storage-cache/package.json | 8 +- .../neo-one-node-storage-common/package.json | 6 +- .../neo-one-node-storage-levelup/package.json | 8 +- packages/neo-one-node-tools/package.json | 4 +- packages/neo-one-node-vm/package.json | 8 +- packages/neo-one-node/package.json | 24 ++-- packages/neo-one-react-common/package.json | 4 +- packages/neo-one-react-core/package.json | 2 +- packages/neo-one-react/package.json | 2 +- .../package.json | 4 +- .../package.json | 8 +- .../package.json | 26 ++-- .../neo-one-smart-contract-lib/package.json | 4 +- .../package.json | 4 +- .../package.json | 10 +- .../neo-one-smart-contract-test/package.json | 16 +-- .../package.json | 6 +- packages/neo-one-smart-contract/package.json | 2 +- packages/neo-one-suite/package.json | 10 +- packages/neo-one-ts-utils/package.json | 2 +- .../package.json | 8 +- packages/neo-one-utils-node/package.json | 4 +- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 6 +- rush.json | 117 ++++++++++++------ 103 files changed, 808 insertions(+), 333 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json create mode 100644 common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json diff --git a/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..c07390dffe --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/cli-common-node" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..aa4cffda39 --- /dev/null +++ b/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/cli-common" + } + ], + "packageName": "@neo-one/cli-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..9558d877ac --- /dev/null +++ b/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..87fd4b97cb --- /dev/null +++ b/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..ca087d388d --- /dev/null +++ b/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..53d7d7d460 --- /dev/null +++ b/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-full-common" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..d03871e85f --- /dev/null +++ b/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-full-core" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..6256f5fc66 --- /dev/null +++ b/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-full" + } + ], + "packageName": "@neo-one/client-full", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..ea07b9e08c --- /dev/null +++ b/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..259a5ba49b --- /dev/null +++ b/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/client" + } + ], + "packageName": "@neo-one/client", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..dae800059f --- /dev/null +++ b/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/developer-tools" + } + ], + "packageName": "@neo-one/developer-tools", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..4c90fc5dec --- /dev/null +++ b/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/http-context" + } + ], + "packageName": "@neo-one/http-context", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..07c37b02e5 --- /dev/null +++ b/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/http" + } + ], + "packageName": "@neo-one/http", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..32342ccba4 --- /dev/null +++ b/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/logger-config" + } + ], + "packageName": "@neo-one/logger-config", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..2285fc59d8 --- /dev/null +++ b/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/logger" + } + ], + "packageName": "@neo-one/logger", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..212ea8b5a6 --- /dev/null +++ b/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-bin" + } + ], + "packageName": "@neo-one/node-bin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..b32a76c1e6 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..f61de6b703 --- /dev/null +++ b/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-consensus" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..53105e76a2 --- /dev/null +++ b/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..79a83989b4 --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-http-rpc" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..27f997ffc9 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-neo-settings" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..bd65097d2c --- /dev/null +++ b/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-network" + } + ], + "packageName": "@neo-one/node-network", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..b437105694 --- /dev/null +++ b/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-offline" + } + ], + "packageName": "@neo-one/node-offline", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..81f5037962 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..745ac95a00 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..b85d9bc0a1 --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-storage-cache" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..f7a5da0258 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-storage-common" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..0c61f62e05 --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-storage-levelup" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..0748e65ef4 --- /dev/null +++ b/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node-vm" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..0e6f2567ed --- /dev/null +++ b/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..a0045be848 --- /dev/null +++ b/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/react-common" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..3e91792097 --- /dev/null +++ b/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/react-core" + } + ], + "packageName": "@neo-one/react-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..445390a9e0 --- /dev/null +++ b/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/react" + } + ], + "packageName": "@neo-one/react", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..2e3fe4f54b --- /dev/null +++ b/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-codegen" + } + ], + "packageName": "@neo-one/smart-contract-codegen", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..e08983c91d --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-compiler-node" + } + ], + "packageName": "@neo-one/smart-contract-compiler-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..1a68c158fb --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-compiler" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..ca90c7ea52 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-lib" + } + ], + "packageName": "@neo-one/smart-contract-lib", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..97fdc7cf76 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-test-common" + } + ], + "packageName": "@neo-one/smart-contract-test-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..568eaf4fc5 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-test" + } + ], + "packageName": "@neo-one/smart-contract-test", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..33d6b139fc --- /dev/null +++ b/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract-typescript-plugin" + } + ], + "packageName": "@neo-one/smart-contract-typescript-plugin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..557dff5296 --- /dev/null +++ b/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/smart-contract" + } + ], + "packageName": "@neo-one/smart-contract", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..3fd3706a55 --- /dev/null +++ b/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/suite" + } + ], + "packageName": "@neo-one/suite", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..eb52111415 --- /dev/null +++ b/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/ts-utils" + } + ], + "packageName": "@neo-one/ts-utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..e8b3f45447 --- /dev/null +++ b/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/typescript-concatenator" + } + ], + "packageName": "@neo-one/typescript-concatenator", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..3b9e59a5a8 --- /dev/null +++ b/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/utils-node" + } + ], + "packageName": "@neo-one/utils-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json new file mode 100644 index 0000000000..fc2ca6c978 --- /dev/null +++ b/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "bump package version for future release clarity", + "type": "none", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 149eb11937..86e9406aa2 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1,90 +1,20 @@ -/** - * This is configuration file is used for advanced publishing configurations with Rush. - * For full documentation, please see https://rushjs.io - */ - - /** - * A list of version policy definitions. A "version policy" is a custom package versioning - * strategy that affets "rush change", "rush version", and "rush publish". The strategy applies - * to a set of projects that are specified using the "versionPolicyName" field in rush.json. - */ -[ - // { - // /** - // * (Required) Indicates the kind of version policy being defined ("lockStepVersion" or "individualVersion"). - // * - // * The "lockStepVersion" mode specifies that the projects will use "lock-step versioning". This - // * strategy is appropriate for a set of packages that act as selectable components of a - // * unified product. The entire set of packages are always published together, and always share - // * the same NPM version number. When the packages depend on other packages in the set, the - // * SemVer range is usually restricted to a single version. - // */ - // "definitionName": "lockStepVersion", - // - // /** - // * (Required) The name that will be used for the "versionPolicyName" field in rush.json. - // * This name is also used command-line parameters such as "--version-policy" - // * and "--to-version-policy". - // */ - // "policyName": "MyBigFramework", - // - // /** - // * (Required) The current version. All packages belonging to the set should have this version - // * in the current branch. When bumping versions, Rush uses this to determine the next version. - // * (The "version" field in package.json is NOT considered.) - // */ - // "version": "1.0.0", - // - // /** - // * (Required) The type of bump that will be performed when publishing the next release. - // * When creating a release branch in Git, this field should be updated according to the - // * type of release. - // * - // * Valid values are: "prerelease", "release", "minor", "patch", "major" - // */ - // "nextBump": "prerelease", - // - // /** - // * (Optional) If specified, all packages in the set share a common CHANGELOG.md file. - // * This file is stored with the specified "main" project, which must be a member of the set. - // * - // * If this field is omitted, then a separate CHANGELOG.md file will be maintained for each - // * package in the set. - // */ - // "mainProject": "my-app" - // }, - // - // { - // /** - // * (Required) Indicates the kind of version policy being defined ("lockStepVersion" or "individualVersion"). - // * - // * The "individualVersion" mode specifies that the projects will use "individual versioning". - // * This is the typical NPM model where each package has an independent version number - // * and CHANGELOG.md file. Although a single CI definition is responsible for publishing the - // * packages, they otherwise don't have any special relationship. The version bumping will - // * depend on how developers answer the "rush change" questions for each package that - // * is changed. - // */ - // "definitionName": "individualVersion", - // - // "policyName": "MyRandomLibraries", - // - // /** - // * (Optional) This can be used to enforce that all packages in the set must share a common - // * major version number, e.g. because they are from the same major release branch. - // * It can also be used to discourage people from accidentally making "MAJOR" SemVer changes - // * inappropriately. The minor/patch version parts will be bumped independently according - // * to the types of changes made to each project, according to the "rush change" command. - // */ - // "lockedMajor": 3, - // - // /** - // * (Optional) When publishing is managed by Rush, by default the "rush change" command will - // * request changes for any projects that are modified by a pull request. These change entries - // * will produce a CHANGELOG.md file. If you author your CHANGELOG.md manually or announce updates - // * in some other way, set "exemptFromRushChange" to true to tell "rush change" to ignore the projects - // * belonging to this version policy. - // */ - // "exemptFromRushChange": false - // } -] +[ + { + "definitionName": "lockStepVersion", + "policyName": "CoreReleasePolicy", + "version": "2.6.0", + "nextBump": "minor" + }, + { + "definitionName": "lockStepVersion", + "policyName": "NodeReleasePolicy", + "version": "2.6.0", + "nextBump": "minor" + }, + { + "definitionName": "lockStepVersion", + "policyName": "WebReleasePolicy", + "version": "2.6.0", + "nextBump": "minor" + } +] diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index 0fa53f80a6..cd5a6ef8b4 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@babel/preset-env": "^7.6.3", "@neo-one/build-tools": "^1.0.0", - "@neo-one/logger": "^2.5.0", + "@neo-one/logger": "^2.6.0", "app-root-dir": "^1.0.2", "babel-jest": "^24.9.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 7d6a860412..4f60f3e555 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -15,7 +15,7 @@ "dependencies": { "@neo-one/cli-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.5.0", + "@neo-one/client-full-core": "^2.6.0", "@types/lodash": "^4.14.138", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index 076c1a0a9c..8a1adf388d 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -15,8 +15,8 @@ "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-full-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 3968c6dc80..d4c971296c 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -22,19 +22,19 @@ "@neo-one/client": "^2.6.0", "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full": "^2.5.0", - "@neo-one/client-full-core": "^2.5.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/logger-config": "^2.5.0", - "@neo-one/node": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-neo-settings": "^2.5.0", - "@neo-one/smart-contract-codegen": "^2.5.0", - "@neo-one/smart-contract-compiler": "^2.5.0", - "@neo-one/smart-contract-compiler-node": "^2.5.0", - "@neo-one/utils": "^2.5.0", - "@neo-one/utils-node": "^2.5.0", + "@neo-one/client-full": "^2.6.0", + "@neo-one/client-full-core": "^2.6.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/logger-config": "^2.6.0", + "@neo-one/node": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-neo-settings": "^2.6.0", + "@neo-one/smart-contract-codegen": "^2.6.0", + "@neo-one/smart-contract-compiler": "^2.6.0", + "@neo-one/smart-contract-compiler-node": "^2.6.0", + "@neo-one/utils": "^2.6.0", + "@neo-one/utils-node": "^2.6.0", "@types/listr": "^0.14.2", "@types/yargs": "^13.0.3", "bignumber.js": "^9.0.0", @@ -58,8 +58,8 @@ "devDependencies": { "@angular/core": "^8.2.7", "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract": "^2.5.0", - "@neo-one/smart-contract-test": "^2.5.0", + "@neo-one/smart-contract": "^2.6.0", + "@neo-one/smart-contract-test": "^2.6.0", "@neotracker/core": "1.4.1", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 59cd4ec7e7..a6d5ab1208 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/utils": "^2.6.0", "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 776ac3f694..9bcafbf42e 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index 4be510ed98..0cc472dc42 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE full client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/utils": "^2.6.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index d680168433..7143354334 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client-full core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -15,16 +15,16 @@ "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", + "@neo-one/client-full-common": "^2.6.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/utils": "^2.6.0", "bignumber.js": "^9.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-core": "^2.5.0", + "@neo-one/node-core": "^2.6.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index 97f925590a..b583f009d2 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client extended API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/client": "^2.6.0", - "@neo-one/client-full-core": "^2.5.0" + "@neo-one/client-full-core": "^2.6.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 8567fa2cc2..2696fe2030 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-switch", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE client library for browser/node differences.", "main": "./dist/cjs/index", "browser": "./dist/cjs/index.browser", @@ -17,8 +17,8 @@ "@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", + "@neo-one/node-vm": "^2.6.0", + "@neo-one/utils": "^2.6.0", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", "source-map": "^0.7.3", diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index 78d0e9b922..579b9180a4 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -15,7 +15,7 @@ "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.6.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index a956680867..6d8df01c6b 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -16,9 +16,9 @@ "@emotion/styled-base": "^10.0.24", "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/react": "^2.5.0", - "@neo-one/react-common": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/react": "^2.6.0", + "@neo-one/react-common": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@reactivex/ix-esnext-esm": "^2.5.3", "@render-props/size-observer": "^0.1.18", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index d51e02f6be..27eff60370 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/developer-tools", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE developer tools.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index 1c028880ef..c60ed15713 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/http": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/utils": "^2.5.0", - "@neo-one/utils-node": "^2.5.0", + "@neo-one/http": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/utils": "^2.6.0", + "@neo-one/utils-node": "^2.6.0", "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 25588cf629..e16f6a97d2 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -29,16 +29,16 @@ "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", "@neo-one/client": "^2.6.0", - "@neo-one/client-switch": "^2.5.0", + "@neo-one/client-switch": "^2.6.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.5.0", - "@neo-one/react-common": "^2.5.0", - "@neo-one/smart-contract-compiler": "^2.5.0", + "@neo-one/react": "^2.6.0", + "@neo-one/react-common": "^2.6.0", + "@neo-one/smart-contract-compiler": "^2.6.0", "@neo-one/smart-contract-test-browser": "^2.3.1", - "@neo-one/utils": "^2.5.0", + "@neo-one/utils": "^2.6.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index c3dd8c1375..9e9097e21e 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http-context", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE http context utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-http/package.json b/packages/neo-one-http/package.json index 085e5c8010..495c4a37ed 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE http utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 66336849f2..80ecd648e3 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -15,9 +15,9 @@ "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", "@neo-one/node-browser": "^2.3.0", - "@neo-one/smart-contract-codegen": "^2.5.0", - "@neo-one/smart-contract-compiler": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/smart-contract-codegen": "^2.6.0", + "@neo-one/smart-contract-compiler": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "lodash": "^4.17.15", diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index 49334ef76e..60abf7a99a 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger-config", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE logging utility config", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index bc33b7688e..c75c25f381 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE logging utility", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger-config": "^2.5.0", + "@neo-one/logger-config": "^2.6.0", "@types/pino": "^5.8.9", "pino": "^5.12.6", "pino-pretty": "^3.2.1", diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index fd6be96d0a..1e67dfc146 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-bin", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO executable full node.", "bin": { "neo-one-node": "bin/neo-one-node.js" @@ -14,11 +14,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger": "^2.5.0", - "@neo-one/node": "^2.5.0", - "@neo-one/node-neo-settings": "^2.5.0", - "@neo-one/utils": "^2.5.0", - "@neo-one/utils-node": "^2.5.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node": "^2.6.0", + "@neo-one/node-neo-settings": "^2.6.0", + "@neo-one/utils": "^2.6.0", + "@neo-one/utils-node": "^2.6.0", "@types/yargs": "^13.0.3", "env-paths": "^2.2.0", "execa": "^3.2.0", diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 48af4afeea..6a4ae5ed00 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-blockchain", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO blockchain implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,10 +14,10 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index c5f6d33915..76b83ccb3b 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -13,14 +13,14 @@ "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/node-blockchain": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-neo-settings": "^2.5.0", - "@neo-one/node-protocol": "^2.5.0", - "@neo-one/node-rpc-handler": "^2.5.0", - "@neo-one/node-storage-levelup": "^2.5.0", - "@neo-one/node-vm": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node-blockchain": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-neo-settings": "^2.6.0", + "@neo-one/node-protocol": "^2.6.0", + "@neo-one/node-rpc-handler": "^2.6.0", + "@neo-one/node-storage-levelup": "^2.6.0", + "@neo-one/node-vm": "^2.6.0", + "@neo-one/utils": "^2.6.0", "core-js": "^3.2.1", "level-js": "^5.0.0", "levelup": "^4.1.0", diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index 1e2a12949b..57b2343b13 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-consensus", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,9 +14,9 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index 805577ec07..530d94aae9 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-core", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE core node types.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/client-full-common": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-full-common": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index f268ab328b..c646c37836 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE RPC server.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,12 +14,12 @@ "sideEffects": false, "dependencies": { "@neo-one/cli-common-node": "^2.6.0", - "@neo-one/http": "^2.5.0", - "@neo-one/http-context": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-rpc-handler": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/http": "^2.6.0", + "@neo-one/http-context": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-rpc-handler": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/koa": "^2.0.49", "@types/koa-compose": "^3.2.4", "cross-fetch": "^3.0.4", diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index c47139e0dd..24220cad30 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/bn.js": "^4.11.5", "@types/lodash": "^4.14.138", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index b8c7bb7794..92c8378a48 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-network", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO network protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index 25280bc542..d8676e4ae1 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-offline", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index 7b90eaf3db..e4b9ef6e07 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-protocol", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO node and consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,11 +14,11 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-consensus": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-consensus": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/bloom-filter": "^0.2.0", "@types/bn.js": "^4.11.5", "@types/ip-address": "^5.8.2", diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index 9da120a0a9..cba3535413 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE RPC handler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,10 +14,10 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 145247b051..64d79c1563 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE node storage cache.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,9 +14,9 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-storage-common": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-storage-common": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/lru-cache": "^5.1.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index d4870580c3..b4c6481184 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE node storage common.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 1d7e9a7e39..d9b65470dd 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE levelup node storage.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,9 +14,9 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-storage-common": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-storage-common": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/levelup": "^3.1.1", "levelup": "^4.1.0", "rxjs": "^6.5.3", diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 0e47aaca0c..3e68eeb070 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -15,8 +15,8 @@ "sideEffects": false, "dependencies": { "@google-cloud/storage": "^4.3.2", - "@neo-one/logger": "^2.5.0", - "@neo-one/utils-node": "^2.5.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/utils-node": "^2.6.0", "execa": "^3.2.0", "import-local": "^3.0.2", "rc": "^1.2.8", diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index cda32dc32d..407f705bf1 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-vm", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO VM.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,9 +14,9 @@ "sideEffects": false, "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", + "@neo-one/client-full-common": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 3ace19fdda..174403b00d 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE NEO full node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,17 +13,17 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/node-blockchain": "^2.5.0", - "@neo-one/node-core": "^2.5.0", - "@neo-one/node-http-rpc": "^2.5.0", - "@neo-one/node-network": "^2.5.0", - "@neo-one/node-offline": "^2.5.0", - "@neo-one/node-protocol": "^2.5.0", - "@neo-one/node-storage-levelup": "^2.5.0", - "@neo-one/node-vm": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/node-blockchain": "^2.6.0", + "@neo-one/node-core": "^2.6.0", + "@neo-one/node-http-rpc": "^2.6.0", + "@neo-one/node-network": "^2.6.0", + "@neo-one/node-offline": "^2.6.0", + "@neo-one/node-protocol": "^2.6.0", + "@neo-one/node-storage-levelup": "^2.6.0", + "@neo-one/node-vm": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/abstract-leveldown": "^5.0.1", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index df0275eb90..2ec45aa506 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -17,7 +17,7 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@neo-one/react-core": "^2.5.0", + "@neo-one/react-core": "^2.6.0", "@types/react": "^16.9.15", "popper.js": "^1.15.0", "react": "^16.12.0", diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index f50453d18a..8934b6ceef 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-core", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-react/package.json b/packages/neo-one-react/package.json index f664ebf7bc..63e444deea 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE React utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index a3182dd7dd..43d10a7245 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript smart contract codegen.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -16,7 +16,7 @@ "@neo-one/cli-common": "^2.6.0", "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/utils": "^2.6.0", "lodash": "^4.17.15", "prettier": "^2.0.1", "safe-stable-stringify": "^1.1.0", diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index d1b9c45b6e..05e0241790 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.5.0", - "@neo-one/smart-contract-lib": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/smart-contract": "^2.6.0", + "@neo-one/smart-contract-lib": "^2.6.0", + "@neo-one/utils": "^2.6.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index 38e3d33618..c4c237889e 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript smart contract compiler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -16,12 +16,12 @@ "@babel/code-frame": "^7.0.0", "@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-full-core": "^2.5.0", - "@neo-one/smart-contract": "^2.5.0", - "@neo-one/ts-utils": "^2.5.0", - "@neo-one/typescript-concatenator": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-full-common": "^2.6.0", + "@neo-one/client-full-core": "^2.6.0", + "@neo-one/smart-contract": "^2.6.0", + "@neo-one/ts-utils": "^2.6.0", + "@neo-one/typescript-concatenator": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "lodash": "^4.17.15", @@ -32,12 +32,12 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-switch": "^2.5.0", - "@neo-one/node-blockchain": "^2.5.0", - "@neo-one/node-neo-settings": "^2.5.0", - "@neo-one/node-storage-levelup": "^2.5.0", - "@neo-one/node-vm": "^2.5.0", - "@neo-one/smart-contract-compiler-node": "^2.5.0", + "@neo-one/client-switch": "^2.6.0", + "@neo-one/node-blockchain": "^2.6.0", + "@neo-one/node-neo-settings": "^2.6.0", + "@neo-one/node-storage-levelup": "^2.6.0", + "@neo-one/node-vm": "^2.6.0", + "@neo-one/smart-contract-compiler-node": "^2.6.0", "@types/app-root-dir": "^0.1.0", "@types/babel__code-frame": "^7.0.1", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 6afc82af53..9bc0943175 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript common smart contracts.", "main": "./src/index.ts", "smartContract": true, @@ -10,7 +10,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.5.0" + "@neo-one/smart-contract": "^2.6.0" }, "devDependencies": { "@neo-one/client-common": "^2.6.0", diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index e01fa0b4ea..c2f6409fcf 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -15,8 +15,8 @@ "@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.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/smart-contract-test-common": "^2.6.0", + "@neo-one/utils": "^2.6.0", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 67e870fbdd..af1747f8f1 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript smart contract test harness common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -16,10 +16,10 @@ "@neo-one/cli-common": "^2.6.0", "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.5.0", - "@neo-one/logger": "^2.5.0", - "@neo-one/smart-contract-compiler": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/client-full-core": "^2.6.0", + "@neo-one/logger": "^2.6.0", + "@neo-one/smart-contract-compiler": "^2.6.0", + "@neo-one/utils": "^2.6.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index e8c0143a9f..e539519180 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript smart contract test harness.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -15,19 +15,19 @@ "dependencies": { "@neo-one/client-common": "^2.6.0", "@neo-one/client-core": "^2.6.0", - "@neo-one/node": "^2.5.0", - "@neo-one/node-neo-settings": "^2.5.0", - "@neo-one/smart-contract-compiler-node": "^2.5.0", - "@neo-one/smart-contract-test-common": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/node": "^2.6.0", + "@neo-one/node-neo-settings": "^2.6.0", + "@neo-one/smart-contract-compiler-node": "^2.6.0", + "@neo-one/smart-contract-test-common": "^2.6.0", + "@neo-one/utils": "^2.6.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.5.0", - "@neo-one/smart-contract-lib": "^2.5.0", + "@neo-one/smart-contract": "^2.6.0", + "@neo-one/smart-contract-lib": "^2.6.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/memdown": "^3.0.0", diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index f04d7e2b35..1fb9adc09f 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript typescript plugin.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.5.0", - "@neo-one/smart-contract-compiler-node": "^2.5.0", + "@neo-one/smart-contract-compiler": "^2.6.0", + "@neo-one/smart-contract-compiler-node": "^2.6.0", "typescript": "3.9.5" }, "devDependencies": { diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index b840a4550f..09efaff5b9 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE smart contract apis.", "main": "./src/index.d.ts", "scripts": { diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json index 3976f5e9c6..8a0d7a5770 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/suite", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE core dependencies for easy installation", "scripts": { "build": "", @@ -12,10 +12,10 @@ "dependencies": { "@neo-one/cli": "^2.6.0", "@neo-one/client": "^2.6.0", - "@neo-one/smart-contract": "^2.5.0", - "@neo-one/smart-contract-lib": "^2.5.0", - "@neo-one/smart-contract-test": "^2.5.0", - "@neo-one/smart-contract-typescript-plugin": "^2.5.0" + "@neo-one/smart-contract": "^2.6.0", + "@neo-one/smart-contract-lib": "^2.6.0", + "@neo-one/smart-contract-test": "^2.6.0", + "@neo-one/smart-contract-typescript-plugin": "^2.6.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index 61a8a78b3a..6e9dd4acdf 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/ts-utils", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index ad59089815..323deb6f67 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE TypeScript Concatenator", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/ts-utils": "^2.5.0", - "@neo-one/utils": "^2.5.0", + "@neo-one/ts-utils": "^2.6.0", + "@neo-one/utils": "^2.6.0", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", @@ -22,7 +22,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract-compiler-node": "^2.5.0", + "@neo-one/smart-contract-compiler-node": "^2.6.0", "@types/app-root-dir": "^0.1.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 651279b215..31866cf8d0 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils-node", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE shared Nodejs utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/utils": "^2.5.0", + "@neo-one/utils": "^2.6.0", "@types/pino": "^5.8.9", "@types/yargs": "^13.0.3", "execa": "^3.2.0", diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 2050b5b19e..ba2c00e19f 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils", - "version": "2.5.0", + "version": "2.6.0", "description": "NEO•ONE shared utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 340373b1ec..962c4672fe 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -20,8 +20,8 @@ "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", "@neo-one/editor": "^2.3.1", - "@neo-one/react": "^2.5.0", - "@neo-one/react-common": "^2.5.0", + "@neo-one/react": "^2.6.0", + "@neo-one/react-common": "^2.6.0", "@reach/router": "^1.2.1", "@render-props/viewport": "^0.3.1", "babel-plugin-emotion": "^10.0.21", @@ -71,7 +71,7 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@neo-one/client": "^2.6.0", - "@neo-one/react-core": "^2.5.0", + "@neo-one/react-core": "^2.6.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/rush.json b/rush.json index d634656b62..b29662610b 100644 --- a/rush.json +++ b/rush.json @@ -40,67 +40,78 @@ "packageName": "@neo-one/cli", "projectFolder": "packages/neo-one-cli", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common", "projectFolder": "packages/neo-one-cli-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common-node", "projectFolder": "packages/neo-one-cli-common-node", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client", "projectFolder": "packages/neo-one-client", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-common", "projectFolder": "packages/neo-one-client-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-core", "projectFolder": "packages/neo-one-client-core", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-full", "projectFolder": "packages/neo-one-client-full", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-full-common", "projectFolder": "packages/neo-one-client-full-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-full-core", "projectFolder": "packages/neo-one-client-full-core", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/client-switch", "projectFolder": "packages/neo-one-client-switch", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/developer-tools", "projectFolder": "packages/neo-one-developer-tools", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/developer-tools-frame", @@ -121,13 +132,15 @@ "packageName": "@neo-one/http", "projectFolder": "packages/neo-one-http", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/http-context", "projectFolder": "packages/neo-one-http-context", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/local-browser", @@ -160,19 +173,22 @@ "packageName": "@neo-one/node", "projectFolder": "packages/neo-one-node", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-bin", "projectFolder": "packages/neo-one-node-bin", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-blockchain", "projectFolder": "packages/neo-one-node-blockchain", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-browser", @@ -188,67 +204,78 @@ "packageName": "@neo-one/node-consensus", "projectFolder": "packages/neo-one-node-consensus", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-core", "projectFolder": "packages/neo-one-node-core", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-http-rpc", "projectFolder": "packages/neo-one-node-http-rpc", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-neo-settings", "projectFolder": "packages/neo-one-node-neo-settings", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-network", "projectFolder": "packages/neo-one-node-network", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-offline", "projectFolder": "packages/neo-one-node-offline", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-protocol", "projectFolder": "packages/neo-one-node-protocol", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-rpc-handler", "projectFolder": "packages/neo-one-node-rpc-handler", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-storage-cache", "projectFolder": "packages/neo-one-node-storage-cache", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-storage-common", "projectFolder": "packages/neo-one-node-storage-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-storage-levelup", "projectFolder": "packages/neo-one-node-storage-levelup", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/node-tools", @@ -259,61 +286,71 @@ "packageName": "@neo-one/node-vm", "projectFolder": "packages/neo-one-node-vm", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" }, { "packageName": "@neo-one/react", "projectFolder": "packages/neo-one-react", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" }, { "packageName": "@neo-one/react-common", "projectFolder": "packages/neo-one-react-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" }, { "packageName": "@neo-one/react-core", "projectFolder": "packages/neo-one-react-core", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" }, { "packageName": "@neo-one/smart-contract", "projectFolder": "packages/neo-one-smart-contract", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-codegen", "projectFolder": "packages/neo-one-smart-contract-codegen", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-compiler", "projectFolder": "packages/neo-one-smart-contract-compiler", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-compiler-node", "projectFolder": "packages/neo-one-smart-contract-compiler-node", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-lib", "projectFolder": "packages/neo-one-smart-contract-lib", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-test", "projectFolder": "packages/neo-one-smart-contract-test", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-test-browser", @@ -324,13 +361,15 @@ "packageName": "@neo-one/smart-contract-test-common", "projectFolder": "packages/neo-one-smart-contract-test-common", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-typescript-plugin", "projectFolder": "packages/neo-one-smart-contract-typescript-plugin", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/suite", From 7c8db73f191cf53c794be3a0528703d1a1b33fe9 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 23 Jul 2020 15:10:18 -0700 Subject: [PATCH 080/141] fix(e2e): fixup compile config for e2e test (#2121) --- .../compile-e2e_2020-07-23-22-07.json | 11 +++++++++++ .../@neo-one/cli/compile-e2e_2020-07-23-22-07.json | 11 +++++++++++ .../neo-one-cli-common-node/src/configuration.ts | 12 ++++-------- packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts | 5 ++++- 4 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json create mode 100644 common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json diff --git a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json new file mode 100644 index 0000000000..313be38132 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli-common-node", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json b/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json new file mode 100644 index 0000000000..3702d66fee --- /dev/null +++ b/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index 94b394a2e1..c392fe7e3e 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -19,10 +19,6 @@ const configurationDefaults = { contracts: { outDir: nodePath.join('neo-one', 'compiled'), path: nodePath.join('neo-one', 'contracts'), - json: true, - avm: false, - debug: false, - opcodes: false, }, codegen: { path: nodePath.join('src', 'neo-one'), @@ -194,13 +190,13 @@ ${exportConfig} { // 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: ${config.contracts.json}, + // json: ${true}, // Set this to true if you want the compile command to output AVM. - // avm: ${config.contracts.avm}, + // avm: ${false}, // Set this to true if you want the compile command to output additional debug information. - // debug: ${config.contracts.debug}, + // 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: ${config.contracts.opcodes}, + // opcodes: ${false}, }, artifacts: { // NEO•ONE will store build and deployment artifacts that should be checked in to vcs in this directory. diff --git a/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts index bd7a6d67ae..642085e396 100644 --- a/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts +++ b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts @@ -44,7 +44,10 @@ const testDebugFile = (contents: any) => { }; const testCompileProject = async (project: string, options: CLICompileOptions) => { - const command = Object.entries(options).reduce((acc, [flag, value]) => acc.concat(` --${flag} ${value}`), 'compile'); + const command = Object.entries(options).reduce( + (acc, [flag, value]) => (value === true ? acc.concat(` --${flag} ${value}`) : acc), + 'compile', + ); await one.createExec(project)(command); const { From cfd627fdc9ca7d28a6487b093cad7b5a066f1ce0 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 23 Jul 2020 15:20:28 -0700 Subject: [PATCH 081/141] feat(website): fixup website for release (#2122) --- .../2020-07-23-neo-one-2-7-announcement.md | 2 +- .../src/components/content/MainContent.tsx | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) 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 index 0f396eda2b..f1588c87a5 100644 --- 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 @@ -7,7 +7,7 @@ twitter: https://twitter.com/neo_one_suite ## NEO•ONE 2.7 -We are excited to announce our latest release 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. +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 install @neo-one/cli` 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')}; } From 0f7396b2280e7156ed1d37859d0ff19df03aeff6 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 23 Jul 2020 15:27:57 -0700 Subject: [PATCH 082/141] feat(release): version 2.7 release --- .../compile-e2e_2020-06-16-04-40.json | 11 --- .../compile-e2e_2020-07-23-22-07.json | 11 --- .../fix-helper_2020-07-07-04-21.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../nits_2020-06-12-05-42.json | 11 --- .../nt-dep_2020-06-17-20-21.json | 11 --- .../release_2020-07-23-21-27.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../update-networks_2020-05-27-22-10.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../compile-e2e_2020-06-16-04-40.json | 11 --- .../cli-common/release_2020-07-23-21-27.json | 11 --- .../cli-common/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../cli/compile-e2e_2020-06-16-04-40.json | 11 --- .../cli/compile-e2e_2020-07-23-22-07.json | 11 --- .../create-client-fix_2020-06-04-23-23.json | 11 --- .../cli/debugger_2020-06-23-00-45.json | 11 --- .../cli/fix-helper_2020-07-07-04-21.json | 11 --- .../cli/fix-type-deps_2020-07-09-05-11.json | 11 --- .../cli/init-e2e_2020-06-16-23-17.json | 11 --- .../migration-ts-fix_2020-07-22-20-43.json | 11 --- .../@neo-one/cli/nits_2020-06-12-05-42.json | 11 --- .../@neo-one/cli/nt-dep_2020-06-17-20-21.json | 11 --- .../cli/nt-update_2020-07-20-19-17.json | 11 --- .../cli/release_2020-07-23-21-27.json | 11 --- .../@neo-one/cli/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../client-common/nits_2020-06-12-05-42.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../create-client-fix_2020-06-04-23-23.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-debug_2020-07-14-23-23.json | 11 --- .../client-core/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../client-full/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../create-client-fix_2020-06-04-23-23.json | 11 --- .../client/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../http-context/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../http/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../logger/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-bin/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../create-client-fix_2020-06-04-23-23.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-debug_2020-07-14-23-23.json | 11 --- .../node-core/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../node-network/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../node-offline/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-debug_2020-07-14-23-23.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../node-debug_2020-07-14-23-23.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-vm/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../node/fix-type-deps_2020-07-09-05-11.json | 11 --- .../node/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../react-common/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../react-core/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../react/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../create-client-fix_2020-06-04-23-23.json | 11 --- .../migration-docs_2020-05-28-22-23.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../debugger_2020-06-23-00-45.json | 11 --- .../fix-arraystorage_2020-07-16-02-18.json | 11 --- .../fix-switch_2020-07-09-23-27.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../node-debug_2020-07-14-23-23.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../suite/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-utils/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../fix-type-deps_2020-07-09-05-11.json | 11 --- .../utils-node/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- .../utils/ts-3.9_2020-06-22-22-11.json | 11 --- .../versioning-upgrade_2020-07-23-20-14.json | 11 --- common/config/rush/version-policies.json | 6 +- packages/neo-one-build-tests/package.json | 2 +- .../neo-one-cli-common-node/CHANGELOG.json | 37 ++++++++++ packages/neo-one-cli-common-node/CHANGELOG.md | 22 +++++- packages/neo-one-cli-common-node/package.json | 8 +-- packages/neo-one-cli-common/CHANGELOG.json | 30 ++++++++ packages/neo-one-cli-common/CHANGELOG.md | 18 ++++- packages/neo-one-cli-common/package.json | 10 +-- packages/neo-one-cli/CHANGELOG.json | 69 +++++++++++++++++++ packages/neo-one-cli/CHANGELOG.md | 25 ++++++- packages/neo-one-cli/package.json | 42 +++++------ packages/neo-one-client-common/CHANGELOG.json | 25 +++++++ packages/neo-one-client-common/CHANGELOG.md | 14 +++- packages/neo-one-client-common/package.json | 4 +- packages/neo-one-client-core/CHANGELOG.json | 31 +++++++++ packages/neo-one-client-core/CHANGELOG.md | 16 ++++- packages/neo-one-client-core/package.json | 8 +-- .../neo-one-client-full-common/CHANGELOG.json | 22 ++++++ .../neo-one-client-full-common/CHANGELOG.md | 13 +++- .../neo-one-client-full-common/package.json | 6 +- .../neo-one-client-full-core/CHANGELOG.json | 25 +++++++ .../neo-one-client-full-core/CHANGELOG.md | 13 +++- .../neo-one-client-full-core/package.json | 14 ++-- packages/neo-one-client-full/CHANGELOG.json | 17 +++++ packages/neo-one-client-full/CHANGELOG.md | 13 +++- packages/neo-one-client-full/package.json | 6 +- packages/neo-one-client-switch/CHANGELOG.json | 25 +++++++ packages/neo-one-client-switch/CHANGELOG.md | 13 +++- packages/neo-one-client-switch/package.json | 8 +-- packages/neo-one-client/CHANGELOG.json | 20 ++++++ packages/neo-one-client/CHANGELOG.md | 14 +++- packages/neo-one-client/package.json | 8 +-- .../package.json | 10 +-- .../neo-one-developer-tools/CHANGELOG.json | 17 +++++ packages/neo-one-developer-tools/CHANGELOG.md | 13 +++- packages/neo-one-developer-tools/package.json | 4 +- packages/neo-one-editor-server/package.json | 8 +-- packages/neo-one-editor/package.json | 12 ++-- packages/neo-one-http-context/CHANGELOG.json | 25 +++++++ packages/neo-one-http-context/CHANGELOG.md | 13 +++- packages/neo-one-http-context/package.json | 8 +-- packages/neo-one-http/CHANGELOG.json | 17 +++++ packages/neo-one-http/CHANGELOG.md | 13 +++- packages/neo-one-http/package.json | 2 +- packages/neo-one-local-browser/package.json | 12 ++-- packages/neo-one-logger-config/CHANGELOG.json | 17 +++++ packages/neo-one-logger-config/CHANGELOG.md | 9 ++- packages/neo-one-logger-config/package.json | 2 +- packages/neo-one-logger/CHANGELOG.json | 25 +++++++ packages/neo-one-logger/CHANGELOG.md | 10 ++- packages/neo-one-logger/package.json | 4 +- packages/neo-one-node-bin/CHANGELOG.json | 37 ++++++++++ packages/neo-one-node-bin/CHANGELOG.md | 14 +++- packages/neo-one-node-bin/package.json | 16 ++--- .../neo-one-node-blockchain/CHANGELOG.json | 34 +++++++++ packages/neo-one-node-blockchain/CHANGELOG.md | 14 +++- packages/neo-one-node-blockchain/package.json | 12 ++-- packages/neo-one-node-browser/package.json | 20 +++--- .../neo-one-node-consensus/CHANGELOG.json | 31 +++++++++ packages/neo-one-node-consensus/CHANGELOG.md | 14 +++- packages/neo-one-node-consensus/package.json | 10 +-- packages/neo-one-node-core/CHANGELOG.json | 34 +++++++++ packages/neo-one-node-core/CHANGELOG.md | 15 +++- packages/neo-one-node-core/package.json | 8 +-- packages/neo-one-node-http-rpc/CHANGELOG.json | 37 ++++++++++ packages/neo-one-node-http-rpc/CHANGELOG.md | 14 +++- packages/neo-one-node-http-rpc/package.json | 16 ++--- .../neo-one-node-neo-settings/CHANGELOG.json | 28 ++++++++ .../neo-one-node-neo-settings/CHANGELOG.md | 14 +++- .../neo-one-node-neo-settings/package.json | 8 +-- packages/neo-one-node-network/CHANGELOG.json | 28 ++++++++ packages/neo-one-node-network/CHANGELOG.md | 13 +++- packages/neo-one-node-network/package.json | 10 +-- packages/neo-one-node-offline/CHANGELOG.json | 25 +++++++ packages/neo-one-node-offline/CHANGELOG.md | 13 +++- packages/neo-one-node-offline/package.json | 8 +-- packages/neo-one-node-protocol/CHANGELOG.json | 37 ++++++++++ packages/neo-one-node-protocol/CHANGELOG.md | 15 +++- packages/neo-one-node-protocol/package.json | 14 ++-- .../neo-one-node-rpc-handler/CHANGELOG.json | 34 +++++++++ .../neo-one-node-rpc-handler/CHANGELOG.md | 14 +++- .../neo-one-node-rpc-handler/package.json | 12 ++-- .../neo-one-node-storage-cache/CHANGELOG.json | 28 ++++++++ .../neo-one-node-storage-cache/CHANGELOG.md | 14 +++- .../neo-one-node-storage-cache/package.json | 10 +-- .../CHANGELOG.json | 25 +++++++ .../neo-one-node-storage-common/CHANGELOG.md | 13 +++- .../neo-one-node-storage-common/package.json | 8 +-- .../CHANGELOG.json | 25 +++++++ .../neo-one-node-storage-levelup/CHANGELOG.md | 13 +++- .../neo-one-node-storage-levelup/package.json | 10 +-- packages/neo-one-node-tools/package.json | 4 +- packages/neo-one-node-vm/CHANGELOG.json | 31 +++++++++ packages/neo-one-node-vm/CHANGELOG.md | 14 +++- packages/neo-one-node-vm/package.json | 10 +-- packages/neo-one-node/CHANGELOG.json | 31 +++++++++ packages/neo-one-node/CHANGELOG.md | 14 +++- packages/neo-one-node/package.json | 24 +++---- packages/neo-one-react-common/CHANGELOG.json | 20 ++++++ packages/neo-one-react-common/CHANGELOG.md | 14 +++- packages/neo-one-react-common/package.json | 4 +- packages/neo-one-react-core/CHANGELOG.json | 17 +++++ packages/neo-one-react-core/CHANGELOG.md | 13 +++- packages/neo-one-react-core/package.json | 2 +- packages/neo-one-react/CHANGELOG.json | 17 +++++ packages/neo-one-react/CHANGELOG.md | 13 +++- packages/neo-one-react/package.json | 2 +- .../CHANGELOG.json | 22 ++++++ .../CHANGELOG.md | 13 +++- .../package.json | 10 +-- .../CHANGELOG.json | 22 ++++++ .../CHANGELOG.md | 13 +++- .../package.json | 8 +-- .../CHANGELOG.json | 57 +++++++++++++++ .../CHANGELOG.md | 21 +++++- .../package.json | 30 ++++---- .../neo-one-smart-contract-lib/CHANGELOG.json | 17 +++++ .../neo-one-smart-contract-lib/CHANGELOG.md | 13 +++- .../neo-one-smart-contract-lib/package.json | 8 +-- .../package.json | 6 +- .../CHANGELOG.json | 25 +++++++ .../CHANGELOG.md | 13 +++- .../package.json | 16 ++--- .../CHANGELOG.json | 28 ++++++++ .../neo-one-smart-contract-test/CHANGELOG.md | 13 +++- .../neo-one-smart-contract-test/package.json | 20 +++--- .../CHANGELOG.json | 17 +++++ .../CHANGELOG.md | 13 +++- .../package.json | 6 +- .../neo-one-smart-contract/CHANGELOG.json | 17 +++++ packages/neo-one-smart-contract/CHANGELOG.md | 13 +++- packages/neo-one-smart-contract/package.json | 2 +- packages/neo-one-suite/CHANGELOG.json | 37 ++++++++++ packages/neo-one-suite/CHANGELOG.md | 9 ++- packages/neo-one-suite/package.json | 14 ++-- packages/neo-one-ts-utils/CHANGELOG.json | 17 +++++ packages/neo-one-ts-utils/CHANGELOG.md | 9 ++- packages/neo-one-ts-utils/package.json | 2 +- .../CHANGELOG.json | 28 ++++++++ .../CHANGELOG.md | 9 ++- .../package.json | 8 +-- packages/neo-one-utils-node/CHANGELOG.json | 25 +++++++ packages/neo-one-utils-node/CHANGELOG.md | 10 ++- packages/neo-one-utils-node/package.json | 4 +- packages/neo-one-utils/CHANGELOG.json | 17 +++++ packages/neo-one-utils/CHANGELOG.md | 9 ++- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 8 +-- 291 files changed, 2097 insertions(+), 1887 deletions(-) delete mode 100644 common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json delete mode 100644 common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json delete mode 100644 common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json delete mode 100644 common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json delete mode 100644 common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json delete mode 100644 common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json delete mode 100644 common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json delete mode 100644 common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json delete mode 100644 common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json delete mode 100644 common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json delete mode 100644 common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json delete mode 100644 common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json delete mode 100644 common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json delete mode 100644 common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json delete mode 100644 common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json delete mode 100644 common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json delete mode 100644 common/changes/@neo-one/cli/nits_2020-06-12-05-42.json delete mode 100644 common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json delete mode 100644 common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json delete mode 100644 common/changes/@neo-one/cli/release_2020-07-23-21-27.json delete mode 100644 common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json delete mode 100644 common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json delete mode 100644 common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json delete mode 100644 common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json delete mode 100644 common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json delete mode 100644 common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json delete mode 100644 common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json delete mode 100644 common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json delete mode 100644 common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json delete mode 100644 common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json delete mode 100644 common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json delete mode 100644 common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json diff --git a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json deleted file mode 100644 index 7ea07e18fd..0000000000 --- a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-06-16-04-40.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Adds outDir to neo-one configuration.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} diff --git a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json b/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json deleted file mode 100644 index 313be38132..0000000000 --- a/common/changes/@neo-one/cli-common-node/compile-e2e_2020-07-23-22-07.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json b/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json deleted file mode 100644 index 11c216b5f9..0000000000 --- a/common/changes/@neo-one/cli-common-node/fix-helper_2020-07-07-04-21.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Export createUserAccountProviderFunc.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index fc4b898a85..0000000000 --- a/common/changes/@neo-one/cli-common-node/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json b/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json deleted file mode 100644 index 22648f7a57..0000000000 --- a/common/changes/@neo-one/cli-common-node/nits_2020-06-12-05-42.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json b/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json deleted file mode 100644 index 56ba6ad505..0000000000 --- a/common/changes/@neo-one/cli-common-node/nt-dep_2020-06-17-20-21.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Update documentation on starting neotracker.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json deleted file mode 100644 index 19a6b98e32..0000000000 --- a/common/changes/@neo-one/cli-common-node/release_2020-07-23-21-27.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Update CLI compile options.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 24190f0f95..0000000000 --- a/common/changes/@neo-one/cli-common-node/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json b/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json deleted file mode 100644 index ccb1949a74..0000000000 --- a/common/changes/@neo-one/cli-common-node/update-networks_2020-05-27-22-10.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common-node", - "comment": "update defaultNetworks to live nodes", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index c07390dffe..0000000000 --- a/common/changes/@neo-one/cli-common-node/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/cli-common-node" - } - ], - "packageName": "@neo-one/cli-common-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json deleted file mode 100644 index 5636d91f10..0000000000 --- a/common/changes/@neo-one/cli-common/compile-e2e_2020-06-16-04-40.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common", - "comment": "Adds outDir to neo-one configuration.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json deleted file mode 100644 index e911433ed1..0000000000 --- a/common/changes/@neo-one/cli-common/release_2020-07-23-21-27.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common", - "comment": "Update CLI compile options.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index d692b33335..0000000000 --- a/common/changes/@neo-one/cli-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/cli-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index aa4cffda39..0000000000 --- a/common/changes/@neo-one/cli-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/cli-common" - } - ], - "packageName": "@neo-one/cli-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json b/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json deleted file mode 100644 index 190d43ba1b..0000000000 --- a/common/changes/@neo-one/cli/compile-e2e_2020-06-16-04-40.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Adds outDir to neo-one config for output directory path of compile command. Adds E2E test for compile command.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json b/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json deleted file mode 100644 index 3702d66fee..0000000000 --- a/common/changes/@neo-one/cli/compile-e2e_2020-07-23-22-07.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json deleted file mode 100644 index 3702d66fee..0000000000 --- a/common/changes/@neo-one/cli/create-client-fix_2020-06-04-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json b/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json deleted file mode 100644 index b4611e66c6..0000000000 --- a/common/changes/@neo-one/cli/debugger_2020-06-23-00-45.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "add debug support", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json b/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json deleted file mode 100644 index 674fee618e..0000000000 --- a/common/changes/@neo-one/cli/fix-helper_2020-07-07-04-21.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Export createUserAccountProviderFunc.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index a745beb5a2..0000000000 --- a/common/changes/@neo-one/cli/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json b/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json deleted file mode 100644 index 5ef5cc0bba..0000000000 --- a/common/changes/@neo-one/cli/init-e2e_2020-06-16-23-17.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Add E2E test for neo-one init command.", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json b/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json deleted file mode 100644 index c9bd2297fe..0000000000 --- a/common/changes/@neo-one/cli/migration-ts-fix_2020-07-22-20-43.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "patch migration.ts file transpiling", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json b/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json deleted file mode 100644 index 2acd363556..0000000000 --- a/common/changes/@neo-one/cli/nits_2020-06-12-05-42.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json b/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json deleted file mode 100644 index 79c6348503..0000000000 --- a/common/changes/@neo-one/cli/nt-dep_2020-06-17-20-21.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Remove @neotracker/core as a @neo-one/cli dependency.", - "type": "minor" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json b/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json deleted file mode 100644 index 6d0a666611..0000000000 --- a/common/changes/@neo-one/cli/nt-update_2020-07-20-19-17.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Update NEO Tracker dependency.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/release_2020-07-23-21-27.json b/common/changes/@neo-one/cli/release_2020-07-23-21-27.json deleted file mode 100644 index 7a1bd89368..0000000000 --- a/common/changes/@neo-one/cli/release_2020-07-23-21-27.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Update CLI compile options.", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index f9c4414e67..0000000000 --- a/common/changes/@neo-one/cli/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 9558d877ac..0000000000 --- a/common/changes/@neo-one/cli/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/cli" - } - ], - "packageName": "@neo-one/cli", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index a7d454a880..0000000000 --- a/common/changes/@neo-one/client-common/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/client-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json b/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json deleted file mode 100644 index 4d1e4ee6f0..0000000000 --- a/common/changes/@neo-one/client-common/nits_2020-06-12-05-42.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/client-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 6d37621fee..0000000000 --- a/common/changes/@neo-one/client-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 87fd4b97cb..0000000000 --- a/common/changes/@neo-one/client-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-common" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json deleted file mode 100644 index 9ddf5b2cad..0000000000 --- a/common/changes/@neo-one/client-core/create-client-fix_2020-06-04-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "fix #1997", - "type": "patch" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 890f035dac..0000000000 --- a/common/changes/@neo-one/client-core/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/client-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json deleted file mode 100644 index 749ab6011c..0000000000 --- a/common/changes/@neo-one/client-core/node-debug_2020-07-14-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "fixup utxo invocation transactions", - "type": "patch" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 42e70ecf8a..0000000000 --- a/common/changes/@neo-one/client-core/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-core", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index ca087d388d..0000000000 --- a/common/changes/@neo-one/client-core/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index cd3017a986..0000000000 --- a/common/changes/@neo-one/client-full-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-full-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-full-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 53d7d7d460..0000000000 --- a/common/changes/@neo-one/client-full-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-full-common" - } - ], - "packageName": "@neo-one/client-full-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 9982fd161b..0000000000 --- a/common/changes/@neo-one/client-full-core/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-full-core", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index d03871e85f..0000000000 --- a/common/changes/@neo-one/client-full-core/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-full-core" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 473aa18fc9..0000000000 --- a/common/changes/@neo-one/client-full/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-full", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-full", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 6256f5fc66..0000000000 --- a/common/changes/@neo-one/client-full/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-full" - } - ], - "packageName": "@neo-one/client-full", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 1f8136061c..0000000000 --- a/common/changes/@neo-one/client-switch/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-switch", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index ea07b9e08c..0000000000 --- a/common/changes/@neo-one/client-switch/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json deleted file mode 100644 index 6e8bf960e3..0000000000 --- a/common/changes/@neo-one/client/create-client-fix_2020-06-04-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client", - "comment": "fix #1997", - "type": "patch" - } - ], - "packageName": "@neo-one/client", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 63f423b74b..0000000000 --- a/common/changes/@neo-one/client/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/client", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 259a5ba49b..0000000000 --- a/common/changes/@neo-one/client/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/client" - } - ], - "packageName": "@neo-one/client", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index b4e097ac69..0000000000 --- a/common/changes/@neo-one/developer-tools/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/developer-tools", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/developer-tools", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index dae800059f..0000000000 --- a/common/changes/@neo-one/developer-tools/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/developer-tools" - } - ], - "packageName": "@neo-one/developer-tools", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 18af53c331..0000000000 --- a/common/changes/@neo-one/http-context/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/http-context", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/http-context", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 4c90fc5dec..0000000000 --- a/common/changes/@neo-one/http-context/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/http-context" - } - ], - "packageName": "@neo-one/http-context", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index d1765ea79d..0000000000 --- a/common/changes/@neo-one/http/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/http", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/http", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 07c37b02e5..0000000000 --- a/common/changes/@neo-one/http/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/http" - } - ], - "packageName": "@neo-one/http", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 9d32190548..0000000000 --- a/common/changes/@neo-one/logger-config/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/logger-config", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/logger-config", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 32342ccba4..0000000000 --- a/common/changes/@neo-one/logger-config/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/logger-config" - } - ], - "packageName": "@neo-one/logger-config", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 18d8601542..0000000000 --- a/common/changes/@neo-one/logger/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/logger", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/logger", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 94b6dbe250..0000000000 --- a/common/changes/@neo-one/logger/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/logger", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/logger", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 2285fc59d8..0000000000 --- a/common/changes/@neo-one/logger/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/logger" - } - ], - "packageName": "@neo-one/logger", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index cd7d34557e..0000000000 --- a/common/changes/@neo-one/node-bin/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-bin", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-bin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 4e0587141a..0000000000 --- a/common/changes/@neo-one/node-bin/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-bin", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-bin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 212ea8b5a6..0000000000 --- a/common/changes/@neo-one/node-bin/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-bin" - } - ], - "packageName": "@neo-one/node-bin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 6ef5fdc925..0000000000 --- a/common/changes/@neo-one/node-blockchain/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-blockchain", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 224a1d7610..0000000000 --- a/common/changes/@neo-one/node-blockchain/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-blockchain", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index b32a76c1e6..0000000000 --- a/common/changes/@neo-one/node-blockchain/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-blockchain" - } - ], - "packageName": "@neo-one/node-blockchain", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 66d6e04189..0000000000 --- a/common/changes/@neo-one/node-consensus/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-consensus", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index f6ebaadcb3..0000000000 --- a/common/changes/@neo-one/node-consensus/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-consensus", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index f61de6b703..0000000000 --- a/common/changes/@neo-one/node-consensus/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-consensus" - } - ], - "packageName": "@neo-one/node-consensus", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json deleted file mode 100644 index dd0e2bc5d5..0000000000 --- a/common/changes/@neo-one/node-core/create-client-fix_2020-06-04-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 714d7ba845..0000000000 --- a/common/changes/@neo-one/node-core/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json deleted file mode 100644 index 0c1068a2e2..0000000000 --- a/common/changes/@neo-one/node-core/node-debug_2020-07-14-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "fixup utxo invocation transactions", - "type": "patch" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 767a283df2..0000000000 --- a/common/changes/@neo-one/node-core/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-core", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 53105e76a2..0000000000 --- a/common/changes/@neo-one/node-core/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-core" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index e1032c43d1..0000000000 --- a/common/changes/@neo-one/node-http-rpc/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-http-rpc", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 7866ba591a..0000000000 --- a/common/changes/@neo-one/node-http-rpc/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-http-rpc", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 79a83989b4..0000000000 --- a/common/changes/@neo-one/node-http-rpc/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-http-rpc" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index e0d15bc616..0000000000 --- a/common/changes/@neo-one/node-neo-settings/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-neo-settings", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 73e35d10a6..0000000000 --- a/common/changes/@neo-one/node-neo-settings/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-neo-settings", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 27f997ffc9..0000000000 --- a/common/changes/@neo-one/node-neo-settings/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-neo-settings" - } - ], - "packageName": "@neo-one/node-neo-settings", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 69622203fd..0000000000 --- a/common/changes/@neo-one/node-network/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-network", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-network", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index bd65097d2c..0000000000 --- a/common/changes/@neo-one/node-network/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-network" - } - ], - "packageName": "@neo-one/node-network", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index c333c993a0..0000000000 --- a/common/changes/@neo-one/node-offline/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-offline", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-offline", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index b437105694..0000000000 --- a/common/changes/@neo-one/node-offline/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-offline" - } - ], - "packageName": "@neo-one/node-offline", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 2c7977541f..0000000000 --- a/common/changes/@neo-one/node-protocol/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-protocol", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json deleted file mode 100644 index 339fbe3e58..0000000000 --- a/common/changes/@neo-one/node-protocol/node-debug_2020-07-14-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-protocol", - "comment": "fixup utxo invocation transactions", - "type": "patch" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index b133dc5a9f..0000000000 --- a/common/changes/@neo-one/node-protocol/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-protocol", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 81f5037962..0000000000 --- a/common/changes/@neo-one/node-protocol/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-protocol" - } - ], - "packageName": "@neo-one/node-protocol", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json deleted file mode 100644 index 1b74f08836..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/node-debug_2020-07-14-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-rpc-handler", - "comment": "fixup utxo invocation transactions", - "type": "patch" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 7c6176d4e0..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-rpc-handler", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 745ac95a00..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-rpc-handler" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 876d253f15..0000000000 --- a/common/changes/@neo-one/node-storage-cache/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-cache", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 40626de93c..0000000000 --- a/common/changes/@neo-one/node-storage-cache/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-cache", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index b85d9bc0a1..0000000000 --- a/common/changes/@neo-one/node-storage-cache/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-storage-cache" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index c4a9b795b4..0000000000 --- a/common/changes/@neo-one/node-storage-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-storage-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index f7a5da0258..0000000000 --- a/common/changes/@neo-one/node-storage-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-storage-common" - } - ], - "packageName": "@neo-one/node-storage-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 7b744a5ffe..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-levelup", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 0c61f62e05..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-storage-levelup" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 6317328a2a..0000000000 --- a/common/changes/@neo-one/node-vm/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-vm", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node-vm", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index fc0b316316..0000000000 --- a/common/changes/@neo-one/node-vm/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-vm", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node-vm", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 0748e65ef4..0000000000 --- a/common/changes/@neo-one/node-vm/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node-vm" - } - ], - "packageName": "@neo-one/node-vm", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 864e8e41e1..0000000000 --- a/common/changes/@neo-one/node/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 9a5e2dc776..0000000000 --- a/common/changes/@neo-one/node/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 0e6f2567ed..0000000000 --- a/common/changes/@neo-one/node/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/node" - } - ], - "packageName": "@neo-one/node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 4d322e8284..0000000000 --- a/common/changes/@neo-one/react-common/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-common", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/react-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 66152be15c..0000000000 --- a/common/changes/@neo-one/react-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/react-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index a0045be848..0000000000 --- a/common/changes/@neo-one/react-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/react-common" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 57cebc672e..0000000000 --- a/common/changes/@neo-one/react-core/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react-core", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/react-core", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 3e91792097..0000000000 --- a/common/changes/@neo-one/react-core/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/react-core" - } - ], - "packageName": "@neo-one/react-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index b550cbabda..0000000000 --- a/common/changes/@neo-one/react/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/react", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/react", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 445390a9e0..0000000000 --- a/common/changes/@neo-one/react/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/react" - } - ], - "packageName": "@neo-one/react", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json b/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json deleted file mode 100644 index ee4d083c4b..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/create-client-fix_2020-06-04-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-codegen", - "comment": "fix #1997", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json b/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json deleted file mode 100644 index eedde8788f..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/migration-docs_2020-05-28-22-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-codegen", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 2e3fe4f54b..0000000000 --- a/common/changes/@neo-one/smart-contract-codegen/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-codegen" - } - ], - "packageName": "@neo-one/smart-contract-codegen", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index e8ba9cf690..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler-node", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index e08983c91d..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler-node/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-compiler-node" - } - ], - "packageName": "@neo-one/smart-contract-compiler-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json b/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json deleted file mode 100644 index d331c29270..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/debugger_2020-06-23-00-45.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "add debug support", - "type": "minor" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json b/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json deleted file mode 100644 index abf7f3be89..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/fix-arraystorage_2020-07-16-02-18.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Fix number mismatches in ArrayStorage, SetStorage, MapStorage.", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json b/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json deleted file mode 100644 index 1ad0f45446..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/fix-switch_2020-07-09-23-27.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Fix broken switch statement inside SmartContract methods.", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 1d3a0ede51..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json b/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json deleted file mode 100644 index 09ac2daa76..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/node-debug_2020-07-14-23-23.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "fixup utxo invocation transactions", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index fb78a80865..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 1a68c158fb..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-compiler" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index e90d565953..0000000000 --- a/common/changes/@neo-one/smart-contract-lib/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-lib", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-lib", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index ca90c7ea52..0000000000 --- a/common/changes/@neo-one/smart-contract-lib/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-lib" - } - ], - "packageName": "@neo-one/smart-contract-lib", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 4c945ddd83..0000000000 --- a/common/changes/@neo-one/smart-contract-test-common/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-test-common", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-test-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 97fdc7cf76..0000000000 --- a/common/changes/@neo-one/smart-contract-test-common/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-test-common" - } - ], - "packageName": "@neo-one/smart-contract-test-common", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 149ebba76e..0000000000 --- a/common/changes/@neo-one/smart-contract-test/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-test", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-test", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 568eaf4fc5..0000000000 --- a/common/changes/@neo-one/smart-contract-test/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-test" - } - ], - "packageName": "@neo-one/smart-contract-test", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index a1b4868eeb..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-typescript-plugin", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 33d6b139fc..0000000000 --- a/common/changes/@neo-one/smart-contract-typescript-plugin/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract-typescript-plugin" - } - ], - "packageName": "@neo-one/smart-contract-typescript-plugin", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 0f949247b6..0000000000 --- a/common/changes/@neo-one/smart-contract/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/smart-contract", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 557dff5296..0000000000 --- a/common/changes/@neo-one/smart-contract/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/smart-contract" - } - ], - "packageName": "@neo-one/smart-contract", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 5e28c7da6a..0000000000 --- a/common/changes/@neo-one/suite/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/suite", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/suite", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 3fd3706a55..0000000000 --- a/common/changes/@neo-one/suite/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/suite" - } - ], - "packageName": "@neo-one/suite", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index dbb05b0ba0..0000000000 --- a/common/changes/@neo-one/ts-utils/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/ts-utils", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index eb52111415..0000000000 --- a/common/changes/@neo-one/ts-utils/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/ts-utils" - } - ], - "packageName": "@neo-one/ts-utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 5a34a026a9..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/typescript-concatenator", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index e8b3f45447..0000000000 --- a/common/changes/@neo-one/typescript-concatenator/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/typescript-concatenator" - } - ], - "packageName": "@neo-one/typescript-concatenator", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json b/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json deleted file mode 100644 index 4d30cd86d0..0000000000 --- a/common/changes/@neo-one/utils-node/fix-type-deps_2020-07-09-05-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils-node", - "comment": "Add appropriate @types dependencies.", - "type": "patch" - } - ], - "packageName": "@neo-one/utils-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 659519f756..0000000000 --- a/common/changes/@neo-one/utils-node/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils-node", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/utils-node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index 3b9e59a5a8..0000000000 --- a/common/changes/@neo-one/utils-node/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/utils-node" - } - ], - "packageName": "@neo-one/utils-node", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json b/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json deleted file mode 100644 index 81f0639244..0000000000 --- a/common/changes/@neo-one/utils/ts-3.9_2020-06-22-22-11.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/utils", - "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5", - "type": "patch" - } - ], - "packageName": "@neo-one/utils", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json b/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json deleted file mode 100644 index fc2ca6c978..0000000000 --- a/common/changes/@neo-one/utils/versioning-upgrade_2020-07-23-20-14.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "bump package version for future release clarity", - "type": "none", - "packageName": "@neo-one/utils" - } - ], - "packageName": "@neo-one/utils", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 86e9406aa2..bf4669ad41 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -2,19 +2,19 @@ { "definitionName": "lockStepVersion", "policyName": "CoreReleasePolicy", - "version": "2.6.0", + "version": "2.7.0", "nextBump": "minor" }, { "definitionName": "lockStepVersion", "policyName": "NodeReleasePolicy", - "version": "2.6.0", + "version": "2.7.0", "nextBump": "minor" }, { "definitionName": "lockStepVersion", "policyName": "WebReleasePolicy", - "version": "2.6.0", + "version": "2.7.0", "nextBump": "minor" } ] diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json index cd5a6ef8b4..90ed5c477d 100644 --- a/packages/neo-one-build-tests/package.json +++ b/packages/neo-one-build-tests/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@babel/preset-env": "^7.6.3", "@neo-one/build-tools": "^1.0.0", - "@neo-one/logger": "^2.6.0", + "@neo-one/logger": "^2.6.1", "app-root-dir": "^1.0.2", "babel-jest": "^24.9.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-cli-common-node/CHANGELOG.json b/packages/neo-one-cli-common-node/CHANGELOG.json index 76704af21f..f4a2eb3612 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.json +++ b/packages/neo-one-cli-common-node/CHANGELOG.json @@ -1,6 +1,43 @@ { "name": "@neo-one/cli-common-node", "entries": [ + { + "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", diff --git a/packages/neo-one-cli-common-node/CHANGELOG.md b/packages/neo-one-cli-common-node/CHANGELOG.md index 6bbdfa69d7..dd035a72d5 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.md +++ b/packages/neo-one-cli-common-node/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @neo-one/cli-common-node -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 + +- bump package version for future release clarity ## 2.6.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 4f60f3e555..c95c10e08c 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common-node", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0", + "@neo-one/cli-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0", "@types/lodash": "^4.14.138", "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", diff --git a/packages/neo-one-cli-common/CHANGELOG.json b/packages/neo-one-cli-common/CHANGELOG.json index 16d3213494..ee473ee175 100644 --- a/packages/neo-one-cli-common/CHANGELOG.json +++ b/packages/neo-one-cli-common/CHANGELOG.json @@ -1,6 +1,36 @@ { "name": "@neo-one/cli-common", "entries": [ + { + "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", diff --git a/packages/neo-one-cli-common/CHANGELOG.md b/packages/neo-one-cli-common/CHANGELOG.md index 236d6d8b35..3cb9f8e49c 100644 --- a/packages/neo-one-cli-common/CHANGELOG.md +++ b/packages/neo-one-cli-common/CHANGELOG.md @@ -1,6 +1,22 @@ # Change Log - @neo-one/cli-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +### Updates + +- bump package version for future release clarity ## 2.6.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index 8a1adf388d..79a7256f43 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE code common to the cli and browser.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-cli/CHANGELOG.json b/packages/neo-one-cli/CHANGELOG.json index 9ee326f9a7..1f4b6b4a73 100644 --- a/packages/neo-one-cli/CHANGELOG.json +++ b/packages/neo-one-cli/CHANGELOG.json @@ -1,6 +1,75 @@ { "name": "@neo-one/cli", "entries": [ + { + "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", diff --git a/packages/neo-one-cli/CHANGELOG.md b/packages/neo-one-cli/CHANGELOG.md index 956d85e158..05feedaf4e 100644 --- a/packages/neo-one-cli/CHANGELOG.md +++ b/packages/neo-one-cli/CHANGELOG.md @@ -1,6 +1,29 @@ # Change Log - @neo-one/cli -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +### Updates + +- 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 diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index d4c971296c..643393d7b9 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE CLI for developing NEO dapps.", "main": "./dist/cjs/index", "scripts": { @@ -17,24 +17,24 @@ "dependencies": { "@babel/core": "^7.6.2", "@babel/register": "^7.5.5", - "@neo-one/cli-common": "^2.6.0", - "@neo-one/cli-common-node": "^2.6.0", - "@neo-one/client": "^2.6.0", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/logger-config": "^2.6.0", - "@neo-one/node": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-neo-settings": "^2.6.0", - "@neo-one/smart-contract-codegen": "^2.6.0", - "@neo-one/smart-contract-compiler": "^2.6.0", - "@neo-one/smart-contract-compiler-node": "^2.6.0", - "@neo-one/utils": "^2.6.0", - "@neo-one/utils-node": "^2.6.0", + "@neo-one/cli-common": "^2.7.0", + "@neo-one/cli-common-node": "^2.7.0", + "@neo-one/client": "^2.7.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/logger-config": "^2.6.1", + "@neo-one/node": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/smart-contract-codegen": "^2.7.0", + "@neo-one/smart-contract-compiler": "^2.7.0", + "@neo-one/smart-contract-compiler-node": "^2.7.0", + "@neo-one/utils": "^2.6.1", + "@neo-one/utils-node": "^2.6.1", "@types/listr": "^0.14.2", "@types/yargs": "^13.0.3", "bignumber.js": "^9.0.0", @@ -58,8 +58,8 @@ "devDependencies": { "@angular/core": "^8.2.7", "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract": "^2.6.0", - "@neo-one/smart-contract-test": "^2.6.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-test": "^2.7.0", "@neotracker/core": "1.4.1", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json index 0f17e7a87c..5c68b04f29 100644 --- a/packages/neo-one-client-common/CHANGELOG.json +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/client-common", "entries": [ + { + "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", diff --git a/packages/neo-one-client-common/CHANGELOG.md b/packages/neo-one-client-common/CHANGELOG.md index 209337e3b1..8aebd95bce 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/client-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.6.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index a6d5ab1208..0b1b1d0b7c 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/utils": "^2.6.1", "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json index 62f079207f..c97f87c156 100644 --- a/packages/neo-one-client-core/CHANGELOG.json +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -1,6 +1,37 @@ { "name": "@neo-one/client-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-core/CHANGELOG.md b/packages/neo-one-client-core/CHANGELOG.md index e4fa95d888..f34b59aa2d 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log - @neo-one/client-core -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### Patches + +- 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 diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 9bcafbf42e..5f583cd998 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-core", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-client-full-common/CHANGELOG.json b/packages/neo-one-client-full-common/CHANGELOG.json index e47cb5332d..1b8b23026e 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.json +++ b/packages/neo-one-client-full-common/CHANGELOG.json @@ -1,6 +1,28 @@ { "name": "@neo-one/client-full-common", "entries": [ + { + "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", diff --git a/packages/neo-one-client-full-common/CHANGELOG.md b/packages/neo-one-client-full-common/CHANGELOG.md index 64f8f3490d..0b279b5715 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.md +++ b/packages/neo-one-client-full-common/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-full-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index 0cc472dc42..33e46caf6e 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE full client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-client-full-core/CHANGELOG.json b/packages/neo-one-client-full-core/CHANGELOG.json index 056dddc9b7..715e6acfc4 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.json +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/client-full-core", "entries": [ + { + "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", diff --git a/packages/neo-one-client-full-core/CHANGELOG.md b/packages/neo-one-client-full-core/CHANGELOG.md index 961c2a5ae0..a74e2ebe51 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-full-core -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index 7143354334..e5e75b860e 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client-full core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,18 +13,18 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-common": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/utils": "^2.6.1", "bignumber.js": "^9.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-core": "^2.6.0", + "@neo-one/node-core": "^2.7.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@types/bn.js": "^4.11.5", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-client-full/CHANGELOG.json b/packages/neo-one-client-full/CHANGELOG.json index 2caea82c47..e25c9a47cb 100644 --- a/packages/neo-one-client-full/CHANGELOG.json +++ b/packages/neo-one-client-full/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/client-full", "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/client-full_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/client-full_v2.5.0", diff --git a/packages/neo-one-client-full/CHANGELOG.md b/packages/neo-one-client-full/CHANGELOG.md index fa3585764d..103c77cff7 100644 --- a/packages/neo-one-client-full/CHANGELOG.md +++ b/packages/neo-one-client-full/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-full -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index b583f009d2..c3960e8c34 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client extended API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0" + "@neo-one/client": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.json b/packages/neo-one-client-switch/CHANGELOG.json index df84170bb2..466358e062 100644 --- a/packages/neo-one-client-switch/CHANGELOG.json +++ b/packages/neo-one-client-switch/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/client-switch", "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/client-switch_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/node-vm 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-switch_v2.5.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.md b/packages/neo-one-client-switch/CHANGELOG.md index fec5b71cf4..851a600459 100644 --- a/packages/neo-one-client-switch/CHANGELOG.md +++ b/packages/neo-one-client-switch/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-switch -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 2696fe2030..18f996ef77 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-switch", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client library for browser/node differences.", "main": "./dist/cjs/index", "browser": "./dist/cjs/index.browser", @@ -16,9 +16,9 @@ "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.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", + "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", "source-map": "^0.7.3", diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json index 3f8ff59686..1f7005af43 100644 --- a/packages/neo-one-client/CHANGELOG.json +++ b/packages/neo-one-client/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/client", "entries": [ + { + "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", diff --git a/packages/neo-one-client/CHANGELOG.md b/packages/neo-one-client/CHANGELOG.md index f87aaf2b9d..f7abd88aa4 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/client -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### Patches + +- fix #1997 +- 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 diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index 579b9180a4..1af514faae 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE client API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/developer-tools": "^2.6.0" + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/developer-tools": "^2.7.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 6d8df01c6b..8a370b9b1c 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -14,11 +14,11 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/react": "^2.6.0", - "@neo-one/react-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@reactivex/ix-esnext-esm": "^2.5.3", "@render-props/size-observer": "^0.1.18", "bignumber.js": "^9.0.0", diff --git a/packages/neo-one-developer-tools/CHANGELOG.json b/packages/neo-one-developer-tools/CHANGELOG.json index 1bccc476ae..2b67dc2942 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.json +++ b/packages/neo-one-developer-tools/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/developer-tools", "entries": [ + { + "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", diff --git a/packages/neo-one-developer-tools/CHANGELOG.md b/packages/neo-one-developer-tools/CHANGELOG.md index 306252cc5b..fac8a5c0a5 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.md +++ b/packages/neo-one-developer-tools/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/developer-tools -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index 27eff60370..9f58d6fbeb 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/developer-tools", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE developer tools.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.6.0", + "@neo-one/client-core": "^2.7.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index c60ed15713..701ef50ff6 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/http": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/utils": "^2.6.0", - "@neo-one/utils-node": "^2.6.0", + "@neo-one/http": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^2.6.1", + "@neo-one/utils-node": "^2.6.1", "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index e16f6a97d2..d2765f9ae8 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -28,17 +28,17 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", - "@neo-one/client": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", + "@neo-one/client": "^2.7.0", + "@neo-one/client-switch": "^2.7.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.6.0", - "@neo-one/react-common": "^2.6.0", - "@neo-one/smart-contract-compiler": "^2.6.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^2.7.0", + "@neo-one/smart-contract-compiler": "^2.7.0", "@neo-one/smart-contract-test-browser": "^2.3.1", - "@neo-one/utils": "^2.6.0", + "@neo-one/utils": "^2.6.1", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", diff --git a/packages/neo-one-http-context/CHANGELOG.json b/packages/neo-one-http-context/CHANGELOG.json index 9280912093..e834c20fdd 100644 --- a/packages/neo-one-http-context/CHANGELOG.json +++ b/packages/neo-one-http-context/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/http-context", "entries": [ + { + "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", diff --git a/packages/neo-one-http-context/CHANGELOG.md b/packages/neo-one-http-context/CHANGELOG.md index 54b64fdfc8..4e2f43b3d0 100644 --- a/packages/neo-one-http-context/CHANGELOG.md +++ b/packages/neo-one-http-context/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/http-context -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index 9e9097e21e..b774857a78 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http-context", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE http context utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^2.6.1", "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-http/CHANGELOG.json b/packages/neo-one-http/CHANGELOG.json index f8a8a63d1b..e65dd68130 100644 --- a/packages/neo-one-http/CHANGELOG.json +++ b/packages/neo-one-http/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-http/CHANGELOG.md b/packages/neo-one-http/CHANGELOG.md index 32aa03090e..900742680b 100644 --- a/packages/neo-one-http/CHANGELOG.md +++ b/packages/neo-one-http/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/http -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-http/package.json b/packages/neo-one-http/package.json index 495c4a37ed..5b53ae7b90 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE http utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 80ecd648e3..e0a826e4a3 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -11,13 +11,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.6.0", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", + "@neo-one/cli-common": "^2.7.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", "@neo-one/node-browser": "^2.3.0", - "@neo-one/smart-contract-codegen": "^2.6.0", - "@neo-one/smart-contract-compiler": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/smart-contract-codegen": "^2.7.0", + "@neo-one/smart-contract-compiler": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "lodash": "^4.17.15", diff --git a/packages/neo-one-logger-config/CHANGELOG.json b/packages/neo-one-logger-config/CHANGELOG.json index c73505de44..e9c57db7ae 100644 --- a/packages/neo-one-logger-config/CHANGELOG.json +++ b/packages/neo-one-logger-config/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-logger-config/CHANGELOG.md b/packages/neo-one-logger-config/CHANGELOG.md index 40b2f3ab89..594d998b49 100644 --- a/packages/neo-one-logger-config/CHANGELOG.md +++ b/packages/neo-one-logger-config/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/logger-config -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index 60abf7a99a..959050cfce 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger-config", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE logging utility config", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-logger/CHANGELOG.json b/packages/neo-one-logger/CHANGELOG.json index 12a580bdc2..7365a6ad92 100644 --- a/packages/neo-one-logger/CHANGELOG.json +++ b/packages/neo-one-logger/CHANGELOG.json @@ -1,6 +1,31 @@ { "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", diff --git a/packages/neo-one-logger/CHANGELOG.md b/packages/neo-one-logger/CHANGELOG.md index 649f2f478b..1f17b04c97 100644 --- a/packages/neo-one-logger/CHANGELOG.md +++ b/packages/neo-one-logger/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/logger -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index c75c25f381..8fa8f09b32 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/logger", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE logging utility", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger-config": "^2.6.0", + "@neo-one/logger-config": "^2.6.1", "@types/pino": "^5.8.9", "pino": "^5.12.6", "pino-pretty": "^3.2.1", diff --git a/packages/neo-one-node-bin/CHANGELOG.json b/packages/neo-one-node-bin/CHANGELOG.json index 317a767157..c3de6c92cc 100644 --- a/packages/neo-one-node-bin/CHANGELOG.json +++ b/packages/neo-one-node-bin/CHANGELOG.json @@ -1,6 +1,43 @@ { "name": "@neo-one/node-bin", "entries": [ + { + "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", diff --git a/packages/neo-one-node-bin/CHANGELOG.md b/packages/neo-one-node-bin/CHANGELOG.md index d4a084aca2..1a76124953 100644 --- a/packages/neo-one-node-bin/CHANGELOG.md +++ b/packages/neo-one-node-bin/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-bin -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index 1e67dfc146..b8784f9c1a 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-bin", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO executable full node.", "bin": { "neo-one-node": "bin/neo-one-node.js" @@ -14,11 +14,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger": "^2.6.0", - "@neo-one/node": "^2.6.0", - "@neo-one/node-neo-settings": "^2.6.0", - "@neo-one/utils": "^2.6.0", - "@neo-one/utils-node": "^2.6.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node": "^2.7.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/utils": "^2.6.1", + "@neo-one/utils-node": "^2.6.1", "@types/yargs": "^13.0.3", "env-paths": "^2.2.0", "execa": "^3.2.0", @@ -31,8 +31,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.6.0", - "@neo-one/client-common": "^2.6.0", + "@neo-one/client": "^2.7.0", + "@neo-one/client-common": "^2.7.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", "@types/rc": "^1.1.0", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.json b/packages/neo-one-node-blockchain/CHANGELOG.json index 6797d3333b..84bb3a7e2b 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.json +++ b/packages/neo-one-node-blockchain/CHANGELOG.json @@ -1,6 +1,40 @@ { "name": "@neo-one/node-blockchain", "entries": [ + { + "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", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.md b/packages/neo-one-node-blockchain/CHANGELOG.md index a5a9f4c150..acad3ef8e0 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.md +++ b/packages/neo-one-node-blockchain/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-blockchain -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 6a4ae5ed00..8f4fd5d08c 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-blockchain", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO blockchain implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,11 +13,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index 76b83ccb3b..eaa812486a 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -11,16 +11,16 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/node-blockchain": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-neo-settings": "^2.6.0", - "@neo-one/node-protocol": "^2.6.0", - "@neo-one/node-rpc-handler": "^2.6.0", - "@neo-one/node-storage-levelup": "^2.6.0", - "@neo-one/node-vm": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/node-blockchain": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/node-protocol": "^2.7.0", + "@neo-one/node-rpc-handler": "^2.7.0", + "@neo-one/node-storage-levelup": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", + "@neo-one/utils": "^2.6.1", "core-js": "^3.2.1", "level-js": "^5.0.0", "levelup": "^4.1.0", diff --git a/packages/neo-one-node-consensus/CHANGELOG.json b/packages/neo-one-node-consensus/CHANGELOG.json index b4d27ec5f8..c644b10c40 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.json +++ b/packages/neo-one-node-consensus/CHANGELOG.json @@ -1,6 +1,37 @@ { "name": "@neo-one/node-consensus", "entries": [ + { + "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", diff --git a/packages/neo-one-node-consensus/CHANGELOG.md b/packages/neo-one-node-consensus/CHANGELOG.md index ec49357831..0c000d060b 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.md +++ b/packages/neo-one-node-consensus/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-consensus -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index 57b2343b13..4c53fcdab9 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-consensus", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-node-core/CHANGELOG.json b/packages/neo-one-node-core/CHANGELOG.json index e0f070cd7a..b9dec57a36 100644 --- a/packages/neo-one-node-core/CHANGELOG.json +++ b/packages/neo-one-node-core/CHANGELOG.json @@ -1,6 +1,40 @@ { "name": "@neo-one/node-core", "entries": [ + { + "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", diff --git a/packages/neo-one-node-core/CHANGELOG.md b/packages/neo-one-node-core/CHANGELOG.md index 8b564aee25..8f815f0a56 100644 --- a/packages/neo-one-node-core/CHANGELOG.md +++ b/packages/neo-one-node-core/CHANGELOG.md @@ -1,6 +1,19 @@ # Change Log - @neo-one/node-core -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +### Updates + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index 530d94aae9..aa3ba2a1ab 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-core", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE core node types.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-full-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.json b/packages/neo-one-node-http-rpc/CHANGELOG.json index bf5bf662b4..c7261429f6 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.json +++ b/packages/neo-one-node-http-rpc/CHANGELOG.json @@ -1,6 +1,43 @@ { "name": "@neo-one/node-http-rpc", "entries": [ + { + "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", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.md b/packages/neo-one-node-http-rpc/CHANGELOG.md index d1dc49054d..a71c6c5092 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.md +++ b/packages/neo-one-node-http-rpc/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-http-rpc -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index c646c37836..3265991530 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE RPC server.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,13 +13,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common-node": "^2.6.0", - "@neo-one/http": "^2.6.0", - "@neo-one/http-context": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-rpc-handler": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/cli-common-node": "^2.7.0", + "@neo-one/http": "^2.7.0", + "@neo-one/http-context": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-rpc-handler": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/koa": "^2.0.49", "@types/koa-compose": "^3.2.4", "cross-fetch": "^3.0.4", diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.json b/packages/neo-one-node-neo-settings/CHANGELOG.json index bc407fd4bf..18269f6f05 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.json +++ b/packages/neo-one-node-neo-settings/CHANGELOG.json @@ -1,6 +1,34 @@ { "name": "@neo-one/node-neo-settings", "entries": [ + { + "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", diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.md b/packages/neo-one-node-neo-settings/CHANGELOG.md index 3d9f0fb7b0..104eb1c1a1 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.md +++ b/packages/neo-one-node-neo-settings/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-neo-settings -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index 24220cad30..e3ef1d36cd 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/bn.js": "^4.11.5", "@types/lodash": "^4.14.138", "bn.js": "^5.0.0", diff --git a/packages/neo-one-node-network/CHANGELOG.json b/packages/neo-one-node-network/CHANGELOG.json index 04d203f78f..9bc3b4374c 100644 --- a/packages/neo-one-node-network/CHANGELOG.json +++ b/packages/neo-one-node-network/CHANGELOG.json @@ -1,6 +1,34 @@ { "name": "@neo-one/node-network", "entries": [ + { + "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", diff --git a/packages/neo-one-node-network/CHANGELOG.md b/packages/neo-one-node-network/CHANGELOG.md index 6594e8b254..b2542a9c39 100644 --- a/packages/neo-one-node-network/CHANGELOG.md +++ b/packages/neo-one-node-network/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-network -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index 92c8378a48..5d19bf8a0d 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-network", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO network protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-offline/CHANGELOG.json b/packages/neo-one-node-offline/CHANGELOG.json index c567190176..0cec9a019f 100644 --- a/packages/neo-one-node-offline/CHANGELOG.json +++ b/packages/neo-one-node-offline/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/node-offline", "entries": [ + { + "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", diff --git a/packages/neo-one-node-offline/CHANGELOG.md b/packages/neo-one-node-offline/CHANGELOG.md index 24a024c4ec..1044457d3d 100644 --- a/packages/neo-one-node-offline/CHANGELOG.md +++ b/packages/neo-one-node-offline/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-offline -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index d8676e4ae1..4a152882a2 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-offline", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-protocol/CHANGELOG.json b/packages/neo-one-node-protocol/CHANGELOG.json index c5bfcf4c05..118f2509d5 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.json +++ b/packages/neo-one-node-protocol/CHANGELOG.json @@ -1,6 +1,43 @@ { "name": "@neo-one/node-protocol", "entries": [ + { + "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", diff --git a/packages/neo-one-node-protocol/CHANGELOG.md b/packages/neo-one-node-protocol/CHANGELOG.md index 8922b3d5c2..bd272a5702 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.md +++ b/packages/neo-one-node-protocol/CHANGELOG.md @@ -1,6 +1,19 @@ # Change Log - @neo-one/node-protocol -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +### Updates + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index e4b9ef6e07..d97055551f 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-protocol", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO node and consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,12 +13,12 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-consensus": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-consensus": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/bloom-filter": "^0.2.0", "@types/bn.js": "^4.11.5", "@types/ip-address": "^5.8.2", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.json b/packages/neo-one-node-rpc-handler/CHANGELOG.json index 2f1dc2cfb2..9087fbdf05 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.json +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.json @@ -1,6 +1,40 @@ { "name": "@neo-one/node-rpc-handler", "entries": [ + { + "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", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.md b/packages/neo-one-node-rpc-handler/CHANGELOG.md index e96015b6b9..c51cfca4a1 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.md +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-rpc-handler -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### Patches + +- 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 diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index cba3535413..5cfa323cf0 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE RPC handler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,11 +13,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.json b/packages/neo-one-node-storage-cache/CHANGELOG.json index 569f94e605..7c55a5db5f 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.json +++ b/packages/neo-one-node-storage-cache/CHANGELOG.json @@ -1,6 +1,34 @@ { "name": "@neo-one/node-storage-cache", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.md b/packages/neo-one-node-storage-cache/CHANGELOG.md index 3cfda229e8..284812cfae 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.md +++ b/packages/neo-one-node-storage-cache/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-storage-cache -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 64d79c1563..081f0cb08b 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE node storage cache.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-storage-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-storage-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/lru-cache": "^5.1.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-node-storage-common/CHANGELOG.json b/packages/neo-one-node-storage-common/CHANGELOG.json index b7dea86d48..20bf6c30b0 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.json +++ b/packages/neo-one-node-storage-common/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/node-storage-common", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-common/CHANGELOG.md b/packages/neo-one-node-storage-common/CHANGELOG.md index 8935998277..b4f4e7bce0 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.md +++ b/packages/neo-one-node-storage-common/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-storage-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index b4c6481184..384c1816c9 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE node storage common.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.json b/packages/neo-one-node-storage-levelup/CHANGELOG.json index d1fd2e8c6c..14a0deccdb 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.json +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/node-storage-levelup", "entries": [ + { + "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", diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.md b/packages/neo-one-node-storage-levelup/CHANGELOG.md index 149ccfeb61..7fb50a0abb 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.md +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-storage-levelup -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index d9b65470dd..6eca48df66 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE levelup node storage.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-storage-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-storage-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/levelup": "^3.1.1", "levelup": "^4.1.0", "rxjs": "^6.5.3", diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 3e68eeb070..0502bbd9e3 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -15,8 +15,8 @@ "sideEffects": false, "dependencies": { "@google-cloud/storage": "^4.3.2", - "@neo-one/logger": "^2.6.0", - "@neo-one/utils-node": "^2.6.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils-node": "^2.6.1", "execa": "^3.2.0", "import-local": "^3.0.2", "rc": "^1.2.8", diff --git a/packages/neo-one-node-vm/CHANGELOG.json b/packages/neo-one-node-vm/CHANGELOG.json index 9462a2f0ea..2aef48e09b 100644 --- a/packages/neo-one-node-vm/CHANGELOG.json +++ b/packages/neo-one-node-vm/CHANGELOG.json @@ -1,6 +1,37 @@ { "name": "@neo-one/node-vm", "entries": [ + { + "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", diff --git a/packages/neo-one-node-vm/CHANGELOG.md b/packages/neo-one-node-vm/CHANGELOG.md index fbb59464f1..c709b03f25 100644 --- a/packages/neo-one-node-vm/CHANGELOG.md +++ b/packages/neo-one-node-vm/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node-vm -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 407f705bf1..5ade0a1f0f 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-vm", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO VM.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-full-common": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@reactivex/ix-es2015-cjs": "^2.5.3", "@reactivex/ix-esnext-esm": "^2.5.3", "@types/bn.js": "^4.11.5", diff --git a/packages/neo-one-node/CHANGELOG.json b/packages/neo-one-node/CHANGELOG.json index 476cc8aab9..1424a074d5 100644 --- a/packages/neo-one-node/CHANGELOG.json +++ b/packages/neo-one-node/CHANGELOG.json @@ -1,6 +1,37 @@ { "name": "@neo-one/node", "entries": [ + { + "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", diff --git a/packages/neo-one-node/CHANGELOG.md b/packages/neo-one-node/CHANGELOG.md index 539cdea5a6..f7507af60e 100644 --- a/packages/neo-one-node/CHANGELOG.md +++ b/packages/neo-one-node/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/node -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 174403b00d..38419fe38a 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE NEO full node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,17 +13,17 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/node-blockchain": "^2.6.0", - "@neo-one/node-core": "^2.6.0", - "@neo-one/node-http-rpc": "^2.6.0", - "@neo-one/node-network": "^2.6.0", - "@neo-one/node-offline": "^2.6.0", - "@neo-one/node-protocol": "^2.6.0", - "@neo-one/node-storage-levelup": "^2.6.0", - "@neo-one/node-vm": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-blockchain": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/node-http-rpc": "^2.7.0", + "@neo-one/node-network": "^2.7.0", + "@neo-one/node-offline": "^2.7.0", + "@neo-one/node-protocol": "^2.7.0", + "@neo-one/node-storage-levelup": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@types/abstract-leveldown": "^5.0.1", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", diff --git a/packages/neo-one-react-common/CHANGELOG.json b/packages/neo-one-react-common/CHANGELOG.json index 0ced2fb190..37fa0e7974 100644 --- a/packages/neo-one-react-common/CHANGELOG.json +++ b/packages/neo-one-react-common/CHANGELOG.json @@ -1,6 +1,26 @@ { "name": "@neo-one/react-common", "entries": [ + { + "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", diff --git a/packages/neo-one-react-common/CHANGELOG.md b/packages/neo-one-react-common/CHANGELOG.md index f154ce66af..3e449e37d5 100644 --- a/packages/neo-one-react-common/CHANGELOG.md +++ b/packages/neo-one-react-common/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/react-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index 2ec45aa506..f8f8177d00 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -17,7 +17,7 @@ "dependencies": { "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", - "@neo-one/react-core": "^2.6.0", + "@neo-one/react-core": "^2.7.0", "@types/react": "^16.9.15", "popper.js": "^1.15.0", "react": "^16.12.0", diff --git a/packages/neo-one-react-core/CHANGELOG.json b/packages/neo-one-react-core/CHANGELOG.json index 0e767c9bc6..0d9459fd17 100644 --- a/packages/neo-one-react-core/CHANGELOG.json +++ b/packages/neo-one-react-core/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-react-core/CHANGELOG.md b/packages/neo-one-react-core/CHANGELOG.md index 81fba3867c..7a9ef8ba0b 100644 --- a/packages/neo-one-react-core/CHANGELOG.md +++ b/packages/neo-one-react-core/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/react-core -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index 8934b6ceef..9703965291 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-core", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-react/CHANGELOG.json b/packages/neo-one-react/CHANGELOG.json index 70325a459b..1a871665e8 100644 --- a/packages/neo-one-react/CHANGELOG.json +++ b/packages/neo-one-react/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-react/CHANGELOG.md b/packages/neo-one-react/CHANGELOG.md index dfdc728ef7..87b1e9b2ee 100644 --- a/packages/neo-one-react/CHANGELOG.md +++ b/packages/neo-one-react/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/react -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-react/package.json b/packages/neo-one-react/package.json index 63e444deea..b7c32a24cd 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE React utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.json b/packages/neo-one-smart-contract-codegen/CHANGELOG.json index 8fa6e2d9f0..b52370ed65 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.json +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.json @@ -1,6 +1,28 @@ { "name": "@neo-one/smart-contract-codegen", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.md b/packages/neo-one-smart-contract-codegen/CHANGELOG.md index e6f2d4a1bd..4a96d32425 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.md +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-codegen -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### Patches + +- fix #1997 + +### Updates + +- bump package version for future release clarity ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index 43d10a7245..e036f530f2 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript smart contract codegen.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.6.0", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/cli-common": "^2.7.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "prettier": "^2.0.1", "safe-stable-stringify": "^1.1.0", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json index 6324e2f4fb..52602ae50e 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json @@ -1,6 +1,28 @@ { "name": "@neo-one/smart-contract-compiler-node", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md index b32be03f9d..980e5b1a27 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-compiler-node -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 05e0241790..a8cecf9185 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript smart contract compiler node host.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.6.0", - "@neo-one/smart-contract-lib": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-lib": "^2.7.0", + "@neo-one/utils": "^2.6.1", "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.json b/packages/neo-one-smart-contract-compiler/CHANGELOG.json index 8a0d2ac8f0..85bfc88193 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.json @@ -1,6 +1,63 @@ { "name": "@neo-one/smart-contract-compiler", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.md b/packages/neo-one-smart-contract-compiler/CHANGELOG.md index 6881982ff0..568182a5d2 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.md @@ -1,6 +1,25 @@ # Change Log - @neo-one/smart-contract-compiler -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### Minor changes + +- 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 ## 2.5.0 Wed, 20 May 2020 07:03:14 GMT diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index c4c237889e..2c950a8dc6 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript smart contract compiler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,14 +14,14 @@ "sideEffects": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-common": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0", - "@neo-one/smart-contract": "^2.6.0", - "@neo-one/ts-utils": "^2.6.0", - "@neo-one/typescript-concatenator": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/ts-utils": "^2.6.1", + "@neo-one/typescript-concatenator": "^2.6.1", + "@neo-one/utils": "^2.6.1", "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "lodash": "^4.17.15", @@ -32,12 +32,12 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-switch": "^2.6.0", - "@neo-one/node-blockchain": "^2.6.0", - "@neo-one/node-neo-settings": "^2.6.0", - "@neo-one/node-storage-levelup": "^2.6.0", - "@neo-one/node-vm": "^2.6.0", - "@neo-one/smart-contract-compiler-node": "^2.6.0", + "@neo-one/client-switch": "^2.7.0", + "@neo-one/node-blockchain": "^2.7.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/node-storage-levelup": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", + "@neo-one/smart-contract-compiler-node": "^2.7.0", "@types/app-root-dir": "^0.1.0", "@types/babel__code-frame": "^7.0.1", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.json b/packages/neo-one-smart-contract-lib/CHANGELOG.json index 81078ee30e..4e796ac00b 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.json +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/smart-contract-lib", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.md b/packages/neo-one-smart-contract-lib/CHANGELOG.md index 5d3e515be0..93066340b2 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.md +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-lib -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 9bc0943175..2255d25863 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript common smart contracts.", "main": "./src/index.ts", "smartContract": true, @@ -10,11 +10,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.6.0" + "@neo-one/smart-contract": "^2.7.0" }, "devDependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index c2f6409fcf..353346bac0 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -11,12 +11,12 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.6.0", + "@neo-one/client-core": "^2.7.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.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/smart-contract-test-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "@neo-one/worker": "^2.3.0", "core-js": "^3.2.1", "tslib": "^1.10.0" diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.json b/packages/neo-one-smart-contract-test-common/CHANGELOG.json index 1316628fdb..ed8d8fa314 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/smart-contract-test-common", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.md b/packages/neo-one-smart-contract-test-common/CHANGELOG.md index beca4794b7..2f70a5166c 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-test-common -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index af1747f8f1..162a404141 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript smart contract test harness common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,13 +13,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.6.0", - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/client-full-core": "^2.6.0", - "@neo-one/logger": "^2.6.0", - "@neo-one/smart-contract-compiler": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/cli-common": "^2.7.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/client-full-core": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/smart-contract-compiler": "^2.7.0", + "@neo-one/utils": "^2.6.1", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.json b/packages/neo-one-smart-contract-test/CHANGELOG.json index 7e51564e38..c2d64f15e5 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test/CHANGELOG.json @@ -1,6 +1,34 @@ { "name": "@neo-one/smart-contract-test", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.md b/packages/neo-one-smart-contract-test/CHANGELOG.md index ed8d79b44b..4a2b07e299 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-test -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index e539519180..2207fcc5d3 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript smart contract test harness.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,21 +13,21 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.6.0", - "@neo-one/client-core": "^2.6.0", - "@neo-one/node": "^2.6.0", - "@neo-one/node-neo-settings": "^2.6.0", - "@neo-one/smart-contract-compiler-node": "^2.6.0", - "@neo-one/smart-contract-test-common": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/client-common": "^2.7.0", + "@neo-one/client-core": "^2.7.0", + "@neo-one/node": "^2.7.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/smart-contract-compiler-node": "^2.7.0", + "@neo-one/smart-contract-test-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "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.6.0", - "@neo-one/smart-contract-lib": "^2.6.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-lib": "^2.7.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/memdown": "^3.0.0", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json index 6bc2261e41..cf43e7ff06 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/smart-contract-typescript-plugin", "entries": [ + { + "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", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md index 64595110f3..d9bd2e9e48 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-typescript-plugin -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index 1fb9adc09f..227ee206db 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE TypeScript typescript plugin.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.6.0", - "@neo-one/smart-contract-compiler-node": "^2.6.0", + "@neo-one/smart-contract-compiler": "^2.7.0", + "@neo-one/smart-contract-compiler-node": "^2.7.0", "typescript": "3.9.5" }, "devDependencies": { diff --git a/packages/neo-one-smart-contract/CHANGELOG.json b/packages/neo-one-smart-contract/CHANGELOG.json index ef2b41e8ea..2a02267797 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.json +++ b/packages/neo-one-smart-contract/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-smart-contract/CHANGELOG.md b/packages/neo-one-smart-contract/CHANGELOG.md index 004fbc53c2..5e69ba1faf 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.md +++ b/packages/neo-one-smart-contract/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT + +### 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 diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index 09efaff5b9..00bc819fc5 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract", - "version": "2.6.0", + "version": "2.7.0", "description": "NEO•ONE smart contract apis.", "main": "./src/index.d.ts", "scripts": { diff --git a/packages/neo-one-suite/CHANGELOG.json b/packages/neo-one-suite/CHANGELOG.json index 216ea5b055..147d3eedd7 100644 --- a/packages/neo-one-suite/CHANGELOG.json +++ b/packages/neo-one-suite/CHANGELOG.json @@ -1,6 +1,43 @@ { "name": "@neo-one/suite", "entries": [ + { + "version": "2.6.1", + "tag": "@neo-one/suite_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/cli version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/smart-contract version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/smart-contract-lib version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/smart-contract-test version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/smart-contract-typescript-plugin version bump from ^2.6.0 to ^2.7.0." + } + ], + "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/suite_v2.5.0", diff --git a/packages/neo-one-suite/CHANGELOG.md b/packages/neo-one-suite/CHANGELOG.md index ad5dadbcd8..756af25a3b 100644 --- a/packages/neo-one-suite/CHANGELOG.md +++ b/packages/neo-one-suite/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/suite -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json index 8a0d7a5770..643b90814d 100644 --- a/packages/neo-one-suite/package.json +++ b/packages/neo-one-suite/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/suite", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE core dependencies for easy installation", "scripts": { "build": "", @@ -10,12 +10,12 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli": "^2.6.0", - "@neo-one/client": "^2.6.0", - "@neo-one/smart-contract": "^2.6.0", - "@neo-one/smart-contract-lib": "^2.6.0", - "@neo-one/smart-contract-test": "^2.6.0", - "@neo-one/smart-contract-typescript-plugin": "^2.6.0" + "@neo-one/cli": "^2.7.0", + "@neo-one/client": "^2.7.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-lib": "^2.7.0", + "@neo-one/smart-contract-test": "^2.7.0", + "@neo-one/smart-contract-typescript-plugin": "^2.7.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-ts-utils/CHANGELOG.json b/packages/neo-one-ts-utils/CHANGELOG.json index 36f923b4d9..316e7dd29b 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.json +++ b/packages/neo-one-ts-utils/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-ts-utils/CHANGELOG.md b/packages/neo-one-ts-utils/CHANGELOG.md index 4b64907d2c..e14779830d 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.md +++ b/packages/neo-one-ts-utils/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/ts-utils -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index 6e9dd4acdf..228f7fc9f9 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/ts-utils", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE TypeScript utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.json b/packages/neo-one-typescript-concatenator/CHANGELOG.json index a2eacd1656..05c3757201 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.json +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.json @@ -1,6 +1,34 @@ { "name": "@neo-one/typescript-concatenator", "entries": [ + { + "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", diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.md b/packages/neo-one-typescript-concatenator/CHANGELOG.md index 728dbf2a76..815648334f 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.md +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/typescript-concatenator -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index 323deb6f67..4d51796ef4 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE TypeScript Concatenator", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/ts-utils": "^2.6.0", - "@neo-one/utils": "^2.6.0", + "@neo-one/ts-utils": "^2.6.1", + "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", @@ -22,7 +22,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract-compiler-node": "^2.6.0", + "@neo-one/smart-contract-compiler-node": "^2.7.0", "@types/app-root-dir": "^0.1.0", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", diff --git a/packages/neo-one-utils-node/CHANGELOG.json b/packages/neo-one-utils-node/CHANGELOG.json index 17c5cd3309..bde3c0c2a3 100644 --- a/packages/neo-one-utils-node/CHANGELOG.json +++ b/packages/neo-one-utils-node/CHANGELOG.json @@ -1,6 +1,31 @@ { "name": "@neo-one/utils-node", "entries": [ + { + "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", diff --git a/packages/neo-one-utils-node/CHANGELOG.md b/packages/neo-one-utils-node/CHANGELOG.md index 777b7dafd0..d69e6fb0e9 100644 --- a/packages/neo-one-utils-node/CHANGELOG.md +++ b/packages/neo-one-utils-node/CHANGELOG.md @@ -1,6 +1,14 @@ # Change Log - @neo-one/utils-node -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 31866cf8d0..365eeffc5e 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils-node", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE shared Nodejs utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/utils": "^2.6.0", + "@neo-one/utils": "^2.6.1", "@types/pino": "^5.8.9", "@types/yargs": "^13.0.3", "execa": "^3.2.0", diff --git a/packages/neo-one-utils/CHANGELOG.json b/packages/neo-one-utils/CHANGELOG.json index 42ef23a6d5..d548707196 100644 --- a/packages/neo-one-utils/CHANGELOG.json +++ b/packages/neo-one-utils/CHANGELOG.json @@ -1,6 +1,23 @@ { "name": "@neo-one/utils", "entries": [ + { + "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", diff --git a/packages/neo-one-utils/CHANGELOG.md b/packages/neo-one-utils/CHANGELOG.md index 616638e34c..db5fc2c59e 100644 --- a/packages/neo-one-utils/CHANGELOG.md +++ b/packages/neo-one-utils/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/utils -This log was last generated on Wed, 20 May 2020 07:03:14 GMT and should not be manually modified. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. + +## 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 diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index ba2c00e19f..46861e9d51 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils", - "version": "2.6.0", + "version": "2.6.1", "description": "NEO•ONE shared utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 962c4672fe..45e73f1197 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -20,8 +20,8 @@ "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", "@neo-one/editor": "^2.3.1", - "@neo-one/react": "^2.6.0", - "@neo-one/react-common": "^2.6.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^2.7.0", "@reach/router": "^1.2.1", "@render-props/viewport": "^0.3.1", "babel-plugin-emotion": "^10.0.21", @@ -70,8 +70,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.6.0", - "@neo-one/react-core": "^2.6.0", + "@neo-one/client": "^2.7.0", + "@neo-one/react-core": "^2.7.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", "@types/jest": "^24.0.18", From 4b7c09c1558780d482f90d42b37250290af68e32 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 24 Jul 2020 12:00:23 -0700 Subject: [PATCH 083/141] fix(website): minor fixes to blog post (#2124) --- .../blog/2020-07-23-neo-one-2-7-announcement.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 index f1588c87a5..d24fe09332 100644 --- 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 @@ -16,8 +16,8 @@ To get started with NEO•ONE you can install our CLI with 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 install @neo-one/cli` -`yarn neo-one init` +`yarn install @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 @@ -39,8 +39,8 @@ In continuing with our efforts to keep NEO•ONE up to date with Typescript we h We’ve added several new sections of documentation to the website: - [Deployment documentation](/docs/deployment) -- [The NEO•ONE CLI](/docs/cli) -- [Network configuration](/docs/configuration-options) +- [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) @@ -54,7 +54,7 @@ In NEO•ONE 2.7 several bugs have been fixed and features have been updated. Yo - [#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) +- [#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) From a85a56c39dc3fa86bc9c887cba8ec5f44d8c2082 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 24 Jul 2020 14:49:26 -0700 Subject: [PATCH 084/141] feat(docs): add docs for codebase overview (#2125) --- .../2020-07-23-neo-one-2-7-announcement.md | 2 +- .../docs/0-installation/2-cli.md | 2 +- .../4-contributing/1-codebase-overview.md | 274 +++++++++++++++++- 3 files changed, 275 insertions(+), 3 deletions(-) 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 index d24fe09332..0f4384110e 100644 --- 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 @@ -39,7 +39,7 @@ In continuing with our efforts to keep NEO•ONE up to date with Typescript we h We’ve added several new sections of documentation to the website: - [Deployment documentation](/docs/deployment) -- [The NEO•ONE CLI](/docs/CLI) +- [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) diff --git a/packages/neo-one-website/docs/0-installation/2-cli.md b/packages/neo-one-website/docs/0-installation/2-cli.md index 27742281f9..1ceb3b3472 100644 --- a/packages/neo-one-website/docs/0-installation/2-cli.md +++ b/packages/neo-one-website/docs/0-installation/2-cli.md @@ -1,5 +1,5 @@ --- -slug: CLI +slug: cli title: CLI --- 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..2457094bb4 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,276 @@ 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-suite + +A simple user-friendly package that downloads `@neo-one/cli`, `@neo-one/client`, `@neo-one/smart-contract`, +`@neo-one/smart-contract-lib`, `@neo-one/smart-contract-test`, `@neo-one/smart-contract-typescript-plugin` +for easy startup. + +### 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. From 95ff36271f41db5c0d2b682eb2af2db1bcfdae43 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 24 Jul 2020 23:37:46 -0700 Subject: [PATCH 085/141] fix(docs): fix config doc (#2126) --- .../09-configuration-options.md | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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 6456b081ba..7231e809ab 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 @@ -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. @@ -113,12 +123,12 @@ export default { return new LocalUserAccountProvider({ keystore, - provider: new NEOONEProvider([{ network: 'exampleNetwork', rpcUrl: 'exampleRpcUrl.io/rpc'}]) - }) - } - } + provider: new NEOONEProvider([{ network: 'exampleNetwork', rpcUrl: 'exampleRpcUrl.io/rpc' }]), + }); + }, + }, // ... -} +}; ``` ::: warning From c6fbdd0f40db599a15e3b7fa477b783df4993a7f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 27 Jul 2020 13:36:41 -0700 Subject: [PATCH 086/141] fix(website): pin level-js and levelup for web courses issue (#2128) --- .../fix-web_2020-07-27-19-51.json | 11 ++ .../node/fix-web_2020-07-27-19-51.json | 11 ++ .../fix-web_2020-07-27-19-51.json | 11 ++ common/config/rush/yarn.lock | 172 ++++-------------- packages/neo-one-node-browser/package.json | 4 +- .../neo-one-node-storage-levelup/package.json | 2 +- packages/neo-one-node/package.json | 2 +- .../package.json | 2 +- 8 files changed, 78 insertions(+), 137 deletions(-) create mode 100644 common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json create mode 100644 common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json diff --git a/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json new file mode 100644 index 0000000000..fde9afd602 --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-storage-levelup", + "comment": "Pin level-js and levelup deps.", + "type": "none" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json new file mode 100644 index 0000000000..6918e5a7dc --- /dev/null +++ b/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "Pin level-js and levelup deps.", + "type": "none" + } + ], + "packageName": "@neo-one/node", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json new file mode 100644 index 0000000000..205bcd5440 --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/smart-contract-compiler", + "comment": "Pin level-js and levelup deps.", + "type": "none" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 325b71496a..204dc459fc 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1720,102 +1720,6 @@ rxjs "^6.5.3" tslib "^1.10.0" -"@neotracker/core@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.4.0.tgz#7745677ea391a2fb4cdd11d6fcbc12e70101f32f" - integrity sha512-MKJOQCCCMXdsZXy3y+9evBaQuWgeLcC+HGS6dFlsEECH8yKJvPBOYgjZ93hFwOyDf3atyn60sQ2C2K6qlnhqMg== - 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" - headroom.js "^0.9.4" - highcharts "^6.2.0" - http-errors "^1.7.0" - is-running "^2.1.0" - iterall "^1.2.2" - ix "^2.5.3" - js-sha3 "^0.8.0" - jss "^9.8.7" - jss-preset-default "^4.3.0" - 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 "^5.2.0" - koa-ratelimit-lru "^1.0.2" - koa-router "^7.4.0" - locale2 "^2.3.1" - lodash "^4.17.11" - lru-cache "^4.1.1" - markdown-it "^8.4.2" - objection "^1.4.0" - pg "^7.7.1" - pino "^5.13.2" - prop-types "^15.6.2" - qr-image "^3.2.0" - rc "^1.2.8" - 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" - react-lifecycles-compat "^3.0.4" - react-loadable "^5.5.0" - react-redux "^5.1.1" - react-relay "1.6.2" - react-router "4.4.0-beta.1" - react-router-config "^4.4.0-beta.6" - react-router-dom "4.4.0-beta.1" - react-tippy "^1.2.3" - react-transition-group "^2.5.0" - recompose "^0.30.0" - redux "^4.0.1" - redux-actions "^2.6.4" - relay-compiler "1.6.2" - relay-runtime "1.6.2" - reselect "^4.0.0" - resolve-path "^1.4.0" - rxjs "^6.3.3" - safe-stable-stringify "^1.1.0" - scrypt-js "^2.0.4" - semver "^5.6.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" - styled-components "^4.1.3" - timeago.js "^4.0.0-beta.1" - toobusy-js "^0.5.1" - ua-parser-js "^0.7.19" - uuid "^3.2.1" - ws "^6.1.2" - "@neotracker/core@1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.4.1.tgz#eb9d34542ac33df0f709c509250b583c74f09eb7" @@ -2213,7 +2117,6 @@ "@types/bn.js" "^4.11.5" "@types/fs-extra" "^8.0.0" "@types/jest" "^24.0.18" - "@types/jszip" "^3.4.1" "@types/listr" "^0.14.2" "@types/lodash" "^4.14.138" "@types/prompts" "^2.0.1" @@ -2615,8 +2518,8 @@ "@types/levelup" "^3.1.1" "@types/memdown" "^3.0.0" core-js "^3.2.1" - level-js "^5.0.0" - levelup "^4.1.0" + level-js "5.0.0" + levelup "4.1.0" memdown "^5.0.0" tslib "^1.10.0" @@ -2754,7 +2657,7 @@ "@types/levelup" "^3.1.1" "@types/memdown" "^3.0.0" gulp "~4.0.2" - levelup "^4.1.0" + levelup "4.1.0" memdown "^5.0.0" rxjs "^6.5.3" tslib "^1.10.0" @@ -2805,7 +2708,7 @@ fs-extra "^8.1.0" gulp "~4.0.2" leveldown "^5.1.1" - levelup "^4.1.0" + levelup "4.1.0" tslib "^1.10.0" "@rush-temp/react-common@file:./projects/react-common.tgz": @@ -2893,7 +2796,7 @@ bignumber.js "^9.0.0" bn.js "^5.0.0" gulp "~4.0.2" - levelup "^4.1.0" + levelup "4.1.0" lodash "^4.17.15" memdown "^5.0.0" safe-stable-stringify "^1.1.0" @@ -8076,6 +7979,14 @@ deferred-leveldown@~5.0.0: abstract-leveldown "~6.0.0" inherits "^2.0.3" +deferred-leveldown@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.1.0.tgz#c21e40641a8e48530255a4ad31371cc7fe76b332" + integrity sha512-PvDY+BT2ONu2XVRgxHb77hYelLtMYxKSGuWuJJdVRXh9ntqx9GYTFJno/SKAz5xcd+yjQwyQeIZrUPjPvA52mg== + dependencies: + abstract-leveldown "~6.0.0" + inherits "^2.0.3" + deferred-leveldown@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" @@ -13164,6 +13075,16 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" +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.2.1" + immediate "~3.2.3" + inherits "^2.0.3" + ltgt "^2.1.2" + level-js@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.2.tgz#fa51527fa38b87c4d111b0d0334de47fcda38f21" @@ -13246,6 +13167,16 @@ levelup@4.0.2: level-iterator-stream "~4.0.0" xtend "~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== + dependencies: + deferred-leveldown "~5.1.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + xtend "~4.0.0" + levelup@^4.1.0, levelup@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" @@ -13289,6 +13220,13 @@ lie@3.1.1: dependencies: immediate "~3.0.5" +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: + immediate "~3.0.5" + liftoff@3.1.0, liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -14452,11 +14390,6 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== -nan@~2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== - nanoid@^2.0.3: version "2.1.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" @@ -14659,22 +14592,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== - 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-pre-gyp@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" @@ -18683,15 +18600,6 @@ 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.0.4" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.0.4.tgz#1f75e3ededad6e26f7dd819929460ce44a49dfcd" - integrity sha512-CO8vZMyUXBPC+E3iXOCc7Tz2pAdq5BWfLcQmOokCOZW5S5sZ/paijiPOCdvzpdP83RroWHYa5xYlVqCxSqpnQg== - dependencies: - nan "~2.10.0" - node-pre-gyp "^0.10.3" - request "^2.87.0" - sqlite3@4.0.9: version "4.0.9" resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.0.9.tgz#cff74550fa5a1159956815400bdef69245557640" diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index eaa812486a..549b344e7e 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -22,8 +22,8 @@ "@neo-one/node-vm": "^2.7.0", "@neo-one/utils": "^2.6.1", "core-js": "^3.2.1", - "level-js": "^5.0.0", - "levelup": "^4.1.0", + "level-js": "5.0.0", + "levelup": "4.1.0", "memdown": "^5.0.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 6eca48df66..41014513f4 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -18,7 +18,7 @@ "@neo-one/node-storage-common": "^2.7.0", "@neo-one/utils": "^2.6.1", "@types/levelup": "^3.1.1", - "levelup": "^4.1.0", + "levelup": "4.1.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 38419fe38a..069af67deb 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -28,7 +28,7 @@ "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", "leveldown": "^5.1.1", - "levelup": "^4.1.0", + "levelup": "4.1.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index 2c950a8dc6..0fee625313 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -47,7 +47,7 @@ "app-root-dir": "^1.0.2", "bignumber.js": "^9.0.0", "gulp": "~4.0.2", - "levelup": "^4.1.0", + "levelup": "4.1.0", "memdown": "^5.0.0" } } From d943664ce821e43208b73221b1a38651a6c77f05 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 30 Jul 2020 13:17:33 -0700 Subject: [PATCH 087/141] fix(website): change yarn install to yarn add (#2129) --- .../blog/2020-07-23-neo-one-2-7-announcement.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index 0f4384110e..9653b2e9d8 100644 --- 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 @@ -10,13 +10,13 @@ twitter: https://twitter.com/neo_one_suite 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 install @neo-one/cli` +`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 install @neo-one/cli`\ +`yarn add @neo-one/cli`\ `yarn neo-one init`\ `yarn neo-one compile --json --avm --debug --opcodes` From c6551b00f8fdbcd35c185c725ea88f7350fef25a Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 3 Aug 2020 13:04:16 -0700 Subject: [PATCH 088/141] fix(elliptic): update elliptic dep and nits (#2130) --- .../cli/elliptic_2020-08-03-18-22.json | 11 +++++ .../elliptic_2020-08-03-18-22.json | 11 +++++ common/config/rush/yarn.lock | 42 +++++++++---------- packages/neo-one-cli/src/cmd/compile.ts | 12 +++--- packages/neo-one-client-common/package.json | 4 +- 5 files changed, 49 insertions(+), 31 deletions(-) create mode 100644 common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json create mode 100644 common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json diff --git a/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json b/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json new file mode 100644 index 0000000000..2acd363556 --- /dev/null +++ b/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/cli", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json b/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json new file mode 100644 index 0000000000..3e1e6fc863 --- /dev/null +++ b/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "Update elliptic dependency.", + "type": "none" + } + ], + "packageName": "@neo-one/client-common", + "email": "spencercorwin@icloud.com" +} \ No newline at end of file diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 204dc459fc..4a9064cf79 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2152,7 +2152,7 @@ "@types/bn.js" "^4.11.5" "@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" @@ -2162,7 +2162,7 @@ bn.js "^5.0.0" bs58 "^4.0.1" buffer-xor "^2.0.2" - elliptic "^6.5.0" + elliptic "^6.5.3" gulp "~4.0.2" hash.js "^1.1.7" lodash "^4.17.15" @@ -3204,7 +3204,7 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== -"@types/elliptic@^6.4.9": +"@types/elliptic@^6.4.12", "@types/elliptic@^6.4.9": 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== @@ -3440,13 +3440,6 @@ csstype "^2.0.0" indefinite-observable "^1.0.1" -"@types/jszip@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@types/jszip/-/jszip-3.4.1.tgz#e7a4059486e494c949ef750933d009684227846f" - integrity sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A== - dependencies: - jszip "*" - "@types/keygrip@*": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" @@ -4371,7 +4364,7 @@ abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1: level-concat-iterator "~2.0.0" xtend "~4.0.0" -abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: +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== @@ -8486,6 +8479,19 @@ elliptic@^6.0.0, elliptic@^6.5.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +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: + 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" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -12730,7 +12736,7 @@ jss@^9.7.0, jss@^9.8.7: symbol-observable "^1.1.0" warning "^3.0.0" -jszip@*, jszip@^3.5.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== @@ -13096,16 +13102,6 @@ level-js@^4.0.0: ltgt "^2.1.2" typedarray-to-buffer "~3.1.5" -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - level-packager@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" @@ -13177,7 +13173,7 @@ levelup@4.1.0: level-iterator-stream "~4.0.0" xtend "~4.0.0" -levelup@^4.1.0, levelup@^4.3.2: +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== diff --git a/packages/neo-one-cli/src/cmd/compile.ts b/packages/neo-one-cli/src/cmd/compile.ts index 99dcfbec70..07c57d7271 100644 --- a/packages/neo-one-cli/src/cmd/compile.ts +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -8,17 +8,17 @@ export const describe = 'Compiles a project and outputs code to a local director export const builder = (yargsBuilder: typeof yargs) => yargsBuilder .string('outDir') - .describe('outDir', 'Output code directory') + .describe('outDir', 'Output code directory.') .string('path') - .describe('path', 'Contract directory') + .describe('path', 'Contract directory.') .boolean('json') - .describe('json', 'Output the contract with the JSON format') + .describe('json', 'Output the contract with the JSON format.') .boolean('avm') - .describe('avm', 'Output the contract with the AVM format') + .describe('avm', 'Output the contract with the AVM format.') .boolean('debug') - .describe('debug', 'Output additional debug information') + .describe('debug', 'Output additional debug information.') .boolean('opcodes') - .describe('opcodes', 'Output the AVM in a human readable format for debugging, requires --debug'); + .describe('opcodes', 'Output the AVM in a human readable format for debugging (requires --debug).'); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => { diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 0b1b1d0b7c..be4907cf99 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -20,7 +20,7 @@ "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.3", @@ -34,7 +34,7 @@ "@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", From cd351a752017adff7627fcb54393a709446a2b58 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 13 Aug 2020 12:58:42 -0700 Subject: [PATCH 089/141] chore(rush): update rush version (#2133) --- common/scripts/install-run-rush.js | 132 ++++++++++++++--------------- common/scripts/install-run.js | 117 +++++++++++++++---------- rush.json | 2 +- 3 files changed, 137 insertions(+), 114 deletions(-) diff --git a/common/scripts/install-run-rush.js b/common/scripts/install-run-rush.js index ed21abf854..4cc67a75b1 100644 --- a/common/scripts/install-run-rush.js +++ b/common/scripts/install-run-rush.js @@ -1,67 +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(); +"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.js b/common/scripts/install-run.js index 0a94545f5c..84692d3ba4 100644 --- a/common/scripts/install-run.js +++ b/common/scripts/install-run.js @@ -47,9 +47,8 @@ function _parsePackageSpecifier(rawPackageSpecifier) { return { name, version }; } /** - * As a workaround, _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. + * 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. @@ -58,45 +57,63 @@ function _parsePackageSpecifier(rawPackageSpecifier) { * 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) { - const sourceNpmrcPath = path.join(sourceNpmrcFolder, '.npmrc'); +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)) { - let npmrcFileLines = fs.readFileSync(sourceNpmrcPath).toString().split('\n'); - npmrcFileLines = npmrcFileLines.map((line) => (line || '').trim()); - const resultLines = []; - // Trim out lines that reference environment variables that aren't defined - for (const line of npmrcFileLines) { - // This finds environment variable tokens that look like "${VAR_NAME}" - const regex = /\$\{([^\}]+)\}/g; - const environmentVariables = line.match(regex); - let lineShouldBeTrimmed = false; - if (environmentVariables) { - for (const token of environmentVariables) { - // Remove the leading "${" and the trailing "}" from the token - const environmentVariableName = token.substring(2, token.length - 1); - if (!process.env[environmentVariableName]) { - 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)); + _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); } } @@ -121,7 +138,7 @@ function getNpmPath() { } else { // We aren't on Windows - assume we're on *NIX or Darwin - _npmPath = childProcess.execSync('which npm', { stdio: [] }).toString(); + _npmPath = childProcess.execSync('command -v npm', { stdio: [] }).toString(); } } catch (e) { @@ -282,8 +299,8 @@ function _cleanInstallFolder(rushTempFolder, packageInstallFolder) { } const nodeModulesFolder = path.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME); if (fs.existsSync(nodeModulesFolder)) { - const rushRecyclerFolder = _ensureAndJoinPath(rushTempFolder, 'rush-recycler', `install-run-${Date.now().toString()}`); - fs.renameSync(nodeModulesFolder, rushRecyclerFolder); + const rushRecyclerFolder = _ensureAndJoinPath(rushTempFolder, 'rush-recycler'); + fs.renameSync(nodeModulesFolder, path.join(rushRecyclerFolder, `install-run-${Date.now().toString()}`)); } } catch (e) { @@ -293,14 +310,14 @@ function _cleanInstallFolder(rushTempFolder, packageInstallFolder) { function _createPackageJson(packageInstallFolder, name, version) { try { const packageJsonContents = { - 'name': 'ci-rush', - 'version': '0.0.0', - 'dependencies': { + name: 'ci-rush', + version: '0.0.0', + dependencies: { [name]: version }, - 'description': 'DON\'T WARN', - 'repository': 'DON\'T WARN', - 'license': 'MIT' + 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)); @@ -335,7 +352,7 @@ function _installPackage(packageInstallFolder, name, version) { */ function _getBinPath(packageInstallFolder, binName) { const binFolderPath = path.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin'); - const resolvedBinName = (os.platform() === 'win32') ? `${binName}.cmd` : binName; + const resolvedBinName = os.platform() === 'win32' ? `${binName}.cmd` : binName; return path.resolve(binFolderPath, resolvedBinName); } /** @@ -368,12 +385,18 @@ function installAndRun(packageName, packageVersion, packageBinName, packageBinAr 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: process.env + env: Object.assign({}, process.env, { PATH: [binFolderPath, process.env.PATH].join(path.delimiter) }) }); - return result.status; + if (result.status !== null) { + return result.status; + } + else { + throw result.error || new Error('An unknown error occurred.'); + } } exports.installAndRun = installAndRun; function runWithErrorAndStatusCode(fn) { @@ -388,7 +411,7 @@ function runWithErrorAndStatusCode(fn) { } 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; + 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'); } diff --git a/rush.json b/rush.json index b29662610b..c4237e50c9 100644 --- a/rush.json +++ b/rush.json @@ -1,6 +1,6 @@ { "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", - "rushVersion": "5.17.2", + "rushVersion": "5.30.2", "yarnVersion": "1.19.1", "nodeSupportedVersionRange": ">=10.13.0 <=12.10.0", "ensureConsistentVersions": true, From a821237ed82162fd6ae3795d0ed855439c701c1a Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 13 Aug 2020 14:12:32 -0700 Subject: [PATCH 090/141] feat(client-common): migrate 90% of client-common to Neo3 preview 3 (#2138) --- .../src/BaseScriptBuilder.ts | 170 +++++ .../neo-one-client-common/src/IOHelper.ts | 1 + .../src/NativeContract.ts | 34 + .../src/ScriptBuilder.ts | 188 +---- .../src/__tests__/NativeContract.test.ts | 53 ++ .../src/__tests__/ScriptBuilder.test.ts | 7 - .../__tests__/models/AssetTypeModel.test.ts | 44 -- .../__tests__/models/CosignerModel.test.ts | 88 +++ .../src/__tests__/models/WitnessModel.test.ts | 18 +- .../models/WitnessScopeModel.test.ts | 45 ++ .../transaction/transactionModel.test.ts | 207 ++++++ .../transaction/transactionModels.test.ts | 287 ------- packages/neo-one-client-common/src/common.ts | 2 + .../src/contractParameters.ts | 3 + packages/neo-one-client-common/src/crypto.ts | 58 +- packages/neo-one-client-common/src/errors.ts | 34 +- packages/neo-one-client-common/src/index.ts | 2 + .../src/models/AssetTypeModel.ts | 47 -- .../src/models/ContractParameterTypeModel.ts | 23 +- .../src/models/SignerModel.ts | 41 + .../src/models/StateDescriptorTypeModel.ts | 17 - .../src/models/StorageFlagsModel.ts | 2 +- .../src/models/VerifyResultModel.ts | 49 ++ .../src/models/WitnessScopeModel.ts | 56 ++ .../neo-one-client-common/src/models/index.ts | 5 +- .../transaction/ClaimTransactionModel.ts | 83 --- .../src/models/transaction/InputModel.ts | 30 - .../transaction/InvocationTransactionModel.ts | 146 ---- .../src/models/transaction/OutputModel.ts | 46 -- .../transaction/TransactionBaseModel.ts | 150 ---- .../models/transaction/TransactionModel.ts | 176 ++++- .../transaction/TransactionTypeModel.ts | 25 - .../attribute/AttributeBaseModel.ts | 20 +- .../transaction/attribute/AttributeModel.ts | 11 +- .../attribute/AttributeTypeModel.ts | 36 + .../attribute/AttributeUsageModel.ts | 73 -- .../attribute/BufferAttributeModel.ts | 49 -- .../attribute/ECPointAttributeModel.ts | 27 - .../attribute/HighPriorityAttributeModel.ts | 31 + .../attribute/UInt160AttributeModel.ts | 27 - .../attribute/UInt256AttributeModel.ts | 44 -- .../src/models/transaction/attribute/index.ts | 7 +- .../src/models/transaction/index.ts | 6 - .../neo-one-client-common/src/models/types.ts | 285 +++---- .../neo-one-client-common/src/models/vm.ts | 537 +++++++------- packages/neo-one-client-common/src/types.ts | 698 +++++++----------- .../src/transaction/ClaimTransaction.ts | 157 ---- .../src/transaction/ContractTransaction.ts | 85 --- .../src/transaction/EnrollmentTransaction.ts | 143 ---- .../src/transaction/Input.ts | 39 - .../src/transaction/InvocationTransaction.ts | 127 ---- .../src/transaction/IssueTransaction.ts | 154 ---- .../src/transaction/MinerTransaction.ts | 132 ---- .../src/transaction/Output.ts | 60 -- .../src/transaction/PublishTransaction.ts | 133 ---- .../src/transaction/RegisterTransaction.ts | 215 ------ .../src/transaction/StateTransaction.ts | 157 ---- .../src/transaction/Transaction.ts | 179 +++-- .../src/transaction/TransactionBase.ts | 20 +- .../src/transaction/common.ts | 13 - .../src/transaction/index.ts | 12 +- 61 files changed, 1927 insertions(+), 3687 deletions(-) create mode 100644 packages/neo-one-client-common/src/BaseScriptBuilder.ts create mode 100644 packages/neo-one-client-common/src/NativeContract.ts create mode 100644 packages/neo-one-client-common/src/__tests__/NativeContract.test.ts delete mode 100644 packages/neo-one-client-common/src/__tests__/models/AssetTypeModel.test.ts create mode 100644 packages/neo-one-client-common/src/__tests__/models/CosignerModel.test.ts create mode 100644 packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts create mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts delete mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts delete mode 100644 packages/neo-one-client-common/src/models/AssetTypeModel.ts create mode 100644 packages/neo-one-client-common/src/models/SignerModel.ts delete mode 100644 packages/neo-one-client-common/src/models/StateDescriptorTypeModel.ts create mode 100644 packages/neo-one-client-common/src/models/VerifyResultModel.ts create mode 100644 packages/neo-one-client-common/src/models/WitnessScopeModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/ClaimTransactionModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/InputModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/OutputModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/TransactionTypeModel.ts create mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/AttributeTypeModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/AttributeUsageModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts create mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/HighPriorityAttributeModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts delete mode 100644 packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts delete mode 100644 packages/neo-one-node-core/src/transaction/ClaimTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/ContractTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/Input.ts delete mode 100644 packages/neo-one-node-core/src/transaction/InvocationTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/IssueTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/MinerTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/Output.ts delete mode 100644 packages/neo-one-node-core/src/transaction/PublishTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/RegisterTransaction.ts delete mode 100644 packages/neo-one-node-core/src/transaction/StateTransaction.ts 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..11e3f4f038 --- /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 emitSysCallInternal(hash: Buffer) { + return this.emitOp('SYSCALL', hash); + } + + 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); + } +} 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/NativeContract.ts b/packages/neo-one-client-common/src/NativeContract.ts new file mode 100644 index 0000000000..ccb36c5ecd --- /dev/null +++ b/packages/neo-one-client-common/src/NativeContract.ts @@ -0,0 +1,34 @@ +import { common, UInt160 } from './common'; +import { crypto } from './crypto'; +import { scriptHashToAddress } from './helpers'; +import { ScriptBuilder } from './ScriptBuilder'; +import { AddressString, ContractManifest } from './types'; + +export type NativeContractServiceName = 'Neo.Native.Policy' | 'Neo.Native.Tokens.GAS' | 'Neo.Native.Tokens.NEO'; + +class NativeContract { + public readonly serviceName: NativeContractServiceName; + public readonly script: Buffer; + public readonly scriptHex: string; + public readonly hash: UInt160; + public readonly scriptHash: string; + public readonly address: AddressString; + + public constructor(serviceName: NativeContractServiceName) { + this.serviceName = serviceName; + this.script = new ScriptBuilder() + .emitPush(Buffer.from(serviceName, 'ascii')) + .emitSysCall('Neo.Native.Call') + .build(); + this.scriptHex = this.script.toString('hex'); + this.hash = crypto.toScriptHash(this.script); + this.scriptHash = common.uInt160ToHex(this.hash); + this.address = scriptHashToAddress(this.scriptHash); + } +} + +export const NativeContracts = { + NEO: new NativeContract('Neo.Native.Tokens.NEO'), + GAS: new NativeContract('Neo.Native.Tokens.GAS'), + Policy: new NativeContract('Neo.Native.Policy'), +}; diff --git a/packages/neo-one-client-common/src/ScriptBuilder.ts b/packages/neo-one-client-common/src/ScriptBuilder.ts index 7088a25073..a4bcb09eec 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/__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 b28428a8c5..96ce511019 100644 --- a/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts +++ b/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts @@ -1,5 +1,4 @@ import { BN } from 'bn.js'; -import { common } from '../common'; import { Op } from '../models/vm'; import { ScriptBuilder } from '../ScriptBuilder'; @@ -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__/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/CosignerModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/CosignerModel.test.ts new file mode 100644 index 0000000000..c09d3c883f --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/CosignerModel.test.ts @@ -0,0 +1,88 @@ +import { keys } from '../../__data__'; +import { common } from '../../common'; +import { CosignerAdd, CosignerModel } 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 = {}): CosignerAdd => ({ + account, + scopes, + allowedContracts, + allowedGroups, +}); + +// TODO: check and run this test +describe('Cosigner Model', () => { + test('SerializeWire', () => { + const cosigner = new CosignerModel(optionsBuilder()); + const serialized = cosigner.serializeWire(); + expect(serialized).toEqual( + Buffer.concat([common.uInt160ToBuffer(testAccount), Buffer.from([toWitnessScope('Global')])]), + ); + }); + + test('SerializeWire - CustomContracts Scope', () => { + const contractCosigner = new CosignerModel( + 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 CosignerModel( + 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 CosignerModel( + 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/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..d298a7637c --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts @@ -0,0 +1,45 @@ +import { + assertWitnessScope, + assertWitnessScopeJSON, + toJSONWitnessScope, + toWitnessScope, + witnessScopeHasFlag, + WitnessScopeModel, +} from '../../models/WitnessScopeModel'; + +// TODO: check and run this test +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/transactionModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts new file mode 100644 index 0000000000..d20c535fd2 --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts @@ -0,0 +1,207 @@ +import { BN } from 'bn.js'; +import { keys } from '../../../__data__/keys'; +import { BinaryWriter } from '../../../BinaryWriter'; +import { CosignerModel, TransactionModel, TransactionModelAdd } 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, + sender = testSender, + attributes = [], + witnesses = [], + cosigners = [], + hash, + script = Buffer.from([0x10]), +}: Partial): TransactionModelAdd => ({ + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + sender, + attributes, + witnesses, + cosigners, + hash, + script, +}); + +// tslint:disable-next-line:no-let +let testWriter: BinaryWriter = new BinaryWriter(); + +const resetWriter = () => { + testWriter = new BinaryWriter(); +}; + +// TODO: check and run this test +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 cosigner = new CosignerModel({ + account: testSender, + scopes: 'Global', + }); + + const cosignerTransaction = new TransactionModel({ + ...optionsBuilder({ + systemFee, + networkFee, + script, + cosigners: [cosigner], + }), + }); + + 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()])); + }); +}); + +// 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/transaction/transactionModels.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts deleted file mode 100644 index a146a921c1..0000000000 --- a/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts +++ /dev/null @@ -1,287 +0,0 @@ -import BigNumber from 'bignumber.js'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { data, keys } from '../../../__data__'; -import { BinaryWriter } from '../../../BinaryWriter'; -import { common, UInt256 } from '../../../common'; -import { addressToScriptHash } from '../../../helpers'; -import { AttributeModel, BufferAttributeModel, UInt160AttributeModel, 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 }); -const options = { - asset: common.ZERO_UINT256, - value: new BN(1), - address: common.ZERO_UINT160, -}; - -const outputModel = new OutputModel(options); - -// 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}`); - }); - - test('getScriptHashesForVerifying', async () => { - const model = new InvocationTransactionModel({ - ...optionsBuilder({ - inputs: [defaultInput], - outputs: [outputModel], - attributes: [ - new UInt160AttributeModel({ - usage: 0x20, - value: common.hexToUInt160(addressToScriptHash(data.attributes.script.data)), - }), - new BufferAttributeModel({ - usage: 0x90, - value: Buffer.from(data.attributes.description.data, 'hex'), - }), - ], - }), - gas, - script, - }); - const result = await model.getScriptHashesForVerifying({ - getOutput: jest.fn(async () => - Promise.resolve({ - asset: common.uInt256ToHex(options.asset), - value: new BigNumber(1), - address: keys[0].address, - }), - ), - getAsset: jest.fn(async () => - Promise.resolve({ - hash: data.hash256s.a, - available: new BigNumber(10000), - expiration: 6000000, - frozen: false, - ...data.assetRegisters.duty, - }), - ), - }); - - expect(result).toEqual([ - addressToScriptHash(keys[0].address), - common.uInt160ToHex(options.address), - addressToScriptHash(data.attributes.script.data), - ]); - }); -}); - -describe('Output Model', () => { - beforeEach(resetWriter); - - 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/common.ts b/packages/neo-one-client-common/src/common.ts index daeae70a8a..2fbc53da84 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -219,6 +219,8 @@ export const common = { D8, NEO_ADDRESS_VERSION: 23, NEO_PRIVATE_KEY_VERSION: 0x80, + GROUPING_SIZE_BYTES: 16, // TODO: remove? added by Dan? + MAX_CONTRACT_STRING: 252, // TODO: remove? added by Dan? ECPOINT_BUFFER_BYTES, ECPOINT_INFINITY, ECPOINT_INFINITY_BYTE, diff --git a/packages/neo-one-client-common/src/contractParameters.ts b/packages/neo-one-client-common/src/contractParameters.ts index 607e79e06c..ef0803d120 100644 --- a/packages/neo-one-client-common/src/contractParameters.ts +++ b/packages/neo-one-client-common/src/contractParameters.ts @@ -49,6 +49,9 @@ const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { }), ); break; + case 'Hash160': + value = common.uInt160ToBuffer(JSONHelper.readUInt160(contractParameter.value)); + break; case 'Hash256': value = common.uInt256ToBuffer(JSONHelper.readUInt256(contractParameter.value)); break; diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index b2eba912fa..dd38c48754 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -252,7 +252,7 @@ const createInvocationScript = (message: Buffer, privateKey: PrivateKey): Buffer const createVerificationScript = (publicKey: ECPoint): Buffer => { const builder = new ScriptBuilder(); builder.emitPushECPoint(publicKey); - builder.emitOp('CHECKSIG'); + builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); // TODO: check return builder.build(); }; @@ -311,7 +311,7 @@ const createMultiSignatureVerificationScript = (mIn: number, publicKeys: readonl builder.emitPushECPoint(ecPoint); }); builder.emitPushInt(publicKeysSorted.length); - builder.emitOp('CHECKMULTISIG'); + builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); // TODO: check return builder.build(); }; @@ -524,54 +524,78 @@ const decryptNEP2 = async ({ return common.bufferToPrivateKey(privateKey); }; +const checkSigUInt = Buffer.from([0x747476aa]); +const checkMultiSigUint = Buffer.from([0xc7c34cba]); + // 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; - break; - } - if (script[i++] != Op.CHECKMULTISIG) return false; - if (script.length != i) 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) !== checkMultiSigUint) return false; return true; }; // 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) === checkSigUInt; const isStandardContract = (script: Buffer) => isSignatureContract(script) || isMultiSigContract(script); diff --git a/packages/neo-one-client-common/src/errors.ts b/packages/neo-one-client-common/src/errors.ts index 64c647fee3..e15c8fcde1 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,6 +65,14 @@ export const InvalidStorageFlagsError = makeErrorWithCode( 'INVALID_STORAGE_FLAGS', (storageFlags: number) => `Expected StorageFlags, found: ${storageFlags.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 InvalidStateDescriptorTypeError = makeErrorWithCode( 'INVALID_STATE_DESCRIPTOR_TYPE', (stateDescriptorType: number) => `Expected StateDescriptorType, found: ${stateDescriptorType.toString(16)}`, @@ -76,6 +85,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 +122,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..6726a1d057 100644 --- a/packages/neo-one-client-common/src/index.ts +++ b/packages/neo-one-client-common/src/index.ts @@ -7,7 +7,9 @@ export * from './helpers'; export * from './IOHelper'; export * from './JSONHelper'; export * from './models'; +export * from './NativeContract'; export * from './paramUtils'; +export * from './BaseScriptBuilder'; export * from './ScriptBuilder'; export * from './types'; export * from './utils'; 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/SignerModel.ts b/packages/neo-one-client-common/src/models/SignerModel.ts new file mode 100644 index 0000000000..d8e284abd1 --- /dev/null +++ b/packages/neo-one-client-common/src/models/SignerModel.ts @@ -0,0 +1,41 @@ +import { BinaryWriter } from '../BinaryWriter'; +import { ECPoint, UInt160 } from '../common'; +import { createSerializeWire, SerializableWire, SerializeWire } from './Serializable'; +import { toWitnessScope, witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; + +export interface SignerAdd { + readonly account: UInt160; + readonly scopes: keyof typeof WitnessScopeModel; + readonly allowedContracts?: readonly UInt160[]; + readonly allowedGroups?: readonly ECPoint[]; +} + +// 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: keyof typeof WitnessScopeModel; + public readonly allowedContracts: readonly UInt160[]; + public readonly allowedGroups: readonly ECPoint[]; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ account, scopes, allowedContracts, allowedGroups }: SignerAdd) { + this.account = account; + this.scopes = scopes; + this.allowedContracts = allowedContracts === undefined ? [] : allowedContracts; + this.allowedGroups = allowedGroups === undefined ? [] : allowedGroups; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt160(this.account); + writer.writeUInt8(toWitnessScope(this.scopes)); + if (witnessScopeHasFlag(this.scopes, 'CustomContracts')) { + writer.writeArray(this.allowedContracts, (contract) => writer.writeUInt160(contract)); + } + if (witnessScopeHasFlag(this.scopes, 'CustomGroups')) { + writer.writeArray(this.allowedGroups, (group) => writer.writeECPoint(group)); + } + } +} 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..39bfcc2b00 --- /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 toJSONVerifyResult = (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/WitnessScopeModel.ts b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts new file mode 100644 index 0000000000..a966e2abd1 --- /dev/null +++ b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts @@ -0,0 +1,56 @@ +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: keyof typeof WitnessScopeModel, flag: keyof typeof WitnessScopeModel) => { + if ((value === 'Global' && flag !== 'Global') || (value !== 'Global' && flag === 'Global')) { + return false; + } + const valueHex = toWitnessScope(value); + const flagHex = toWitnessScope(flag); + // tslint:disable-next-line: no-bitwise + if ((valueHex & flagHex) === flagHex) { + 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..d7e78010b4 100644 --- a/packages/neo-one-client-common/src/models/index.ts +++ b/packages/neo-one-client-common/src/models/index.ts @@ -1,9 +1,10 @@ -export * from './AssetTypeModel'; 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 './types'; export * from './vm'; 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/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 91adafe7fb..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { BinaryWriter } from '../../BinaryWriter'; -import { common, InvalidFormatError } from '../../common'; -import { addressToScriptHash } from '../../helpers'; -import { Asset, Input, Output } from '../../types'; -import { utils } from '../../utils'; -import { WitnessModel } from '../WitnessModel'; -import { AttributeModel, AttributeUsageModel, UInt160AttributeModel } from './attribute'; -import { InputModel } from './InputModel'; -import { OutputModel } from './OutputModel'; -import { TransactionBaseModel, TransactionBaseModelAdd } from './TransactionBaseModel'; -import { TransactionTypeModel } from './TransactionTypeModel'; - -export interface TransactionGetScriptHashesForVerifyingOptions { - readonly getOutput: (input: Input) => Promise; - readonly getAsset: (hash: string) => Promise; -} - -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); - } - } - - public async getScriptHashesForVerifying({ - getOutput, - getAsset, - }: TransactionGetScriptHashesForVerifyingOptions): Promise { - const [inputHashes, outputHashes] = await Promise.all([ - Promise.all( - this.inputs.map(async (input) => { - const output = await getOutput({ hash: common.uInt256ToHex(input.hash), index: input.index }); - - return addressToScriptHash(output.address); - }), - ), - - Promise.all( - this.outputs.map(async (output) => { - const assetHash = common.uInt256ToHex(output.asset); - if (assetHash === common.NEO_ASSET_HASH || assetHash === common.GAS_ASSET_HASH) { - return undefined; - } - - const asset = await getAsset(assetHash); - if (asset.type === 'Duty') { - return common.uInt160ToHex(output.address); - } - - return undefined; - }), - ).then((hashes) => hashes.filter(commonUtils.notNull)), - ]); - - const attributeHashes = this.attributes - .map((attribute) => - attribute instanceof UInt160AttributeModel && attribute.usage === AttributeUsageModel.Script - ? common.uInt160ToHex(attribute.value) - : undefined, - ) - .filter(commonUtils.notNull); - - return [...inputHashes, ...outputHashes, ...attributeHashes]; - } -} 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 45145650b3..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)); - public readonly hashInternal: () => UInt256; - public readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - public 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..0b303ada54 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,173 @@ -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 { common, ECPoint, InvalidFormatError, PrivateKey, UInt160, UInt256, UInt256Hex } from '../../common'; +import { crypto } from '../../crypto'; +import { utils } from '../../utils'; +import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; +import { SignerModel } from '../SignerModel'; +import { WitnessModel } from '../WitnessModel'; +import { AttributeModel } from './attribute'; -export type TransactionModel = ClaimTransactionModel | InvocationTransactionModel; +export interface TransactionModelAdd< + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel +> { + readonly version?: number; + readonly attributes?: readonly TAttribute[]; + readonly witnesses?: readonly TWitness[]; + readonly signers?: readonly TSigner[]; + readonly nonce: number; + readonly sender: UInt160; + readonly systemFee: BN; + readonly networkFee: BN; + readonly validUntilBlock: number; + readonly script: Buffer; + readonly hash?: UInt256; +} + +export const MAX_TRANSACTION_ATTRIBUTES = 16; +export const MAX_TRANSACTION_SIZE = 102400; +export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 2102400; + +export abstract class TransactionModel< + 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 sender: UInt160; + public readonly validUntilBlock: number; + public readonly signers: readonly TSigner[]; + public readonly attributes: readonly TAttribute[]; + public readonly script: Buffer; + public readonly witnesses: readonly TWitness[]; + + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); + private readonly systemFeeInternal: () => BN; + private readonly networkFeeInternal: () => BN; + private readonly hashInternal: () => UInt256; + private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); + private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); + + public constructor({ + version, + nonce, + attributes = [], + witnesses = [], + signers = [], + systemFee, + networkFee, + validUntilBlock, + script, + hash, + }: TransactionModelAdd) { + // workaround: babel fails to transpile if we have + // static VERSION: number = 0; + this.version = version === undefined ? (this.constructor as typeof TransactionModel).VERSION : version; + this.nonce = nonce; + this.sender = signers[0].account; + this.attributes = attributes; + this.witnesses = witnesses; + this.signers = signers; + this.systemFeeInternal = utils.lazy(() => systemFee); + this.networkFeeInternal = utils.lazy(() => networkFee); + this.validUntilBlock = validUntilBlock; + this.script = script; + 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 get systemFee() { + return this.systemFeeInternal(); + } + + public get networkFee() { + return this.networkFeeInternal(); + } + + public clone(options: { readonly witnesses?: readonly TWitness[] } = {}): this { + // tslint:disable-next-line: no-any + return new (this.constructor as any)({ + version: this.version, + nonce: this.nonce, + sender: this.sender, + systemFee: this.systemFee, + networkFee: this.networkFee, + validUntilBlock: this.validUntilBlock, + attributes: this.attributes, + signers: this.signers, + script: this.script, + hash: this.hash, + witnesses: options.witnesses === undefined ? this.witnesses : options.witnesses, + }); + } + + public sign(key: PrivateKey): this { + 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): this { + 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.writeUInt160(this.sender); + 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/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..c514e438ff 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,23 @@ import { BinaryWriter } from '../../../BinaryWriter'; 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); } + + // TODO: check + public verify(): boolean { + return true; + } + + // TODO: check + protected abstract serializeWithoutTypeBase(writer: BinaryWriter): void; } 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 686b65f5e6..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 = - | AttributeUsageModel.DescriptionUrl - | AttributeUsageModel.Description - | AttributeUsageModel.Remark - | AttributeUsageModel.Remark1 - | AttributeUsageModel.Remark2 - | AttributeUsageModel.Remark3 - | AttributeUsageModel.Remark4 - | AttributeUsageModel.Remark5 - | AttributeUsageModel.Remark6 - | AttributeUsageModel.Remark7 - | AttributeUsageModel.Remark8 - | AttributeUsageModel.Remark9 - | AttributeUsageModel.Remark10 - | AttributeUsageModel.Remark11 - | AttributeUsageModel.Remark12 - | AttributeUsageModel.Remark13 - | AttributeUsageModel.Remark14 - | AttributeUsageModel.Remark15; - -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 0ed2c08437..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { common, ECPoint } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; -import { AttributeUsageModel } from './AttributeUsageModel'; - -export type ECPointAttributeUsageModel = AttributeUsageModel.ECDH02 | AttributeUsageModel.ECDH03; - -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..ceed552bc0 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/attribute/HighPriorityAttributeModel.ts @@ -0,0 +1,31 @@ +import { BinaryWriter } from '../../../BinaryWriter'; +import { AttributeBaseModel } from './AttributeBaseModel'; +import { AttributeTypeModel } from './AttributeTypeModel'; + +export interface HighPriorityAttributeModelAdd {} + +export class HighPriorityAttributeModel extends AttributeBaseModel { + public readonly type: AttributeTypeModel; + public readonly allowMultiple: boolean; + + public constructor({}: HighPriorityAttributeModelAdd) { + super(); + this.type = AttributeTypeModel.HighPriority; + this.allowMultiple = false; + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + this.serializeWithoutTypeBase(writer); + } + + // TODO: fill in + public verify(): boolean { + return true; + } + + // TODO: check + protected serializeWithoutTypeBase(_writer: BinaryWriter): void { + // do nothing + } +} 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 9bfc88ae88..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { UInt160 } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; -import { AttributeUsageModel } from './AttributeUsageModel'; - -export type UInt160AttributeUsageModel = AttributeUsageModel.Script; - -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 daa634c3a4..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { UInt256 } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; -import { AttributeUsageModel } from './AttributeUsageModel'; - -export type UInt256AttributeUsageModel = - | AttributeUsageModel.ContractHash - | AttributeUsageModel.Vote - | AttributeUsageModel.Hash1 - | AttributeUsageModel.Hash2 - | AttributeUsageModel.Hash3 - | AttributeUsageModel.Hash4 - | AttributeUsageModel.Hash5 - | AttributeUsageModel.Hash6 - | AttributeUsageModel.Hash7 - | AttributeUsageModel.Hash8 - | AttributeUsageModel.Hash9 - | AttributeUsageModel.Hash10 - | AttributeUsageModel.Hash11 - | AttributeUsageModel.Hash12 - | AttributeUsageModel.Hash13 - | AttributeUsageModel.Hash14 - | AttributeUsageModel.Hash15; - -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/index.ts b/packages/neo-one-client-common/src/models/transaction/index.ts index f0c12f9a1e..e4eeb0abdf 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,2 @@ export * from './attribute'; -export * from './ClaimTransactionModel'; -export * from './InputModel'; -export * from './InvocationTransactionModel'; -export * from './OutputModel'; -export * from './TransactionBaseModel'; export * from './TransactionModel'; -export * from './TransactionTypeModel'; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index f42b60a2d5..f3f5ed502a 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,75 +1,70 @@ -import { AssetTypeModel } from './AssetTypeModel'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; -import { StateDescriptorTypeModel } from './StateDescriptorTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; -import { AttributeUsageModel } from './transaction'; +import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; +import { VerifyResultModel } from './VerifyResultModel'; import { VMState } from './vm'; +import { WitnessScopeModel } from './WitnessScopeModel'; -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 ContractParameterDeclarationJSON { + readonly type: keyof typeof ContractParameterTypeModel; + readonly name: string; } -export interface ArrayContractParameterJSON { +export interface ArrayContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Array'; readonly value: readonly ContractParameterJSON[]; } -export interface BooleanContractParameterJSON { +export interface BooleanContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Boolean'; readonly value: boolean; } -export interface ByteArrayContractParameterJSON { +export interface ByteArrayContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'ByteArray'; readonly value: string; } -export interface Hash160ContractParameterJSON { +export interface Hash160ContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Hash160'; readonly value: string; } -export interface Hash256ContractParameterJSON { +export interface Hash256ContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Hash256'; readonly value: string; } -export interface IntegerContractParameterJSON { +export interface IntegerContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Integer'; readonly value: string; } -export interface InteropInterfaceContractParameterJSON { +export interface InteropInterfaceContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'InteropInterface'; } -export interface MapContractParameterJSON { +export interface MapContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Map'; readonly value: ReadonlyArray; } -export interface PublicKeyContractParameterJSON { +export interface PublicKeyContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'PublicKey'; readonly value: string; } -export interface SignatureContractParameterJSON { +export interface SignatureContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Signature'; readonly value: string; } -export interface StringContractParameterJSON { +export interface StringContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'String'; readonly value: string; } -export interface VoidContractParameterJSON { +export interface VoidContractParameterJSON extends ContractParameterDeclarationJSON { readonly type: 'Void'; } @@ -89,19 +84,24 @@ export type ContractParameterJSON = export type ContractParameterTypeJSON = keyof typeof ContractParameterTypeModel; +export type WitnessScopeJSON = keyof typeof WitnessScopeModel; + +// TODO: rename to "TransactionResultErrorJSON" ? export interface InvocationResultErrorJSON { - readonly state: VMState.Fault; + readonly state: VMState.FAULT; readonly gas_consumed: string; readonly gas_cost: string; readonly stack: readonly ContractParameterJSON[]; - readonly message: string; + readonly script: string; } +// TODO: rename to "TransactionResultSuccessJSON" ? export interface InvocationResultSuccessJSON { - readonly state: VMState.Halt; + readonly state: VMState.HALT; readonly gas_consumed: string; - readonly gas_cost: string; + // readonly gas_cost: string; // TODO: check that this should be removed readonly stack: readonly ContractParameterJSON[]; + readonly script: string; // TODO: check this } export type InvocationResultJSON = InvocationResultSuccessJSON | InvocationResultErrorJSON; @@ -175,170 +175,106 @@ 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; + readonly allowMultiple: boolean; } -export interface OutputJSON { - readonly n: number; - readonly asset: string; - readonly value: string; - readonly address: string; -} +export type AttributeTypeJSON = keyof typeof AttributeTypeModel; -export interface InvocationDataJSON { - readonly result: InvocationResultJSON; - readonly asset?: AssetJSON; - readonly contracts: readonly ContractJSON[]; - readonly deletedContractHashes: readonly string[]; - readonly migratedContractHashes: ReadonlyArray; - readonly voteUpdates: ReadonlyArray]>; - readonly actions: readonly ActionJSON[]; - readonly storageChanges: readonly StorageChangeJSON[]; -} +export type VerifyResultJSON = keyof typeof VerifyResultModel; -export interface TransactionBaseJSON { - readonly txid: string; +// TODO: check that this can be removed. or rename to "TransactionDataJSON" ? +// export interface InvocationDataJSON { +// readonly result: InvocationResultJSON; +// readonly asset?: AssetJSON; +// readonly contracts: readonly ContractJSON[]; +// readonly deletedContractHashes: readonly string[]; +// readonly migratedContractHashes: ReadonlyArray; +// readonly voteUpdates: ReadonlyArray]>; +// readonly actions: readonly ActionJSON[]; +// readonly storageChanges: readonly StorageChangeJSON[]; +// } + +export interface TransactionJSON { + readonly hash: string; readonly size: number; readonly version: number; - readonly attributes: readonly AttributeJSON[]; - readonly vin: readonly InputJSON[]; - readonly vout: readonly OutputJSON[]; - readonly scripts: readonly WitnessJSON[]; + readonly nonce: number; + readonly sender: string; 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 ClaimTransactionJSON extends TransactionBaseJSON { - readonly type: 'ClaimTransaction'; - readonly claims: readonly InputJSON[]; -} - -export interface ContractTransactionJSON extends TransactionBaseJSON { - readonly type: 'ContractTransaction'; -} - -export interface EnrollmentTransactionJSON extends TransactionBaseJSON { - readonly type: 'EnrollmentTransaction'; - readonly pubkey: string; + readonly valid_until_block: number; + readonly attributes: readonly AttributeJSON[]; + readonly signers: readonly SignerJSON[]; + readonly script: string; + readonly witnesses: readonly WitnessJSON[]; } -export interface IssueTransactionJSON extends TransactionBaseJSON { - readonly type: 'IssueTransaction'; +export interface TransactionReceiptJSON { + readonly blockIndex: number; // TODO: check this + readonly blockHash: string; + readonly transactionIndex: number; + readonly globalIndex: string; } -export interface MinerTransactionJSON extends TransactionBaseJSON { - readonly type: 'MinerTransaction'; - readonly nonce: number; -} +export interface ConfirmedTransactionJSON extends TransactionJSON, TransactionReceiptJSON {} -export interface PublishTransactionJSON extends TransactionBaseJSON { - readonly type: 'PublishTransaction'; - readonly contract: ContractJSON; -} +export type WildcardContainerJSON = readonly T[] | '*'; -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 ContractMethodDescriptorJSON { + readonly name: string; + readonly parameters: readonly ContractParameterDeclarationJSON[]; + readonly returnType: ContractParameterTypeJSON; } -export interface StateDescriptorJSON { - readonly type: StateDescriptorTypeJSON; - readonly key: string; - readonly field: string; - readonly value: string; +export interface ContractEventJSON { + readonly name: string; + readonly parameters: readonly ContractParameterDeclarationJSON[]; } -export type StateDescriptorTypeJSON = keyof typeof StateDescriptorTypeModel; - -export interface StateTransactionJSON extends TransactionBaseJSON { - readonly type: 'StateTransaction'; - readonly descriptors: readonly StateDescriptorJSON[]; +export interface ContractABIJSON { + readonly hash: string; + readonly entryPoint: ContractMethodDescriptorJSON; + readonly methods: readonly ContractMethodDescriptorJSON[]; + readonly events: readonly ContractEventJSON[]; } -export interface InvocationTransactionJSON extends TransactionBaseJSON { - readonly type: 'InvocationTransaction'; - readonly script: string; - readonly gas: string; - readonly invocationData?: InvocationDataJSON | undefined; +export interface ContractGroupJSON { + readonly publicKey: string; + readonly signature: string; } -export type TransactionJSON = - | MinerTransactionJSON - | IssueTransactionJSON - | ClaimTransactionJSON - | EnrollmentTransactionJSON - | RegisterTransactionJSON - | ContractTransactionJSON - | PublishTransactionJSON - | StateTransactionJSON - | InvocationTransactionJSON; +export type ContractPermissionDescriptorJSON = string | '*'; -export interface TransactionReceiptJSON { - readonly blockIndex: number; - readonly blockHash: string; - readonly transactionIndex: number; - readonly globalIndex: string; +export interface ContractPermissionJSON { + readonly contract: ContractPermissionDescriptorJSON; + readonly methods: ReadonlyArray>; } -export type AssetNameJSON = string | ReadonlyArray<{ readonly lang: string; readonly name: string }>; - -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 ContractManifestJSON { + readonly abi: ContractABIJSON; + readonly groups: readonly ContractGroupJSON[]; + readonly permissions: readonly ContractPermissionJSON[]; + readonly trusts: WildcardContainerJSON; + readonly safeMethods: WildcardContainerJSON; + readonly features: { + readonly storage: boolean; + readonly payable: boolean; + }; } -export type AssetTypeJSON = keyof typeof AssetTypeModel; - export interface ContractJSON { - readonly version: 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 BlockBaseJSON { @@ -346,19 +282,24 @@ export interface BlockBaseJSON { readonly hash: string; readonly previousblockhash: string; readonly merkleroot: string; - readonly time: number; + readonly time: string; readonly index: number; - readonly nonce: string; readonly nextconsensus: string; - readonly script: WitnessJSON; - readonly size: number; + readonly witnesses: readonly WitnessJSON[]; readonly confirmations: number; + readonly nextblockhash?: string; +} + +export interface ConsensusDataJSON { + readonly primary: number; + readonly nonce: string; } export interface HeaderJSON extends BlockBaseJSON {} export interface BlockJSON extends BlockBaseJSON { - readonly tx: readonly TransactionJSON[]; + readonly tx: readonly ConfirmedTransactionJSON[]; + readonly concensus_data: ConsensusDataJSON; } export interface NetworkSettingsJSON { @@ -387,12 +328,24 @@ export interface RelayTransactionResultJSON { } export interface ValidatorJSON { - readonly version: number; + readonly active: boolean; readonly publicKey: string; - readonly registered: boolean; 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 NeoClaimableJSON { readonly claimable: readonly NeoInputClaimableJSON[]; readonly unclaimed: string; diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 3c3c0aaed1..23de4c5bf5 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -3,193 +3,190 @@ import _ from 'lodash'; 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 +214,68 @@ 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.Blockchain.GetContract' = 'System.Blockchain.GetContract', + '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.Create' = 'System.Contract.Create', + 'System.Contract.Update' = 'System.Contract.Update', + 'System.Contract.Destroy' = 'System.Contract.Destroy', + 'System.Contract.Call' = 'System.Contract.Call', + 'System.Contract.CallEx' = 'System.Contract.CallEx', + 'System.Contract.IsStandard' = 'System.Contract.IsStandard', + 'System.Contract.GetCallFlags' = 'System.Contract.GetCallFlags', + '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', + 'Neo.Native.Deploy' = 'Neo.Native.Deploy', + 'Neo.Native.Call' = 'Neo.Native.Call', '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', } export type SysCallName = keyof typeof SysCall; @@ -320,11 +291,29 @@ 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, } const isVMState = (state: number): state is VMState => diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 7f94791594..9307f588e4 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -5,6 +5,7 @@ import { BN } from 'bn.js'; import { Observable } from 'rxjs'; import { RawSourceMap } from 'source-map'; import { ECPoint, UInt160, UInt256 } from './common'; +import { ConsensusDataJSON } from './models'; /** * Base58 encoded string that represents a NEO address. @@ -200,91 +201,82 @@ export interface AddressAttribute extends AttributeBase { */ export type Attribute = BufferAttribute | PublicKeyAttribute | Hash256Attribute | AddressAttribute; +export type WitnessScope = + | 'Global' + | 'CalledByEntry' + | 'CustomContracts' + | 'CustomGroups' + | 'CalledByEntryAndCustomContracts' + | 'CalledByEntryAndCustomGroups' + | 'CalledByEntryAndCustomGroupsAndCustomContracts' + | 'CustomContractsAndCustomGroups'; + /** - * `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`. + * `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 Input { +export interface Witness { /** - * Hash of the `Transaction` this input references. + * Sets up the stack for the `verification` script. */ - readonly hash: Hash256String; + readonly invocation: BufferString; /** - * `Output` index within the `Transaction` this input references. + * A script that should leave either a `true` value on the stack if the `Witness` is valid, or `false` otherwise. */ - readonly index: number; + readonly verification: BufferString; } -/** - * 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 { +// TODO: add description +export interface Signer { /** - * Hash of the `Asset` that was transferred. + * Hash160 Address of the `Signer`. */ - readonly asset: Hash256String; + readonly account: AddressString; /** - * Amount transferred. + * Scope of the witness. */ - readonly value: BigNumber; + readonly scopes: WitnessScope; /** - * Destination `Address`. + * Array of contracts this address can verify;. */ - readonly address: 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 Witness { - /** - * Sets up the stack for the `verification` script. - */ - readonly invocation: BufferString; + readonly allowedContracts?: readonly AddressString[]; /** - * A script that should leave either a `true` value on the stack if the `Witness` is valid, or `false` otherwise. + * Array of contract groups that this address can verify. */ - readonly verification: BufferString; + readonly allowedGroups?: readonly ECPoint[]; } /** * Base interface for all `Transaction`s */ -export interface TransactionBase { +export interface Transaction { /** * NEO protocol version. */ readonly version: number; /** - * `Hash256` of this `Transaction`. + * Unique number in order to ensure the hash for this contract is unique. */ - readonly hash: Hash256String; + readonly nonce: number; /** - * Byte size of this `Transaction`. + * Hash160 of the transaction sender. */ - readonly size: number; + readonly sender: AddressString; /** - * `Attribute`s attached to the `Transaction`. + * `Hash256` of this `Transaction`. */ - readonly attributes: readonly Attribute[]; + readonly hash: Hash256String; /** - * `Input`s of the `Transaction`. + * Byte size of this `Transaction`. */ - readonly inputs: readonly Input[]; + readonly size: number; /** - * `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,229 +285,34 @@ 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. - */ - 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'; - /** - * 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. + * Scope where the `Witness`es are valid. */ - readonly type: 'EnrollmentTransaction'; + readonly signers: readonly Signer[]; /** - * 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. - */ - readonly gas: BigNumber; -} - -/** - * 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; -} - -/** - * 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. - */ -export interface StateTransaction extends TransactionBase { - /** - * `type` distinguishes `StateTransaction` from other `Transaction` object types. + * `Witness`es to the `Transaction`, i.e. the `Address`es that have signed the `Transasction`. */ - readonly type: 'StateTransaction'; + readonly witnesses: readonly Witness[]; } -/** - * 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; +// TODO: add description +export interface ConfirmedTransaction extends Transaction, TransactionReceipt {} +// TODO: header not yet checked /** * 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 + * `Block` hash. */ readonly hash: Hash256String; /** @@ -527,11 +324,11 @@ 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; /** @@ -542,6 +339,10 @@ export interface Header { * Next consensus address. */ readonly nextConsensus: AddressString; + /** + * `Witness`es to the `Block`'s validity. + */ + readonly witnesses: readonly Witness[]; /** * 'Witness' to the `Block`'s validity. */ @@ -550,13 +351,42 @@ export interface Header { * Size in bytes of the `Block`. */ readonly size: number; + /** + * Number of confirmations of the `Block`. + */ + readonly confirmations: number; + /** + * The hash of the next `Block`. + */ + readonly nextBlockHash?: string; } +// TODO: check this +export interface ConsensusData { + /** + * `ConsensusData` hash. + */ + readonly hash: Hash256String; + /** + * TODO: add description + */ + readonly primaryIndex: number; + /** + * Unique number in order to ensure the hash for this `ConcensusData` is unique. + */ + readonly nonce: BufferString; +} + +// TODO: check export interface Block extends Header { /** * `Transaction`s contained in the `Block`. */ readonly transactions: readonly ConfirmedTransaction[]; + /** + * `Transaction`s contained in the `Block`. + */ + readonly consensusData: ConsensusData; } /** @@ -566,19 +396,27 @@ export interface TransactionReceipt { /** * `Block` index of the `Transaction` for this receipt. */ - readonly blockIndex: number; + readonly blockIndex: number; // TODO: remove blockIndex? /** * `Block` hash of the `Transaction` for this receipt. */ readonly blockHash: Hash256String; + /** + * `Block` time of the `Transaction` for this receipt. + */ + readonly blockTime: number; /** * Transaction index of the `Transaction` within the `Block` for this receipt. */ - readonly transactionIndex: number; + readonly transactionHash: Hash256String; /** * Ordered globally unique index of the transaction. */ - readonly globalIndex: BigNumber; + readonly globalIndex: BigNumber; // TODO: remove this? Keep or remove confirmations? Move somewhere else? + /** + * Number of `Block`s which have confirmed this transaction. + */ + readonly confirmations: number; } /** @@ -613,6 +451,10 @@ export interface RawInvocationResultBase { * The total GAS cost before subtracting the free GAS. */ readonly gasCost: BigNumber; + /** + * Script run by the invocation. + */ + readonly script: BufferString; } /** @@ -640,7 +482,7 @@ export interface InvocationResultError extends RawInvocationResultBase { /** * Failure reason. */ - readonly message: string; + readonly message: string; // TODO: remove message? } /** @@ -784,14 +626,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 +648,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 +662,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 +676,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 +690,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 +703,7 @@ export interface UserAccountProvider { paramsZipped: ReadonlyArray, options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise; /** * Invokes the constant `method` on `contract` with `params` on `network`. */ @@ -1039,7 +878,7 @@ export interface SmartContractDefinition { /** * `ABI` of the smart contract */ - readonly abi: ABI; + readonly abi: ContractABI; /** * `SourceMaps` associated with the smart contract. */ @@ -1133,7 +972,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 ContractEvent[]; readonly __tag?: TEvent; } @@ -1540,7 +1379,7 @@ export type ForwardValueABI = ForwardValueABIParameter | ForwardValueABIReturn; /** * Function specification in the `ABI` of a smart contract. */ -export interface ABIFunction { +export interface ContractMethodDescriptor { /** * Name of the function */ @@ -1548,69 +1387,160 @@ export interface ABIFunction { /** * Parameters of the function. */ - readonly parameters?: readonly ABIParameter[]; + readonly parameters: readonly ContractParameterDeclaration[]; /** * Return type of the function. */ - readonly returnType: ABIReturn; + readonly returnType: ContractParameterType; /** * `true` if the function is constant or read-only. */ - readonly constant?: boolean; + // readonly constant?: boolean; // TODO: check +} + +/** + * Event specification in the `ABI` of a smart contract. + */ +export interface ContractEvent { /** - * `true` if the function is used for sending native assets with a two-phase send. + * Name of the event. */ - readonly send?: boolean; + readonly name: string; /** - * `true` if the function is used for sending native assets. + * Parameters of the event. */ - readonly sendUnsafe?: boolean; + readonly parameters: readonly ContractParameterDeclaration[]; +} + +/** + * 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 { /** - * `true` if the function is used for receiving native assets. + * Script hash of the contract. */ - readonly receive?: boolean; + readonly hash: UInt160; /** - * `true` if the function is used for claiming GAS. + * Entrypoint is an ABIFunction whcih describes the entrypoint of the contract. */ - readonly claim?: boolean; + readonly entryPoint: ContractMethodDescriptor; /** - * `true` if the function is used for refunding native assets. + * Specification of the smart contract methods. */ - readonly refundAssets?: boolean; + readonly methods: readonly ContractMethodDescriptor[]; /** - * `true` if the function is used for the second phase of a send. + * Specification of the smart contract events. */ - readonly completeSend?: boolean; + readonly events: readonly ContractEvent[]; } /** - * Event specification in the `ABI` of a smart contract. + * A ConctractGroup represents a set of mutuallly 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 ABIEvent { +export interface ContractGroup { /** - * Name of the event. + * The public key identifying the group. */ - readonly name: string; + readonly publicKey: ECPoint; /** - * Parameters of the event. + * Signature of the contract hash. */ - readonly parameters: readonly ABIParameter[]; + readonly signature: SignatureString; } /** - * 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. + * Flag which determines which features are available to a contract. */ -export interface ABI { +export enum ContractFeatures { /** - * Specification of the smart contract functions. + * Contract does not use any available features. */ - readonly functions: readonly ABIFunction[]; + NoProperty = 0x00, /** - * Specification of the smart contract events. + * Contract modifies blockchain storage. + */ + HasStorage = 0x01, + /** + * Contract can receive native assets. + */ + Payable = 0x04, + /** + * Contract modifies blockchain storage and can receive native assets. + */ + HasStoragePayable = 0x05, +} + +export interface WildcardContainer { + readonly data?: readonly T[]; +} + +export interface ContractPermissionDescriptor { + readonly hashOrGroup: UInt160 | ECPoint | undefined; + // TODO: what do do here? WIP? + // readonly isHash: () => boolean; + // readonly isGroup: () => boolean; + // readonly isWildcard: () => boolean; +} + +/** + * Describes which contracts may be invoked and which methods are called. + */ +export interface ContractPermissions { + readonly contract: ContractPermissionDescriptor; + readonly methods: WildcardContainer; + // TODO: what to do with isAllowed? + // readonly isAllowed: (manifest: ContractManifest, method: string) => boolean; +} + +/** + * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, + * it will be limited by its declared list of features and permissions. + */ +export interface ContractManifest { + /** + * Max length for a valid Contract Manifest. + */ + // readonly maxLength: 2048; // TODO: what to do here? + /** + * Size of serialized contract. + */ + // readonly size: () => number; // TODO: what to do here? + /** + * Contract hash. + */ + // readonly hash: () => UInt160; // TODO: what to do here? + /** + * Set of mutually trusted contracts. + */ + readonly groups: readonly ContractGroup[]; + /** + * The features field describes what features are available for the contract. + */ + readonly features: { + readonly storage: boolean; + readonly payable: boolean; + }; + /** + * 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 ContractPermissions[]; + /** + * The trusts field is an array containing a set of contract hashes or group of public keys. + */ + readonly trusts: WildcardContainer; + /** + * The safeMethods field is an array containing a set of safe methods. */ - readonly events?: readonly ABIEvent[]; + readonly safeMethods: WildcardContainer; } declare const OpaqueTagSymbol: unique symbol; @@ -1717,140 +1647,38 @@ 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. - */ - readonly version: number; /** * `AddressString` of this `Contract`. */ - readonly address: AddressString; + readonly address: string; // TODO: check this shouldn't be AddressString /** * `Contract` code. */ readonly script: BufferString; /** - * Expected parameters of this `Contract` - */ - readonly parameters: readonly ContractParameterType[]; - /** - * Return type of this `Contract` - */ - readonly returnType: ContractParameterType; - /** - * Name of this `Contract`. For informational purposes only. - */ - readonly name: string; - /** - * 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. + * The `Contract`'s manifest. */ - readonly storage: boolean; - /** - * `true` if this `Contract` can make dynamic invocations. - */ - readonly dynamicInvoke: boolean; - /** - * `true` if this `Contract` accepts first-class `Asset`s and/or tokens. - */ - readonly payable: boolean; + readonly manifest: ContractManifest; } /* BEGIN LOW-LEVEL API */ +export interface ContractParameterDeclaration { + readonly type: ContractParameter['type']; + readonly name: string; +} + /** * Invocation stack item for a `Signature`. * * @see ContractParameter * @see SignatureString */ -export interface SignatureContractParameter { +export interface SignatureContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `SignatureContractParameter` from other `ContractParameter` object types. */ @@ -1866,7 +1694,7 @@ export interface SignatureContractParameter { * * @see ContractParameter */ -export interface BooleanContractParameter { +export interface BooleanContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `BooleanContractParameter` from other `ContractParameter` object types. */ @@ -1885,7 +1713,7 @@ export interface BooleanContractParameter { * * @see ContractParameter */ -export interface IntegerContractParameter { +export interface IntegerContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `IntegerContractParameter` from other `ContractParameter` object types. */ @@ -1902,7 +1730,7 @@ export interface IntegerContractParameter { * @see ContractParameter * @see AddressString */ -export interface AddressContractParameter { +export interface AddressContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `AddressContractParameter` from other `ContractParameter` object types. */ @@ -1913,13 +1741,30 @@ export interface AddressContractParameter { readonly value: AddressString; } +/** + * Invocation stack item for a `Hash160`. + * + * @see ContractParameter + * @see UInt160 + */ +export interface Hash160ContractParameter extends ContractParameterDeclaration { + /** + * `type` distinguishes `Hash160ContractParameter` from other `ContractParameter` object types. + */ + readonly type: 'Hash160'; + /** + * NEO address in base58 encoded string format. + */ + readonly value: string; +} + /** * Invocation stack item for a `Hash256`. * * @see ContractParameter * @see Hash256String */ -export interface Hash256ContractParameter { +export interface Hash256ContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `Hash256ContractParameter` from other `ContractParameter` object types. */ @@ -1936,7 +1781,7 @@ export interface Hash256ContractParameter { * @see ContractParameter * @see BufferString */ -export interface BufferContractParameter { +export interface BufferContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `BufferContractParameter` from other `ContractParameter` object types. */ @@ -1953,7 +1798,7 @@ export interface BufferContractParameter { * @see ContractParameter * @see PublicKeyString */ -export interface PublicKeyContractParameter { +export interface PublicKeyContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `PublicKeyContractParameter` from other `ContractParameter` object types. */ @@ -1969,7 +1814,7 @@ export interface PublicKeyContractParameter { * * @see ContractParameter */ -export interface StringContractParameter { +export interface StringContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `StringContractParameter` from other `ContractParameter` object types. */ @@ -1985,7 +1830,7 @@ export interface StringContractParameter { * * @see ContractParameter */ -export interface ArrayContractParameter { +export interface ArrayContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `ArrayContractParameter` from other `ContractParameter` object types. */ @@ -2001,7 +1846,7 @@ export interface ArrayContractParameter { * * @see ContractParameter */ -export interface MapContractParameter { +export interface MapContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `MapContractParameter` from other `ContractParameter` object types. */ @@ -2019,7 +1864,7 @@ export interface MapContractParameter { * * @see ContractParameter */ -export interface InteropInterfaceContractParameter { +export interface InteropInterfaceContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `InteropInterfaceContractParameter` from other `ContractParameter` object types. */ @@ -2031,7 +1876,7 @@ export interface InteropInterfaceContractParameter { * * @see ContractParameter */ -export interface VoidContractParameter { +export interface VoidContractParameter extends ContractParameterDeclaration { /** * `type` distinguishes `VoidContractParameter` from other `ContractParameter` object types. */ @@ -2048,6 +1893,7 @@ export type ContractParameter = | BooleanContractParameter | IntegerContractParameter | AddressContractParameter + | Hash160ContractParameter | Hash256ContractParameter | BufferContractParameter | PublicKeyContractParameter @@ -2095,7 +1941,7 @@ export interface RawInvocationResultError extends RawInvocationResultBase { /** * A descriptive message indicating why the invocation failed. */ - readonly message: string; + // readonly message: string; // TODO: remove this? } /** @@ -2350,7 +2196,7 @@ export interface RawInvocationData { /** * `Asset` created by the invocation. */ - readonly asset?: Asset; + // readonly asset?: Asset; // TODO: check that we want to remove this. Replace somehow? /** * `Contract`s created by the invocation. */ 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 59a5ee9077..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[]; - public 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 a0c749a088..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, - }); - } - - public 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 0556591a00..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; - public 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 e44142734f..0000000000 --- a/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts +++ /dev/null @@ -1,127 +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, - }); - } - - public 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), - ]), - voteUpdates: voteUpdates.map(([address, votes]) => [ - crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: address, - }), - votes.map((vote) => common.ecPointToString(vote)), - ]), - 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 7913f1b635..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, - }); - } - - public 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 131a48f798..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; - public 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 117c8c36a1..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; - public 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 b9249c1d80..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; - public 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 c136e27307..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[]; - public 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..83f619583e 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -1,58 +1,137 @@ -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 { + common, + crypto, + InvalidFormatError, + InvocationDataJSON, + InvocationTransactionJSON, + InvocationTransactionModel, + InvocationTransactionModelAdd, + IOHelper, + JSONHelper, + UInt256, +} from '@neo-one/client-common'; +import { Constructor } from '@neo-one/utils'; +import { BN } from 'bn.js'; +import { VerifyError } from '../errors'; +import { createDeserializeWire, 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 type Transaction = - | MinerTransaction - | IssueTransaction - | ClaimTransaction - | EnrollmentTransaction - | RegisterTransaction - | ContractTransaction - | PublishTransaction - | StateTransaction - | InvocationTransaction; - export interface TransactionKey { readonly hash: UInt256; } -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 deserializeTransactionWireBase = (options: DeserializeWireBaseOptions): Transaction => + Transaction.deserializeWireBase(options); export const deserializeTransactionWire = createDeserializeWire(deserializeTransactionWireBase); + +export interface InvocationTransactionAdd extends InvocationTransactionModelAdd {} + +const MAX_SCRIPT_SIZE = 65536; + +export class Transaction extends TransactionBase< + TransactionType.Invocation, + InvocationTransactionJSON, + Constructor> +>(InvocationTransactionModel) { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { + 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, + }); + } + + public 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), + ]), + voteUpdates: voteUpdates.map(([address, votes]) => [ + crypto.scriptHashToAddress({ + addressVersion: context.addressVersion, + scriptHash: address, + }), + votes.map((vote) => common.ecPointToString(vote)), + ]), + 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/TransactionBase.ts b/packages/neo-one-node-core/src/transaction/TransactionBase.ts index 212e030b73..6a3cffa6d0 100644 --- a/packages/neo-one-node-core/src/transaction/TransactionBase.ts +++ b/packages/neo-one-node-core/src/transaction/TransactionBase.ts @@ -1,5 +1,4 @@ import { - assertTransactionType, common, ECPoint, hasFlag, @@ -37,7 +36,6 @@ import { Attribute, AttributeUsage, deserializeAttributeWireBase, UInt160Attribu 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'; @@ -50,7 +48,7 @@ const getUtilityValue = ({ utilityToken, }: { readonly outputs: readonly Output[]; - readonly utilityToken: RegisterTransaction; + readonly utilityToken: Transaction; }) => outputs .filter((output) => common.uInt256Equal(output.asset, utilityToken.hash)) @@ -58,8 +56,8 @@ const getUtilityValue = ({ export interface FeeContext { readonly getOutput: (input: Input) => Promise; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; + readonly governingToken: Transaction; + readonly utilityToken: Transaction; readonly fees: { [K in TransactionType]?: BN }; readonly registerValidatorFee: BN; } @@ -87,8 +85,8 @@ export interface TransactionVerifyOptions { readonly getAllValidators: () => Promise; readonly verifyScript: VerifyScript; readonly currentHeight: number; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; + readonly governingToken: Transaction; + readonly utilityToken: Transaction; readonly fees: { [K in TransactionType]?: BN }; readonly registerValidatorFee: BN; readonly memPool?: readonly Transaction[]; @@ -96,20 +94,18 @@ export interface TransactionVerifyOptions { /** @internal */ export function TransactionBase< - Type extends TransactionType, TransactionJSON, - TBase extends Constructor> + TBase extends Constructor> >(Base: TBase) { abstract class TransactionBaseClass extends Base implements EquatableKey, SerializableJSON { public static readonly WitnessConstructor: Constructor = Witness; public static deserializeTransactionBaseStartWireBase({ reader, - }: DeserializeWireBaseOptions): { readonly type: TransactionType; readonly version: number } { - const type = assertTransactionType(reader.readUInt8()); + }: DeserializeWireBaseOptions): { readonly version: number } { const version = reader.readUInt8(); - return { type, version }; + return { version }; } public static deserializeTransactionBaseEndWireBase( diff --git a/packages/neo-one-node-core/src/transaction/common.ts b/packages/neo-one-node-core/src/transaction/common.ts index 0f19955740..e69de29bb2 100644 --- a/packages/neo-one-node-core/src/transaction/common.ts +++ b/packages/neo-one-node-core/src/transaction/common.ts @@ -1,13 +0,0 @@ -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..f3ab4c46c3 100644 --- a/packages/neo-one-node-core/src/transaction/index.ts +++ b/packages/neo-one-node-core/src/transaction/index.ts @@ -1,14 +1,4 @@ -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 './Transaction'; export * from './TransactionBase'; export * from './TransactionType'; From ec2678bf61f56a3c3dd76d8e7ede74f143b733dd Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 20 Aug 2020 12:44:22 -0700 Subject: [PATCH 091/141] feat(vm): add initial VM support, breakout core changes into temp packages (#2143) * feat(vm): add initial C# VM support * dev(csharp): temporarily add more \`neo-one-csharp-*\` packages for migrating to neo3. --- .gitignore | 2 + .vscode/settings.json | 3 + README.md | 6 + .../rush/browser-approved-packages.json | 16 + common/config/rush/yarn.lock | 22 +- common/scripts/neo-one-prune.js | 2 +- .../environments/test/jestSetup.js | 1 - packages/neo-one-build-tests/jest/unit.js | 1 + .../src/__tests__/ScriptBuilder.test.ts | 2 +- .../transactionModels.test.ts.snap | 21 - packages/neo-one-client-common/src/common.ts | 2 +- packages/neo-one-client-common/src/crypto.ts | 4 +- .../src/models/SignerModel.ts | 12 +- .../src/models/WitnessScopeModel.ts | 11 +- .../models/transaction/TransactionModel.ts | 16 +- .../attribute/AttributeBaseModel.ts | 6 +- .../attribute/HighPriorityAttributeModel.ts | 28 +- .../neo-one-client-common/src/models/types.ts | 28 +- packages/neo-one-client-common/src/utils.ts | 13 + .../src/__data__/factory.ts | 4 +- .../src/__data__/verifyDataProvider.ts | 2 +- .../src/provider/NEODataProvider.ts | 4 +- .../src/provider/convert.ts | 2 +- .../src/models/index.ts | 1 - .../transaction/IssueTransactionModel.ts | 69 - .../src/models/transaction/index.ts | 1 - .../src/__data__/factory.ts | 2 +- .../neo-one-csharp-blockchain/gulpfile.js | 5 + .../neo-one-csharp-blockchain/package.json | 28 + .../neo-one-csharp-blockchain/src/verify.ts | 150 ++ .../neo-one-csharp-blockchain/tsconfig.json | 3 + packages/neo-one-csharp-core/gulpfile.js | 5 + packages/neo-one-csharp-core/package.json | 28 + packages/neo-one-csharp-core/src/Block.ts | 225 +++ packages/neo-one-csharp-core/src/BlockBase.ts | 225 +++ packages/neo-one-csharp-core/src/CallFlags.ts | 11 + .../neo-one-csharp-core/src/ConsensusData.ts | 62 + packages/neo-one-csharp-core/src/Equatable.ts | 9 + packages/neo-one-csharp-core/src/Header.ts | 66 + .../neo-one-csharp-core/src/Serializable.ts | 63 + packages/neo-one-csharp-core/src/Signer.ts | 66 + .../src/StackItems/StackItem.ts | 79 + .../src/StackItems/StackItemType.ts | 12 + .../src/StackItems/index.ts | 2 + .../neo-one-csharp-core/src/TrimmedBlock.ts | 136 ++ .../neo-one-csharp-core/src/Verifiable.ts | 24 + packages/neo-one-csharp-core/src/Witness.ts | 54 + packages/neo-one-csharp-core/src/constants.ts | 6 + .../src/crypto/MerkleTree.ts | 158 ++ .../neo-one-csharp-core/src/crypto/index.ts | 1 + packages/neo-one-csharp-core/src/errors.ts | 31 + packages/neo-one-csharp-core/src/index.ts | 17 + .../src/transaction/Transaction.ts | 190 +++ .../src/transaction/attributes/Attribute.ts | 18 + .../transaction/attributes/AttributeBase.ts | 35 + .../attributes/HighPriorityAttribute.ts | 7 + .../src/transaction/attributes/index.ts | 2 + .../src/transaction/index.ts | 2 + .../src/utils/BinaryReader.ts | 204 +++ .../neo-one-csharp-core/src/utils/index.ts | 2 + .../neo-one-csharp-core/src/utils/utils.ts | 198 +++ packages/neo-one-csharp-core/src/vm.ts | 4 + packages/neo-one-csharp-core/tsconfig.json | 3 + packages/neo-one-csharp-vm/gulpfile.js | 5 + packages/neo-one-csharp-vm/lib/Blockchain.cs | 21 + .../neo-one-csharp-vm/lib/EngineDispatcher.cs | 175 +++ .../lib/EngineDispatcher.csproj | 30 + .../neo-one-csharp-vm/lib/ReturnHelpers.cs | 142 ++ packages/neo-one-csharp-vm/package.json | 28 + .../src/ApplicationEngine.ts | 164 ++ .../src/StackItems/StackItemReturn.ts | 76 + .../neo-one-csharp-vm/src/StackItems/index.ts | 2 + .../neo-one-csharp-vm/src/StackItems/parse.ts | 105 ++ .../src/__tests__/ApplicationEngine.test.ts | 28 + .../src/__tests__/storage.test.ts | 35 + .../src/__tests__/syscalls.test.ts | 206 +++ packages/neo-one-csharp-vm/src/constants.ts | 9 + packages/neo-one-csharp-vm/src/converters.ts | 19 + .../src/createEngineDispatcher.ts | 44 + packages/neo-one-csharp-vm/src/dispatcher.ts | 22 + packages/neo-one-csharp-vm/src/index.ts | 1 + packages/neo-one-csharp-vm/src/run.ts | 21 + packages/neo-one-csharp-vm/src/types.ts | 7 + packages/neo-one-csharp-vm/tsconfig.json | 3 + .../neo-one-node-blockchain/src/Blockchain.ts | 184 +-- .../src/StorageCache.ts | 43 +- .../neo-one-node-blockchain/src/Verifiable.ts | 126 ++ .../src/__tests__/Blockchain.test.ts | 29 +- .../src/wrapExecuteScripts.ts | 2 +- packages/neo-one-node-core/src/Block.ts | 312 ++-- packages/neo-one-node-core/src/BlockBase.ts | 132 +- packages/neo-one-node-core/src/BlockData.ts | 77 - .../neo-one-node-core/src/ConsensusData.ts | 64 + packages/neo-one-node-core/src/Header.ts | 28 +- .../neo-one-node-core/src/ScriptContainer.ts | 2 +- .../neo-one-node-core/src/Serializable.ts | 17 +- packages/neo-one-node-core/src/Signer.ts | 66 + .../neo-one-node-core/src/TransactionData.ts | 148 -- .../neo-one-node-core/src/TrimmedBlock.ts | 136 ++ packages/neo-one-node-core/src/Verifiable.ts | 131 ++ packages/neo-one-node-core/src/Witness.ts | 41 +- .../src/__tests__/newBlock.ts | 33 + packages/neo-one-node-core/src/index.ts | 4 +- .../src/invocationResult/InvocationResult.ts | 4 +- .../invocationResult/InvocationResultError.ts | 10 +- .../InvocationResultSuccess.ts | 10 +- .../src/transaction/Transaction.ts | 253 +-- .../src/transaction/TransactionBase.ts | 473 ------ .../src/transaction/TransactionType.ts | 1 - .../src/transaction/attribute/Attribute.ts | 64 - .../transaction/attribute/AttributeBase.ts | 36 - .../transaction/attribute/AttributeUsage.ts | 1 - .../transaction/attribute/BufferAttribute.ts | 67 - .../transaction/attribute/ECPointAttribute.ts | 45 - .../transaction/attribute/UInt160Attribute.ts | 43 - .../transaction/attribute/UInt256Attribute.ts | 62 - .../src/transaction/attribute/index.ts | 7 - .../src/transaction/attributes/Attribute.ts | 18 + .../transaction/attributes/AttributeBase.ts | 35 + .../attributes/HighPriorityAttribute.ts | 7 + .../src/transaction/attributes/index.ts | 2 + .../src/transaction/common.ts | 0 .../src/transaction/index.ts | 6 +- .../src/transaction/state/StateDescriptor.ts | 216 --- .../transaction/state/StateDescriptorType.ts | 1 - .../src/transaction/state/index.ts | 2 - .../src/utils/BinaryReader.ts | 2 +- .../src/levelUpStorage.ts | 1 - .../src/__tests__/execute.test.ts | 16 +- .../src/__tests__/syscalls.test.ts | 2 +- packages/neo-one-node-vm/src/execute.ts | 20 +- packages/neo-one-node-vm/src/opcodes.ts | 16 +- packages/neo-one-node-vm/src/syscalls.ts | 1397 +++-------------- rush.json | 18 + 134 files changed, 4662 insertions(+), 3303 deletions(-) delete mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModels.test.ts.snap delete mode 100644 packages/neo-one-client-full-common/src/models/transaction/IssueTransactionModel.ts delete mode 100644 packages/neo-one-client-full-common/src/models/transaction/index.ts create mode 100644 packages/neo-one-csharp-blockchain/gulpfile.js create mode 100644 packages/neo-one-csharp-blockchain/package.json create mode 100644 packages/neo-one-csharp-blockchain/src/verify.ts create mode 100644 packages/neo-one-csharp-blockchain/tsconfig.json create mode 100644 packages/neo-one-csharp-core/gulpfile.js create mode 100644 packages/neo-one-csharp-core/package.json create mode 100644 packages/neo-one-csharp-core/src/Block.ts create mode 100644 packages/neo-one-csharp-core/src/BlockBase.ts create mode 100644 packages/neo-one-csharp-core/src/CallFlags.ts create mode 100644 packages/neo-one-csharp-core/src/ConsensusData.ts create mode 100644 packages/neo-one-csharp-core/src/Equatable.ts create mode 100644 packages/neo-one-csharp-core/src/Header.ts create mode 100644 packages/neo-one-csharp-core/src/Serializable.ts create mode 100644 packages/neo-one-csharp-core/src/Signer.ts create mode 100644 packages/neo-one-csharp-core/src/StackItems/StackItem.ts create mode 100644 packages/neo-one-csharp-core/src/StackItems/StackItemType.ts create mode 100644 packages/neo-one-csharp-core/src/StackItems/index.ts create mode 100644 packages/neo-one-csharp-core/src/TrimmedBlock.ts create mode 100644 packages/neo-one-csharp-core/src/Verifiable.ts create mode 100644 packages/neo-one-csharp-core/src/Witness.ts create mode 100644 packages/neo-one-csharp-core/src/constants.ts create mode 100644 packages/neo-one-csharp-core/src/crypto/MerkleTree.ts create mode 100644 packages/neo-one-csharp-core/src/crypto/index.ts create mode 100644 packages/neo-one-csharp-core/src/errors.ts create mode 100644 packages/neo-one-csharp-core/src/index.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/Transaction.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/index.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/index.ts create mode 100644 packages/neo-one-csharp-core/src/utils/BinaryReader.ts create mode 100644 packages/neo-one-csharp-core/src/utils/index.ts create mode 100644 packages/neo-one-csharp-core/src/utils/utils.ts create mode 100644 packages/neo-one-csharp-core/src/vm.ts create mode 100644 packages/neo-one-csharp-core/tsconfig.json create mode 100644 packages/neo-one-csharp-vm/gulpfile.js create mode 100644 packages/neo-one-csharp-vm/lib/Blockchain.cs create mode 100644 packages/neo-one-csharp-vm/lib/EngineDispatcher.cs create mode 100644 packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj create mode 100644 packages/neo-one-csharp-vm/lib/ReturnHelpers.cs create mode 100644 packages/neo-one-csharp-vm/package.json create mode 100644 packages/neo-one-csharp-vm/src/ApplicationEngine.ts create mode 100644 packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts create mode 100644 packages/neo-one-csharp-vm/src/StackItems/index.ts create mode 100644 packages/neo-one-csharp-vm/src/StackItems/parse.ts create mode 100644 packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts create mode 100644 packages/neo-one-csharp-vm/src/__tests__/storage.test.ts create mode 100644 packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts create mode 100644 packages/neo-one-csharp-vm/src/constants.ts create mode 100644 packages/neo-one-csharp-vm/src/converters.ts create mode 100644 packages/neo-one-csharp-vm/src/createEngineDispatcher.ts create mode 100644 packages/neo-one-csharp-vm/src/dispatcher.ts create mode 100644 packages/neo-one-csharp-vm/src/index.ts create mode 100644 packages/neo-one-csharp-vm/src/run.ts create mode 100644 packages/neo-one-csharp-vm/src/types.ts create mode 100644 packages/neo-one-csharp-vm/tsconfig.json create mode 100644 packages/neo-one-node-blockchain/src/Verifiable.ts delete mode 100644 packages/neo-one-node-core/src/BlockData.ts create mode 100644 packages/neo-one-node-core/src/ConsensusData.ts create mode 100644 packages/neo-one-node-core/src/Signer.ts delete mode 100644 packages/neo-one-node-core/src/TransactionData.ts create mode 100644 packages/neo-one-node-core/src/TrimmedBlock.ts create mode 100644 packages/neo-one-node-core/src/Verifiable.ts create mode 100644 packages/neo-one-node-core/src/__tests__/newBlock.ts delete mode 100644 packages/neo-one-node-core/src/transaction/TransactionBase.ts delete mode 100644 packages/neo-one-node-core/src/transaction/TransactionType.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/Attribute.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/AttributeBase.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/AttributeUsage.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/BufferAttribute.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/ECPointAttribute.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/UInt160Attribute.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/UInt256Attribute.ts delete mode 100644 packages/neo-one-node-core/src/transaction/attribute/index.ts create mode 100644 packages/neo-one-node-core/src/transaction/attributes/Attribute.ts create mode 100644 packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts create mode 100644 packages/neo-one-node-core/src/transaction/attributes/HighPriorityAttribute.ts create mode 100644 packages/neo-one-node-core/src/transaction/attributes/index.ts delete mode 100644 packages/neo-one-node-core/src/transaction/common.ts delete mode 100644 packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts delete mode 100644 packages/neo-one-node-core/src/transaction/state/StateDescriptorType.ts delete mode 100644 packages/neo-one-node-core/src/transaction/state/index.ts diff --git a/.gitignore b/.gitignore index 37a5d424e3..2df4223226 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ /build/ /tmp /packages/*/dist +/packages/*/lib/bin +/packages/*/lib/obj .rpt2_cache /reports .nyc_output diff --git a/.vscode/settings.json b/.vscode/settings.json index f0e7fc10e7..3f0b27a512 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,5 +20,8 @@ }, "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..f36b57d6f3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ +## 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. + # 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 +25,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/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 34508186bd..310a7cde8f 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -198,6 +198,14 @@ "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" ] @@ -210,6 +218,10 @@ "name": "@neo-one/ec-key", "allowedCategories": [ "production" ] }, + { + "name": "@neo-one/edge", + "allowedCategories": [ "production" ] + }, { "name": "@neo-one/editor", "allowedCategories": [ "web" ] @@ -606,6 +618,10 @@ "name": "dgeni-packages", "allowedCategories": [ "web" ] }, + { + "name": "edge-js", + "allowedCategories": [ "production" ] + }, { "name": "elliptic", "allowedCategories": [ "production" ] diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 4a9064cf79..37f5e4c011 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -1666,6 +1666,14 @@ 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" @@ -2251,6 +2259,13 @@ dependencies: gulp "~4.0.2" +"@rush-temp/csharp-vm@file:./projects/csharp-vm.tgz": + version "0.0.0" + resolved "file:./projects/csharp-vm.tgz#5790613b20127993411bbaf8cb19d68ccf9e3be2" + dependencies: + "@neo-one/edge" "^15.0.0" + 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" @@ -8441,6 +8456,11 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: 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" @@ -14381,7 +14401,7 @@ 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: +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== diff --git a/common/scripts/neo-one-prune.js b/common/scripts/neo-one-prune.js index 1b548dd527..0467191c71 100644 --- a/common/scripts/neo-one-prune.js +++ b/common/scripts/neo-one-prune.js @@ -9,7 +9,7 @@ const NEO_ONE_NM_PATH = path.resolve( '@neo-one', ); -const whitelist = new Set(['ec-key']); +const whitelist = new Set(['ec-key', 'edge']); const readDir = async (dir) => new Promise((resolve, reject) => diff --git a/packages/neo-one-build-tests/environments/test/jestSetup.js b/packages/neo-one-build-tests/environments/test/jestSetup.js index 000ee0559b..935b7a034a 100644 --- a/packages/neo-one-build-tests/environments/test/jestSetup.js +++ b/packages/neo-one-build-tests/environments/test/jestSetup.js @@ -15,7 +15,6 @@ global.console = { error: console.error, warn: console.warn, info: jest.fn(), - debug: jest.fn(), }; afterEach(async () => { diff --git a/packages/neo-one-build-tests/jest/unit.js b/packages/neo-one-build-tests/jest/unit.js index 48538cf0e0..973ad39a48 100644 --- a/packages/neo-one-build-tests/jest/unit.js +++ b/packages/neo-one-build-tests/jest/unit.js @@ -5,6 +5,7 @@ module.exports = { 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$': 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 96ce511019..dec8389728 100644 --- a/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts +++ b/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts @@ -2,7 +2,7 @@ import { BN } from 'bn.js'; import { Op } from '../models/vm'; import { ScriptBuilder } from '../ScriptBuilder'; -describe('Scripter Builder Tests', () => { +describe('Script Builder Tests', () => { let builder: ScriptBuilder; beforeEach(() => { 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/common.ts b/packages/neo-one-client-common/src/common.ts index 2fbc53da84..029d1f17b0 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -217,7 +217,7 @@ const ONE_HUNDRED_MILLION_FIXED8 = fixed8FromDecimal(100000000); export const common = { D8, - NEO_ADDRESS_VERSION: 23, + NEO_ADDRESS_VERSION: 0x35, NEO_PRIVATE_KEY_VERSION: 0x80, GROUPING_SIZE_BYTES: 16, // TODO: remove? added by Dan? MAX_CONTRACT_STRING: 252, // TODO: remove? added by Dan? diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index dd38c48754..751d9b214c 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -252,7 +252,7 @@ const createInvocationScript = (message: Buffer, privateKey: PrivateKey): Buffer const createVerificationScript = (publicKey: ECPoint): Buffer => { const builder = new ScriptBuilder(); builder.emitPushECPoint(publicKey); - builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); // TODO: check + builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); return builder.build(); }; @@ -311,7 +311,7 @@ const createMultiSignatureVerificationScript = (mIn: number, publicKeys: readonl builder.emitPushECPoint(ecPoint); }); builder.emitPushInt(publicKeysSorted.length); - builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); // TODO: check + builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); return builder.build(); }; diff --git a/packages/neo-one-client-common/src/models/SignerModel.ts b/packages/neo-one-client-common/src/models/SignerModel.ts index d8e284abd1..00a186aecf 100644 --- a/packages/neo-one-client-common/src/models/SignerModel.ts +++ b/packages/neo-one-client-common/src/models/SignerModel.ts @@ -1,11 +1,11 @@ import { BinaryWriter } from '../BinaryWriter'; import { ECPoint, UInt160 } from '../common'; import { createSerializeWire, SerializableWire, SerializeWire } from './Serializable'; -import { toWitnessScope, witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; +import { witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; export interface SignerAdd { readonly account: UInt160; - readonly scopes: keyof typeof WitnessScopeModel; + readonly scopes: WitnessScopeModel; readonly allowedContracts?: readonly UInt160[]; readonly allowedGroups?: readonly ECPoint[]; } @@ -16,7 +16,7 @@ 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: keyof typeof WitnessScopeModel; + public readonly scopes: WitnessScopeModel; public readonly allowedContracts: readonly UInt160[]; public readonly allowedGroups: readonly ECPoint[]; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); @@ -30,11 +30,11 @@ export class SignerModel implements SerializableWire { public serializeWireBase(writer: BinaryWriter): void { writer.writeUInt160(this.account); - writer.writeUInt8(toWitnessScope(this.scopes)); - if (witnessScopeHasFlag(this.scopes, 'CustomContracts')) { + writer.writeUInt8(this.scopes); + if (witnessScopeHasFlag(this.scopes, WitnessScopeModel.CustomContracts)) { writer.writeArray(this.allowedContracts, (contract) => writer.writeUInt160(contract)); } - if (witnessScopeHasFlag(this.scopes, 'CustomGroups')) { + if (witnessScopeHasFlag(this.scopes, WitnessScopeModel.CustomGroups)) { writer.writeArray(this.allowedGroups, (group) => writer.writeECPoint(group)); } } diff --git a/packages/neo-one-client-common/src/models/WitnessScopeModel.ts b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts index a966e2abd1..d978ad1ecf 100644 --- a/packages/neo-one-client-common/src/models/WitnessScopeModel.ts +++ b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts @@ -41,14 +41,15 @@ export const assertWitnessScopeJSON = (value: string): WitnessScopeJSON => { export const toWitnessScope = (value: WitnessScopeJSON): WitnessScopeModel => assertWitnessScope(WitnessScopeModel[value]); -export const witnessScopeHasFlag = (value: keyof typeof WitnessScopeModel, flag: keyof typeof WitnessScopeModel) => { - if ((value === 'Global' && flag !== 'Global') || (value !== 'Global' && flag === 'Global')) { +export const witnessScopeHasFlag = (value: WitnessScopeModel, flag: WitnessScopeModel) => { + if ( + (value === WitnessScopeModel.Global && flag !== WitnessScopeModel.Global) || + (value !== WitnessScopeModel.Global && flag === WitnessScopeModel.Global) + ) { return false; } - const valueHex = toWitnessScope(value); - const flagHex = toWitnessScope(flag); // tslint:disable-next-line: no-bitwise - if ((valueHex & flagHex) === flagHex) { + if ((value & flag) === flag) { return true; } 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 0b303ada54..6270e09ef5 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -15,23 +15,23 @@ export interface TransactionModelAdd< TSigner extends SignerModel = SignerModel > { readonly version?: number; - readonly attributes?: readonly TAttribute[]; - readonly witnesses?: readonly TWitness[]; - readonly signers?: readonly TSigner[]; readonly nonce: number; - readonly sender: UInt160; readonly systemFee: BN; readonly networkFee: BN; readonly validUntilBlock: number; + readonly attributes?: readonly TAttribute[]; + readonly signers?: readonly TSigner[]; readonly script: Buffer; + readonly witnesses?: readonly TWitness[]; readonly hash?: UInt256; } export const MAX_TRANSACTION_ATTRIBUTES = 16; export const MAX_TRANSACTION_SIZE = 102400; export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 2102400; +export const DEFAULT_VERSION = 0; -export abstract class TransactionModel< +export class TransactionModel< TAttribute extends AttributeModel = AttributeModel, TWitness extends WitnessModel = WitnessModel, TSigner extends SignerModel = SignerModel @@ -71,9 +71,7 @@ export abstract class TransactionModel< script, hash, }: TransactionModelAdd) { - // workaround: babel fails to transpile if we have - // static VERSION: number = 0; - this.version = version === undefined ? (this.constructor as typeof TransactionModel).VERSION : version; + this.version = version === undefined ? DEFAULT_VERSION : version; this.nonce = nonce; this.sender = signers[0].account; this.attributes = attributes; @@ -118,7 +116,6 @@ export abstract class TransactionModel< return new (this.constructor as any)({ version: this.version, nonce: this.nonce, - sender: this.sender, systemFee: this.systemFee, networkFee: this.networkFee, validUntilBlock: this.validUntilBlock, @@ -151,7 +148,6 @@ export abstract class TransactionModel< public serializeUnsignedBase(writer: BinaryWriter): void { writer.writeUInt8(this.version); writer.writeUInt32LE(this.nonce); - writer.writeUInt160(this.sender); writer.writeUInt64LE(this.systemFee); writer.writeUInt64LE(this.networkFee); writer.writeUInt32LE(this.validUntilBlock); 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 c514e438ff..686e5abfea 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 @@ -13,11 +13,11 @@ export abstract class AttributeBaseModel implements SerializableWire(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); export const utils = { @@ -84,5 +96,6 @@ export const utils = { fromSignedBuffer, bigNumberToBN, lazy, + lazyInput, randomUInt, }; diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index a354574cc6..74b511bb28 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -299,7 +299,7 @@ const createIntegerContractParameterJSON = ( const createInvocationResultSuccessJSON = ( options: Partial = {}, ): InvocationResultSuccessJSON => ({ - state: VMState.Halt, + state: VMState.HALT, gas_consumed: '20', gas_cost: '10', stack: [createIntegerContractParameterJSON()], @@ -309,7 +309,7 @@ const createInvocationResultSuccessJSON = ( const createInvocationResultErrorJSON = ( options: Partial = {}, ): InvocationResultErrorJSON => ({ - state: VMState.Fault, + state: VMState.FAULT, gas_consumed: '20', gas_cost: '10', stack: [createIntegerContractParameterJSON()], diff --git a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts index 603a3819dc..f1e631c369 100644 --- a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts +++ b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts @@ -49,7 +49,7 @@ const verifyInvocationResultSuccess = ( ) => { if ( invocationResult.state !== 'HALT' || - (invocationResultJSON.state !== VMState.Halt && invocationResultJSON.state !== 'HALT') + (invocationResultJSON.state !== VMState.HALT && invocationResultJSON.state !== 'HALT') ) { throw new Error('For TS'); } diff --git a/packages/neo-one-client-core/src/provider/NEODataProvider.ts b/packages/neo-one-client-core/src/provider/NEODataProvider.ts index d93b995acb..da4be423af 100644 --- a/packages/neo-one-client-core/src/provider/NEODataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEODataProvider.ts @@ -70,7 +70,7 @@ export class NEODataProvider extends DataProviderBase { if (result.state === 'HALT') { return convertCallReceipt({ result: { - state: VMState.Halt, + state: VMState.HALT, gas_consumed: gasConsumed, gas_cost: result.gas_consumed, stack: result.stack, @@ -81,7 +81,7 @@ export class NEODataProvider extends DataProviderBase { return convertCallReceipt({ result: { - state: VMState.Fault, + state: VMState.FAULT, gas_consumed: gasConsumed, gas_cost: result.gas_consumed, stack: result.stack, diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index e9736ff56c..48383010cc 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -105,7 +105,7 @@ export function convertAction( } export function convertInvocationResult(result: InvocationResultJSON): RawInvocationResult { - if (result.state === VMState.Fault) { + if (result.state === VMState.FAULT) { return { state: 'FAULT', gasConsumed: new BigNumber(result.gas_consumed), 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..b77b2e1b8e 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'; 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-core/src/__data__/factory.ts b/packages/neo-one-client-full-core/src/__data__/factory.ts index 8a1aceb43b..7e5da6dea3 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: VMState.HALT, gas_consumed: '20', gas_cost: '10', stack: [createIntegerContractParameterJSON()], diff --git a/packages/neo-one-csharp-blockchain/gulpfile.js b/packages/neo-one-csharp-blockchain/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-csharp-blockchain/package.json b/packages/neo-one-csharp-blockchain/package.json new file mode 100644 index 0000000000..18cfd02fbf --- /dev/null +++ b/packages/neo-one-csharp-blockchain/package.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/csharp-blockchain", + "version": "2.7.0", + "description": "NEO•ONE 3.x node-blockchain migration", + "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.7.0", + "@neo-one/csharp-core": "^2.7.0", + "@neo-one/csharp-vm": "^2.7.0", + "bn.js": "^5.0.0", + "lodash": "^4.17.15" + }, + "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-csharp-blockchain/src/verify.ts b/packages/neo-one-csharp-blockchain/src/verify.ts new file mode 100644 index 0000000000..ca1ea96e05 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/verify.ts @@ -0,0 +1,150 @@ +import { UInt160 } from '@neo-one/client-common'; +import { + BooleanStackItem, + CallFlags, + SnapshotMethods, + TriggerType, + Verifiable, + VerifyResult, +} from '@neo-one/csharp-core'; +import { withApplicationEngine } from '@neo-one/csharp-vm'; + +const maxVerificationGas = 0.5; + +interface ApplicationEngineVerifyOptions { + readonly verification: Buffer; + readonly offset: number; + readonly init?: ContractMethodDescriptor; +} + +const getApplicationEngineVerifyOptions = async ( + verification: Buffer, + snapshot: SnapshotMethods, + hash: UInt160, + scriptHash: UInt160, +): Promise => { + if (verification.length === 0) { + const contractState = await snapshot.tryGetContract(hash); + if (contractState === undefined) { + // TODO: implement an error + throw new Error('Failed to fetch contract from storage'); + } + const methodDescriptor = contractState.manifest.abi.getMethod('verify'); + if (methodDescriptor === undefined) { + // TODO: implement an error + throw new Error('Failed to get contract verify method'); + } + + return { + verification: contractState.script, + offset: methodDescriptor.offset, + init: contractState.manifest.abi.getMethod('_initialize'), + }; + } + + // TODO: look into this `possible-timing-attack` warning + if (hash !== scriptHash) { + throw new Error('Witness hash does not match verification hash'); + } + + return { + verification, + offset: 0, + }; +}; + +export const verifyWithApplicationEngine = ( + verifiable: Verifiable, + verification: Buffer, + index: number, + gas: number, + offset: number, + init?: ContractMethodDescriptor, +): VerifyResult => + withApplicationEngine({ trigger: TriggerType.Verification, container: verifiable, snapshot: true, gas }, (engine) => { + engine.loadScript(verification); + engine.loadClonedContext(offset); + if (init !== undefined) { + engine.loadClonedContext(init.offset); + } + engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); + + const state = engine.execute(); + if (state === 'FAULT') { + return { result: false, gas }; + } + + const stack = engine.resultStack; + if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { + return { result: false, gas }; + } + + return { result: true, gas: gas - engine.gasConsumed }; + }); + +export const tryVerifyHash = async ( + hash: UInt160, + index: number, + snapshot: SnapshotMethods, + verifiable: Verifiable, + gas: number, +): Promise => { + const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; + try { + const { verification, offset, init } = await getApplicationEngineVerifyOptions( + verificationScript, + snapshot, + hash, + scriptHash, + ); + + return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); + } catch { + return { gas, result: false }; + } +}; + +export const verifyWitnesses = async ( + verifiable: Verifiable, + snapshot: SnapshotMethods, + gasIn: number, +): Promise => { + if (gasIn < 0) { + return false; + } + + const gas = gasIn > maxVerificationGas ? maxVerificationGas : gasIn; + + let hashes: readonly UInt160[]; + try { + hashes = await verifiable.getScriptHashesForVerifying(snapshot); + } 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(hash, index, snapshot, verifiable, newGas), + previous: accPrevious && result, + }; + }, Promise.resolve({ next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true })); + + const { result: finalResult } = await next; + + return finalResult && previous; +}; diff --git a/packages/neo-one-csharp-blockchain/tsconfig.json b/packages/neo-one-csharp-blockchain/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-csharp-core/gulpfile.js b/packages/neo-one-csharp-core/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-csharp-core/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-csharp-core/package.json b/packages/neo-one-csharp-core/package.json new file mode 100644 index 0000000000..f44e43f98d --- /dev/null +++ b/packages/neo-one-csharp-core/package.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/csharp-core", + "version": "2.7.0", + "description": "NEO•ONE 3.x node-core migration", + "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.7.0", + "@neo-one/utils": "^2.6.1", + "bignumber.js": "^9.0.0", + "bn.js": "^5.0.0", + "lodash": "^4.17.15" + }, + "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-csharp-core/src/Block.ts b/packages/neo-one-csharp-core/src/Block.ts new file mode 100644 index 0000000000..a15261509b --- /dev/null +++ b/packages/neo-one-csharp-core/src/Block.ts @@ -0,0 +1,225 @@ +import { + BinaryWriter, + BlockJSON, + common, + InvalidFormatError, + IOHelper, + TransactionJSON, + UInt256, +} from '@neo-one/client-common'; +import { BlockBase, BlockBaseAdd } from './BlockBase'; +import { ConsensusData } from './ConsensusData'; +import { MerkleTree } from './crypto'; +import { Header } from './Header'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableJSON, + SerializableWire, + SerializeJSONContext, +} from './Serializable'; +import { Transaction } from './transaction'; +import { TrimmedBlock } from './TrimmedBlock'; +import { BinaryReader, utils } from './utils'; +import { Witness } from './Witness'; + +export interface BlockAdd extends BlockBaseAdd { + readonly consensusData?: ConsensusData; + readonly transactions: readonly Transaction[]; +} + +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; +// } + +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 SerializableWire, 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.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 = reader.readArray(() => Transaction.deserializeWireBase(options), 0x10000); + + if (transactions.length !== count - 1) { + throw new InvalidFormatError(`Expected ${count - 1} transactions on the block, found: ${transactions.length}`); + } + + 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({ + version: blockBase.version, + previousHash: blockBase.previousHash, + merkleRoot: blockBase.merkleRoot, + timestamp: blockBase.timestamp, + index: blockBase.index, + consensusData, + nextConsensus: blockBase.nextConsensus, + witness: blockBase.witness, + transactions, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Block { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly transactions: readonly Transaction[]; + public readonly consensusData?: ConsensusData; + protected readonly sizeExclusive = utils.lazy(() => + IOHelper.sizeOfArray(getCombinedModels(this.transactions, this.consensusData), (model) => model.size), + ); + 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, + }), + ); + + private readonly allHashesInternal = utils.lazy(() => + getCombinedModels(this.transactions, this.consensusData).map((model) => model.hash), + ); + + public constructor({ + version, + previousHash, + timestamp, + index, + consensusData, + nextConsensus, + witness, + hash, + transactions, + merkleRoot = MerkleTree.computeRoot(getCombinedModels(transactions, consensusData).map((model) => model.hash)), + }: BlockAdd) { + super({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + }); + + this.transactions = transactions; + this.consensusData = consensusData; + } + + public get header(): Header { + return this.headerInternal(); + } + + public get allHashes(): readonly UInt256[] { + return this.allHashesInternal(); + } + + public clone({ + transactions, + witness, + }: { + readonly transactions: readonly Transaction[]; + readonly witness: Witness; + }): Block { + return new Block({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + consensusData: this.consensusData, + nextConsensus: this.nextConsensus, + transactions, + witness, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + writer.writeArray(getCombinedModels(this.transactions, this.consensusData), (model) => + model.serializeWireBase(writer), + ); + } + + public serializeJSON(context: SerializeJSONContext): BlockJSON { + const blockBaseJSON = super.serializeJSON(context); + + return { + ...blockBaseJSON, + consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, + tx: this.transactions.map((transaction) => transaction.serializeJSON(context) as TransactionJSON), + // confirmations: blockBaseJSON.confirmations, TODO: is this our own property? + }; + } + + 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, + }); + } +} diff --git a/packages/neo-one-csharp-core/src/BlockBase.ts b/packages/neo-one-csharp-core/src/BlockBase.ts new file mode 100644 index 0000000000..00bb285a50 --- /dev/null +++ b/packages/neo-one-csharp-core/src/BlockBase.ts @@ -0,0 +1,225 @@ +import { + BinaryWriter, + BlockBaseJSON, + common, + crypto, + InvalidFormatError, + IOHelper, + JSONHelper, + UInt160, + UInt256, + UInt256Hex, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Equals, EquatableKey } from './Equatable'; +import { UnsignedBlockError } from './errors'; +import { Header } from './Header'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializeJSONContext, + SerializeWire, +} from './Serializable'; +import { utils } from './utils'; +import { SnapshotMethods, VerifyWitnesses } from './Verifiable'; +import { Witness } from './Witness'; + +export interface BlockBaseAdd { + readonly version?: number; + readonly previousHash: UInt256; + readonly merkleRoot: UInt256; + readonly timestamp: BN; + readonly index: number; + readonly nextConsensus: UInt160; + readonly witness?: Witness; + readonly hash?: UInt256; +} + +export abstract class BlockBase implements EquatableKey { + 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], + }; + } + public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): BlockBaseAdd { + const { reader } = options; + + const version = reader.readUInt32LE(); + const previousHash = reader.readUInt256(); + const merkleRoot = reader.readUInt256(); + const timestamp = reader.readUInt64LE(); + const index = reader.readUInt32LE(); + const nextConsensus = reader.readUInt160(); + + return { + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + }; + } + + public readonly version: number; + public readonly previousHash: UInt256; + public readonly merkleRoot: UInt256; + public readonly timestamp: BN; + public readonly index: number; + public readonly nextConsensus: UInt160; + public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: SnapshotMethods) => { + if (this.previousHash === common.ZERO_UINT256) { + return [this.witness.scriptHash]; + } + + const prevHeader = await tryGetHeader(this.previousHash); + 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 [prevHeader.nextConsensus]; + }); + // 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.bind(this)); + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly hashInternal: () => UInt256; + private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); + private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); + private readonly witnessInternal: Witness | undefined; + private readonly sizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt160 + + IOHelper.sizeOfUInt8 + + this.witness.size + + this.sizeExclusive(), + ); + + public constructor({ + version = 0, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + }: BlockBaseAdd) { + this.version = version; + this.previousHash = previousHash; + this.merkleRoot = merkleRoot; + this.timestamp = timestamp; + this.index = index; + this.nextConsensus = nextConsensus; + this.witnessInternal = witness; + const hashIn = hash; + this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; + } + + public get hash(): UInt256 { + return this.hashInternal(); + } + + public get hashHex(): UInt256Hex { + return this.hashHexInternal(); + } + + public get message(): Buffer { + return this.messageInternal(); + } + + public get size(): number { + return this.sizeInternal(); + } + + public get witness(): Witness { + if (this.witnessInternal === undefined) { + throw new UnsignedBlockError(common.uInt256ToString(this.hash)); + } + + 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.writeUInt64LE(this.timestamp); + writer.writeUInt32LE(this.index); + writer.writeUInt160(this.nextConsensus); + } + + public serializeWireBase(writer: BinaryWriter): void { + this.serializeUnsignedBase(writer); + writer.writeUInt8(1); + this.witness.serializeWireBase(writer); + } + + 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: JSONHelper.writeUInt64(this.timestamp), + index: this.index, + nextconsensus: crypto.scriptHashToAddress({ + addressVersion: context.addressVersion, + scriptHash: this.nextConsensus, + }), + + witnesses: [this.witness.serializeJSON(context)], + // confirmations: [] TODO: this is a property we used to use, do we still need? + }; + } + + public async verify(options: SnapshotMethods, verifyWitnesses: VerifyWitnesses) { + const prevHeader = await options.tryGetHeader(this.previousHash); + if (prevHeader === undefined) { + return false; + } + + if (prevHeader.index + 1 !== this.index) { + return false; + } + + if (prevHeader.timestamp.gte(this.timestamp)) { + return false; + } + + return verifyWitnesses(this, options, utils.ONE_HUNDRED_MILLION); + } + + protected readonly sizeExclusive: () => number = () => 0; +} diff --git a/packages/neo-one-csharp-core/src/CallFlags.ts b/packages/neo-one-csharp-core/src/CallFlags.ts new file mode 100644 index 0000000000..f372b4cc7f --- /dev/null +++ b/packages/neo-one-csharp-core/src/CallFlags.ts @@ -0,0 +1,11 @@ +export enum CallFlags { + None = 0, + AllowStates = 0b00000001, + AllowModifyStates = 0b00000010, + AllowCall = 0b00000100, + AllowNotify = 0b00001000, + // tslint:disable-next-line: no-bitwise + ReadOnly = AllowStates | AllowCall | AllowNotify, + // tslint:disable-next-line: no-bitwise + All = AllowStates | AllowModifyStates | AllowCall | AllowNotify, +} diff --git a/packages/neo-one-csharp-core/src/ConsensusData.ts b/packages/neo-one-csharp-core/src/ConsensusData.ts new file mode 100644 index 0000000000..2891674eb7 --- /dev/null +++ b/packages/neo-one-csharp-core/src/ConsensusData.ts @@ -0,0 +1,62 @@ +import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DEFAULT_VALIDATORS_COUNT } from './constants'; +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 } = options; + const primaryIndex = reader.readVarUIntLE(DEFAULT_VALIDATORS_COUNT.subn(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 readonly hashInternal = utils.lazy(() => crypto.hash256(this.serializeWire())); + + public constructor({ primaryIndex, nonce }: ConsensusDataAdd) { + this.primaryIndex = primaryIndex; + this.nonce = nonce; + } + + 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: this.nonce.toString(16), + }; + } +} diff --git a/packages/neo-one-csharp-core/src/Equatable.ts b/packages/neo-one-csharp-core/src/Equatable.ts new file mode 100644 index 0000000000..075d881ce5 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Equatable.ts @@ -0,0 +1,9 @@ +export type Equals = (other: {}) => boolean; +export interface Equatable { + readonly equals: Equals; +} + +export type ToKeyString = () => string; +export interface EquatableKey extends Equatable { + readonly toKeyString: ToKeyString; +} diff --git a/packages/neo-one-csharp-core/src/Header.ts b/packages/neo-one-csharp-core/src/Header.ts new file mode 100644 index 0000000000..d67b1aa27d --- /dev/null +++ b/packages/neo-one-csharp-core/src/Header.ts @@ -0,0 +1,66 @@ +import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper } from '@neo-one/client-common'; +import { BlockBase, BlockBaseAdd } from './BlockBase'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableJSON, + SerializableWire, + SerializeJSONContext, +} from './Serializable'; +import { TrimmedBlock } from './TrimmedBlock'; +import { BinaryReader, utils } from './utils'; + +export type HeaderAdd = BlockBaseAdd; + +export class Header extends BlockBase implements SerializableWire
, SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Header { + const { reader } = options; + const blockBase = super.deserializeWireBase(options); + if (reader.readUInt8() !== 0) { + throw new InvalidFormatError( + `Expected Header BinaryReader readUInt8(0) to be 0. Received: ${reader.readUInt8()}`, + ); + } + + return new this({ + version: blockBase.version, + previousHash: blockBase.previousHash, + merkleRoot: blockBase.merkleRoot, + timestamp: blockBase.timestamp, + index: blockBase.index, + nextConsensus: blockBase.nextConsensus, + witness: blockBase.witness, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Header { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + 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: [], + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + writer.writeUInt8(0); + } + + public serializeJSON(context: SerializeJSONContext): HeaderJSON { + return super.serializeJSON(context); + } +} diff --git a/packages/neo-one-csharp-core/src/Serializable.ts b/packages/neo-one-csharp-core/src/Serializable.ts new file mode 100644 index 0000000000..5b0fd0e2a5 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Serializable.ts @@ -0,0 +1,63 @@ +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 { BinaryReader } from './utils'; + +export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; + +export interface DeserializeWireContext { + readonly messageMagic: number; +} + +export interface DeserializeWireBaseOptions { + readonly context: DeserializeWireContext; + readonly reader: BinaryReader; +} + +export interface DeserializeWireOptions { + readonly context: DeserializeWireContext; + readonly buffer: Buffer; +} + +export type DeserializeWireBase = (options: DeserializeWireBaseOptions) => T; +export type DeserializeWire = (options: DeserializeWireOptions) => T; + +export function createDeserializeWire(deserializeWireBase: DeserializeWireBase): DeserializeWire { + return (options) => + deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); +} + +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; + +export interface SerializableJSON { + readonly serializeJSON: SerializeJSON; +} diff --git a/packages/neo-one-csharp-core/src/Signer.ts b/packages/neo-one-csharp-core/src/Signer.ts new file mode 100644 index 0000000000..204cf31610 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Signer.ts @@ -0,0 +1,66 @@ +import { + assertWitnessScope, + InvalidFormatError, + IOHelper, + JSONHelper, + SignerJSON, + SignerModel, + toJSONWitnessScope, + witnessScopeHasFlag, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from './Serializable'; +import { utils } from './utils'; + +const hasCustomContracts = (scopes: WitnessScopeModel) => + witnessScopeHasFlag(scopes, WitnessScopeModel.CustomContracts); +const hasCustomGroups = (scopes: WitnessScopeModel) => witnessScopeHasFlag(scopes, WitnessScopeModel.CustomGroups); + +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, + }); + } + + 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 get size() { + return this.sizeInternal(); + } + + public serializeJSON(_context: SerializeJSONContext): 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-csharp-core/src/StackItems/StackItem.ts b/packages/neo-one-csharp-core/src/StackItems/StackItem.ts new file mode 100644 index 0000000000..bbff7eb696 --- /dev/null +++ b/packages/neo-one-csharp-core/src/StackItems/StackItem.ts @@ -0,0 +1,79 @@ +import { BN } from 'bn.js'; +import { StackItemType } from './StackItemType'; + +export interface StackItemBase { + readonly type: keyof typeof StackItemType; + readonly isNull: boolean; +} + +export interface AnyStackItem extends StackItemBase { + readonly type: 'Any'; + readonly value: undefined; +} + +export interface PointerStackItem extends StackItemBase { + readonly type: 'Pointer'; + readonly value: Buffer; + readonly position: number; +} + +export interface BooleanStackItem extends StackItemBase { + readonly type: 'Boolean'; + readonly value: boolean; + readonly size: number; +} + +export interface IntegerStackItem extends StackItemBase { + readonly type: 'Integer'; + readonly value: BN; + readonly size: number; +} + +export interface ByteStringStackItem extends StackItemBase { + readonly type: 'ByteString'; + readonly value: string; + readonly size: number; + readonly _buffer: Buffer; +} + +export interface BufferStackItem extends StackItemBase { + readonly type: 'Buffer'; + readonly value: Buffer; + readonly size: number; +} + +export interface ArrayStackItem extends StackItemBase { + readonly type: 'Array'; + readonly value: readonly StackItem[]; + readonly count: number; +} + +export interface StructStackItem extends StackItemBase { + readonly type: 'Struct'; + readonly value: readonly StackItem[]; + readonly count: number; +} + +export interface MapStackItem extends StackItemBase { + readonly type: 'Map'; + readonly value: Map; + readonly count: number; +} + +// tslint:disable-next-line: no-any TODO: need to investigate how this is typed +export interface InteropInterface extends StackItemBase { + readonly type: 'InteropInterface'; + readonly value: T; +} + +export type PrimitiveStackItem = BooleanStackItem | IntegerStackItem | ByteStringStackItem; + +export type StackItem = + | AnyStackItem + | PointerStackItem + | PrimitiveStackItem + | BufferStackItem + | ArrayStackItem + | StructStackItem + | MapStackItem + | InteropInterface; diff --git a/packages/neo-one-csharp-core/src/StackItems/StackItemType.ts b/packages/neo-one-csharp-core/src/StackItems/StackItemType.ts new file mode 100644 index 0000000000..73fa88bc23 --- /dev/null +++ b/packages/neo-one-csharp-core/src/StackItems/StackItemType.ts @@ -0,0 +1,12 @@ +export enum StackItemType { + Any = 0x00, + Pointer = 0x10, + Boolean = 0x20, + Integer = 0x21, + ByteString = 0x28, + Buffer = 0x30, + Array = 0x40, + Struct = 0x41, + Map = 0x48, + InteropInterface = 0x60, +} diff --git a/packages/neo-one-csharp-core/src/StackItems/index.ts b/packages/neo-one-csharp-core/src/StackItems/index.ts new file mode 100644 index 0000000000..035c6b2dbf --- /dev/null +++ b/packages/neo-one-csharp-core/src/StackItems/index.ts @@ -0,0 +1,2 @@ +export * from './StackItem'; +export * from './StackItemType'; diff --git a/packages/neo-one-csharp-core/src/TrimmedBlock.ts b/packages/neo-one-csharp-core/src/TrimmedBlock.ts new file mode 100644 index 0000000000..e51e16d606 --- /dev/null +++ b/packages/neo-one-csharp-core/src/TrimmedBlock.ts @@ -0,0 +1,136 @@ +import { + BinaryWriter, + InvalidFormatError, + IOHelper, + JSONHelper, + SerializableWire, + Transaction, + 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, SerializeJSONContext } from './Serializable'; +import { utils } from './utils'; + +export interface TrimmedBlockAdd extends BlockBaseAdd { + readonly consensusData?: ConsensusData; + readonly hashes: readonly UInt256[]; +} + +export class TrimmedBlock extends BlockBase implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { + const { + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + } = BlockBase.deserializeBlockBaseWireBase(options); + const { reader } = options; + + const hashes = reader.readArray(reader.readUInt256, Block.MaxContentsPerBlock); + const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; + + return new this({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hashes, + consensusData, + }); + } + + 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, + }), + ); + + public constructor(options: TrimmedBlockAdd) { + super(options); + this.consensusData = options.consensusData; + this.hashes = options.hashes; + this.isBlock = this.hashes.length > 0; + } + + public get header() { + return this.headerInternal(); + } + + public getBlock>(cache: Cache) { + 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: this.hashes.slice(1).map(cache.get), + }); + } + + // 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, + ...options, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + writer.writeArray(this.hashes, writer.writeUInt256); + 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-csharp-core/src/Verifiable.ts b/packages/neo-one-csharp-core/src/Verifiable.ts new file mode 100644 index 0000000000..fe1c405c51 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Verifiable.ts @@ -0,0 +1,24 @@ +import { UInt160, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Header } from './Header'; +import { TrimmedBlock } from './TrimmedBlock'; +import { Witness } from './Witness'; + +export interface SnapshotMethods { + readonly tryGetBlock: (hash: UInt256) => Promise; + readonly tryGetHeader: (hash: UInt256) => Promise
; + readonly tryGetContract: (hash: UInt160) => Promise; + readonly tryGetStorage: (key: StorageKey) => Promise; +} + +export interface Verifiable { + readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; + readonly witnesses: readonly Witness[]; +} + +export interface VerifyResult { + readonly gas: number; + readonly result: boolean; +} + +export type VerifyWitnesses = (verifiable: Verifiable, snapshot: SnapshotMethods, gasIn: BN) => Promise; diff --git a/packages/neo-one-csharp-core/src/Witness.ts b/packages/neo-one-csharp-core/src/Witness.ts new file mode 100644 index 0000000000..9ff1e6b143 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Witness.ts @@ -0,0 +1,54 @@ +import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; +import { WITNESS_INVOCATION_SIZE, WITNESS_VERIFICATION_SIZE } from './constants'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableJSON, + SerializeJSONContext, +} from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface WitnessAdd { + readonly verification: Buffer; + readonly invocation: Buffer; +} + +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 Witness({ + invocation, + verification, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Witness { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + 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() { + return this.sizeInternal(); + } + + public serializeJSON(_context: SerializeJSONContext): WitnessJSON { + return { + invocation: JSONHelper.writeBuffer(this.invocation), + verification: JSONHelper.writeBuffer(this.verification), + }; + } +} diff --git a/packages/neo-one-csharp-core/src/constants.ts b/packages/neo-one-csharp-core/src/constants.ts new file mode 100644 index 0000000000..dc2757deb3 --- /dev/null +++ b/packages/neo-one-csharp-core/src/constants.ts @@ -0,0 +1,6 @@ +import { BN } from 'bn.js'; + +export const MAX_TRANSACTION_SIZE = 102400; +export const DEFAULT_VALIDATORS_COUNT = new BN(7); +export const WITNESS_INVOCATION_SIZE = 663; +export const WITNESS_VERIFICATION_SIZE = 361; diff --git a/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts b/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts new file mode 100644 index 0000000000..b1a466e28e --- /dev/null +++ b/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts @@ -0,0 +1,158 @@ +// tslint:disable readonly-keyword no-object-mutation no-array-mutation +import { common, crypto, UInt256 } from '@neo-one/client-common'; +import { makeErrorWithCode } from '@neo-one/utils'; + +export const InvalidMerkleTreeException = makeErrorWithCode( + 'INVALID_MERKLE_TREE', + () => 'Invalid Merkle tree. (no nodes found)', +); + +class MerkleTreeNode { + public readonly hash: UInt256; + public leftChild: MerkleTreeNode | undefined; + public rightChild: MerkleTreeNode | undefined; + public parent: MerkleTreeNode | undefined; + + public constructor({ + hash, + leftChild, + rightChild, + parent, + }: { + readonly hash: UInt256; + readonly leftChild?: MerkleTreeNode; + readonly rightChild?: MerkleTreeNode; + readonly parent?: MerkleTreeNode; + }) { + this.hash = hash; + this.leftChild = leftChild; + this.rightChild = rightChild; + this.parent = parent; + } + + public clone(parent?: MerkleTreeNode): MerkleTreeNode { + const self = new MerkleTreeNode({ + hash: this.hash, + parent, + }); + + if (this.leftChild !== undefined) { + self.leftChild = this.leftChild.clone(self); + } + if (this.rightChild !== undefined) { + self.rightChild = this.rightChild.clone(self); + } + + return self; + } +} + +const build = (leavesIn: readonly MerkleTreeNode[]): MerkleTreeNode => { + const leaves = leavesIn; + if (leaves.length === 0) { + throw new InvalidMerkleTreeException(); + } + if (leaves.length === 1) { + return leaves[0]; + } + + const parents = []; + const length = Math.floor((leaves.length + 1) / 2); + // tslint:disable-next-line no-loop-statement + for (let i = 0; i < length; i += 1) { + const leftChild = leaves[i * 2]; + + const rightChild = i * 2 + 1 === leaves.length ? leftChild : leaves[i * 2 + 1]; + const node = new MerkleTreeNode({ + hash: crypto.hash256( + Buffer.concat([common.uInt256ToBuffer(leftChild.hash), common.uInt256ToBuffer(rightChild.hash)]), + ), + leftChild, + rightChild, + }); + + parents[i] = node; + leaves[i * 2].parent = node; + + if (i * 2 + 1 !== leaves.length) { + leaves[i * 2 + 1].parent = node; + } + } + + return build(parents); +}; + +const trim = (node: MerkleTreeNode, index: number, depth: number, flags: readonly boolean[]) => { + const { leftChild, rightChild } = node; + if (depth === 1 || leftChild === undefined) { + return; + } + + if (depth === 2) { + if (!flags[index * 2] && !flags[index * 2 + 1]) { + node.leftChild = undefined; + node.rightChild = undefined; + } + } else if (rightChild !== undefined) { + trim(leftChild, index * 2, depth - 1, flags); + trim(rightChild, index * 2 + 1, depth - 1, flags); + if (leftChild.leftChild === undefined && rightChild.rightChild === undefined) { + node.leftChild = undefined; + node.rightChild = undefined; + } + } +}; + +const depthFirstSearchWorker = (node: MerkleTreeNode, mutableHashes: UInt256[]): void => { + const { leftChild, rightChild } = node; + if (leftChild === undefined || rightChild === undefined) { + mutableHashes.push(node.hash); + } else { + depthFirstSearchWorker(leftChild, mutableHashes); + depthFirstSearchWorker(rightChild, mutableHashes); + } +}; + +const depthFirstSearch = (node: MerkleTreeNode): readonly UInt256[] => { + const mutableHashes: UInt256[] = []; + depthFirstSearchWorker(node, mutableHashes); + + return mutableHashes; +}; + +export class MerkleTree { + public static computeRoot(hashes: readonly UInt256[]): UInt256 { + const tree = new this(hashes); + + return tree.root.hash; + } + + public readonly root: MerkleTreeNode; + public readonly depth: number; + + public constructor(hashesOrNode: readonly UInt256[] | MerkleTreeNode) { + this.root = Array.isArray(hashesOrNode) + ? build(hashesOrNode.map((hash) => new MerkleTreeNode({ hash }))) + : (hashesOrNode as MerkleTreeNode); + this.depth = 1; + // tslint:disable-next-line no-loop-statement no-let + for (let node = this.root; node.leftChild !== undefined; node = node.leftChild) { + this.depth += 1; + } + } + + public trim(flags: readonly boolean[]): MerkleTree { + const result = this.root.clone(); + trim(result, 0, this.depth, flags); + + return new MerkleTree(result); + } + + public depthFirstSearch(): readonly UInt256[] { + return depthFirstSearch(this.root); + } + + public toHashArray(): readonly UInt256[] { + return this.depthFirstSearch(); + } +} diff --git a/packages/neo-one-csharp-core/src/crypto/index.ts b/packages/neo-one-csharp-core/src/crypto/index.ts new file mode 100644 index 0000000000..f508f3cb56 --- /dev/null +++ b/packages/neo-one-csharp-core/src/crypto/index.ts @@ -0,0 +1 @@ +export * from './MerkleTree'; diff --git a/packages/neo-one-csharp-core/src/errors.ts b/packages/neo-one-csharp-core/src/errors.ts new file mode 100644 index 0000000000..6facad3624 --- /dev/null +++ b/packages/neo-one-csharp-core/src/errors.ts @@ -0,0 +1,31 @@ +import { makeErrorWithCode } from '@neo-one/utils'; + +// tslint:disable-next-line export-name +export const ReceiveMessageTimeoutError = makeErrorWithCode( + 'RECEIVE_MESSAGE_TIMEOUT', + (endpoint: string) => `Message with endpoint ${endpoint} timed out.`, +); +export const InvalidActionTypeError = makeErrorWithCode( + 'INVALID_ACTION_TYPE', + (type: number) => `Expected action type, found: ${type}`, +); +export const InvalidScriptContainerTypeError = makeErrorWithCode( + 'INVALID_SCRIPT_CONTAINER_TYPE', + (value: number) => `Expected ScriptContainerType, found: ${value.toString(16)}`, +); +export const VerifyError = makeErrorWithCode( + 'VERIFY', + (reason?: string) => `Verification failed${reason === undefined ? '.' : `: ${reason}`}`, +); +export const InvalidConsensusMessageTypeError = makeErrorWithCode( + 'INVALID_CONSENSUS_MESSAGE_TYPE', + (value: number) => `Expected ConsensusMessageType, 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}`, +); +export const InvalidStorageChangeTypeError = makeErrorWithCode( + 'INVALID_STORAGE_CHANGE_TYPE', + (storageChangeType: number) => `Invalid Storage Change Type: ${storageChangeType}`, +); diff --git a/packages/neo-one-csharp-core/src/index.ts b/packages/neo-one-csharp-core/src/index.ts new file mode 100644 index 0000000000..ef53e29c9f --- /dev/null +++ b/packages/neo-one-csharp-core/src/index.ts @@ -0,0 +1,17 @@ +export * from './Block'; +export * from './BlockBase'; +export * from './ConsensusData'; +export * from './constants'; +export * from './crypto'; +export * from './Equatable'; +export * from './Header'; +export * from './Serializable'; +export * from './Signer'; +export * from './StackItems'; +export * from './transaction'; +export * from './TrimmedBlock'; +export * from './utils'; +export * from './Verifiable'; +export * from './vm'; +export * from './Witness'; +export * from './CallFlags'; diff --git a/packages/neo-one-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts new file mode 100644 index 0000000000..ac31760b49 --- /dev/null +++ b/packages/neo-one-csharp-core/src/transaction/Transaction.ts @@ -0,0 +1,190 @@ +import { + AttributeTypeModel, + common, + InvalidFormatError, + IOHelper, + JSONHelper, + scriptHashToAddress, + TransactionJSON, + TransactionModel, + TransactionModelAdd, + UInt160, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableJSON, + SerializableWire, + SerializeJSONContext, +} from '../Serializable'; +import { Signer } from '../Signer'; +import { BinaryReader, utils } from '../utils'; +import { Witness } from '../Witness'; +import { Attribute, deserializeAttribute } from './attributes'; + +export type TransactionAddUnsigned = Omit, 'witnesses'>; +export type TransactionAdd = TransactionModelAdd; + +export class Transaction extends TransactionModel + implements SerializableWire, SerializableJSON { + 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, + }); + } + + 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.readUInt64LE(); + if (systemFee.ltn(0)) { + throw new InvalidFormatError(`Expected systemFee to be greater than 0, found: ${systemFee.toString()}`); + } + + const networkFee = reader.readUInt64LE(); + 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, + }; + } + + 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; + }); + } + + private readonly headerSizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE, + ); + + private readonly sizeInternal = utils.lazy( + () => + this.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 get headerSize() { + return this.headerSizeInternal(); + } + + public get size() { + return this.sizeInternal(); + } + + public serializeJSON(options: SerializeJSONContext): TransactionJSON { + return { + hash: JSONHelper.writeUInt256(this.hash), + size: this.size, + version: this.version, + nonce: this.nonce, + sender: scriptHashToAddress(common.uInt160ToString(this.sender)), + sysfee: JSONHelper.writeUInt64LE(this.systemFee), + netfee: JSONHelper.writeUInt64LE(this.networkFee), + validuntilblock: this.validUntilBlock, + signers: this.signers.map((signer) => signer.serializeJSON(options)), + attributes: this.attributes.map((attr) => attr.serializeJSON(options)), + script: JSONHelper.writeBuffer(this.script), + witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), + }; + } +} diff --git a/packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts b/packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts new file mode 100644 index 0000000000..2b041f0ea3 --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/transaction/attributes/AttributeBase.ts b/packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts new file mode 100644 index 0000000000..6744490f07 --- /dev/null +++ b/packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts @@ -0,0 +1,35 @@ +import { + AttributeBaseModel, + AttributeJSON, + AttributeTypeModel, + InvalidFormatError, + IOHelper, + toJSONAttributeType, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; + +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(_context: SerializeJSONContext): AttributeJSON { + return { + type: toJSONAttributeType(this.type), + }; + } + + public get size() { + return IOHelper.sizeOfUInt8 + this.sizeExclusive(); + } + + protected sizeExclusive(): number { + return 0; + } +} diff --git a/packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts b/packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts new file mode 100644 index 0000000000..42bc09f28f --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/transaction/attributes/index.ts b/packages/neo-one-csharp-core/src/transaction/attributes/index.ts new file mode 100644 index 0000000000..3b2423b305 --- /dev/null +++ b/packages/neo-one-csharp-core/src/transaction/attributes/index.ts @@ -0,0 +1,2 @@ +export * from './AttributeBase'; +export * from './Attribute'; diff --git a/packages/neo-one-csharp-core/src/transaction/index.ts b/packages/neo-one-csharp-core/src/transaction/index.ts new file mode 100644 index 0000000000..348a5f9ebb --- /dev/null +++ b/packages/neo-one-csharp-core/src/transaction/index.ts @@ -0,0 +1,2 @@ +export * from './Transaction'; +export * from './attributes'; diff --git a/packages/neo-one-csharp-core/src/utils/BinaryReader.ts b/packages/neo-one-csharp-core/src/utils/BinaryReader.ts new file mode 100644 index 0000000000..7014d576d4 --- /dev/null +++ b/packages/neo-one-csharp-core/src/utils/BinaryReader.ts @@ -0,0 +1,204 @@ +import { common, ECPoint, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; + +export class BinaryReader { + public readonly buffer: Buffer; + private mutableIndex: number; + + public constructor(buffer: Buffer, index = 0) { + this.buffer = buffer; + this.mutableIndex = index; + } + + public get index(): number { + return this.mutableIndex; + } + + public get remaining(): number { + return this.buffer.length - this.mutableIndex; + } + + public get remainingBuffer(): Buffer { + return this.buffer.slice(this.mutableIndex); + } + + public hasMore(): boolean { + return this.mutableIndex < this.buffer.byteLength; + } + + public clone(): BinaryReader { + return new BinaryReader(this.buffer, this.mutableIndex); + } + + public readBytes(numBytes: number): Buffer { + this.checkRead(numBytes); + const result = this.buffer.slice(this.mutableIndex, this.mutableIndex + numBytes); + this.mutableIndex += numBytes; + + return result; + } + + public readInt8(): number { + this.checkRead(1); + const result = this.buffer.readInt8(this.mutableIndex); + this.mutableIndex += 1; + + return result; + } + + public readUInt8(): number { + this.checkRead(1); + const result = this.buffer.readUInt8(this.mutableIndex); + this.mutableIndex += 1; + + return result; + } + + public readBoolean(): boolean { + return this.readBytes(1)[0] !== 0; + } + + public readInt16LE(): number { + this.checkRead(2); + const result = this.buffer.readInt16LE(this.mutableIndex); + this.mutableIndex += 2; + + return result; + } + + public readUInt16LE(): number { + this.checkRead(2); + const result = this.buffer.readUInt16LE(this.mutableIndex); + this.mutableIndex += 2; + + return result; + } + + public readUInt16BE(): number { + this.checkRead(2); + const result = this.buffer.readUInt16BE(this.mutableIndex); + this.mutableIndex += 2; + + return result; + } + + public readInt32LE(): number { + this.checkRead(4); + const result = this.buffer.readInt32LE(this.mutableIndex); + this.mutableIndex += 4; + + return result; + } + + public readUInt32LE(): number { + this.checkRead(4); + const result = this.buffer.readUInt32LE(this.mutableIndex); + this.mutableIndex += 4; + + return result; + } + + public readUInt64LE(): BN { + return new BN(this.readBytes(8), 'le'); + } + + public readInt64LE(): BN { + const buffer = this.readBytes(8); + + return new BN(buffer, 'le').fromTwos(buffer.length * 8); + } + + // NEO specific + public readUInt160(): UInt160 { + return common.bufferToUInt160(this.readBytes(common.UINT160_BUFFER_BYTES)); + } + + public readUInt256(): UInt256 { + return common.bufferToUInt256(this.readBytes(common.UINT256_BUFFER_BYTES)); + } + + public readFixed8(): BN { + return this.readInt64LE(); + } + + public readFixedString(length: number): string { + const values = _.takeWhile([...this.readBytes(length)], (value) => value !== 0); + + return Buffer.from(values).toString('utf8'); + } + + public readArray(read: () => T, max: BN | number = 0x1000000): readonly T[] { + const count = this.readVarUIntLE(new BN(max)).toNumber(); + + return _.range(count).map(read); + } + + public readObject( + read: () => { readonly key: number; readonly value: V }, + max?: number, + ): { readonly [key: number]: V }; + public readObject( + read: () => { readonly key: string; readonly value: V }, + max?: number, + ): { readonly [key: string]: V }; + public readObject( + read: () => { readonly key: string | number; readonly value: V }, + max = 0x1000000, + ): { readonly [key: string]: V } { + const count = this.readVarUIntLE(new BN(max)).toNumber(); + + return _.range(count).reduce<{ readonly [key: string]: V }>((acc) => { + const { key, value } = read(); + + return { ...acc, [key]: value }; + }, {}); + } + + public readVarBytesLE(max = 0x1000000): Buffer { + return this.readBytes(this.readVarUIntLE(new BN(max)).toNumber()); + } + + public readVarUIntLE(max: BN = new BN('18446744073709551615', 10)): BN { + const fb = this.readUInt8(); + let value: BN; + switch (fb) { + case 0xfd: + value = new BN(this.readUInt16LE()); + break; + case 0xfe: + value = new BN(this.readUInt32LE()); + break; + case 0xff: + value = this.readUInt64LE(); + break; + default: + value = new BN(fb); + } + + if (value.gt(max)) { + throw new InvalidFormatError(`Integer too large: ${value.toString(10)} > ${max.toString(10)}`); + } + + return value; + } + + public readVarString(max = 0x1000000): string { + return this.readVarBytesLE(max).toString('utf8'); + } + + public readECPoint(): ECPoint { + const firstByte = this.readBytes(1); + if (firstByte[0] === common.ECPOINT_INFINITY_BYTE) { + return common.ECPOINT_INFINITY; + } + + return common.bufferToECPoint(Buffer.concat([firstByte, this.readBytes(common.ECPOINT_BUFFER_BYTES - 1)])); + } + + private checkRead(numBytes: number): void { + if (this.remaining < numBytes) { + throw new InvalidFormatError(`Insufficient bytes remaining (${this.remaining}): ${numBytes}`); + } + } +} diff --git a/packages/neo-one-csharp-core/src/utils/index.ts b/packages/neo-one-csharp-core/src/utils/index.ts new file mode 100644 index 0000000000..c5dcaea2d6 --- /dev/null +++ b/packages/neo-one-csharp-core/src/utils/index.ts @@ -0,0 +1,2 @@ +export * from './BinaryReader'; +export * from './utils'; diff --git a/packages/neo-one-csharp-core/src/utils/utils.ts b/packages/neo-one-csharp-core/src/utils/utils.ts new file mode 100644 index 0000000000..91a2449845 --- /dev/null +++ b/packages/neo-one-csharp-core/src/utils/utils.ts @@ -0,0 +1,198 @@ +import { utils as clientUtils } from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; +import { BN } from 'bn.js'; +import { randomBytes } from 'crypto'; +import _ from 'lodash'; + +const toASCII = (bytes: Buffer) => { + let result = ''; + _.range(bytes.length).forEach((i) => { + result += String.fromCharCode(bytes.readUInt8(i)); + }); + + return result; +}; + +const toUTF8 = (bytes: Buffer) => bytes.toString('utf8'); + +const calculateClaimAmount = async ({ + coins, + decrementInterval, + generationAmount, + getSystemFee, +}: { + readonly coins: ReadonlyArray<{ + readonly value: BN; + readonly startHeight: number; + readonly endHeight: number; + }>; + readonly decrementInterval: number; + readonly generationAmount: readonly number[]; + readonly getSystemFee: (index: number) => Promise; +}): Promise => { + const grouped = Object.values(_.groupBy(coins, (coin) => `${coin.startHeight}:${coin.endHeight}`)); + + const claimed = await Promise.all( + grouped.map(async (coinsGroup) => { + const { startHeight, endHeight } = coinsGroup[0]; + + let amount = clientUtils.ZERO; + let ustart = Math.floor(startHeight / decrementInterval); + if (ustart < generationAmount.length) { + let istart = startHeight % decrementInterval; + let uend = Math.floor(endHeight / decrementInterval); + let iend = endHeight % decrementInterval; + if (uend >= generationAmount.length) { + uend = generationAmount.length; + iend = 0; + } + + if (iend === 0) { + uend -= 1; + iend = decrementInterval; + } + + // tslint:disable-next-line no-loop-statement + while (ustart < uend) { + amount = amount.addn((decrementInterval - istart) * generationAmount[ustart]); + + ustart += 1; + istart = 0; + } + + amount = amount.addn((iend - istart) * generationAmount[ustart]); + } + + const [sysFeeEnd, sysFeeStart] = await Promise.all([ + getSystemFee(endHeight - 1), + startHeight === 0 ? Promise.resolve(clientUtils.ZERO) : getSystemFee(startHeight - 1), + ]); + + amount = amount.add(sysFeeEnd.sub(sysFeeStart).div(clientUtils.ONE_HUNDRED_MILLION)); + const totalValue = coinsGroup.reduce((acc, { value }) => acc.add(value), clientUtils.ZERO); + + return [totalValue, amount]; + }), + ); + + return claimed.reduce( + (acc, [value, amount]) => acc.add(value.div(clientUtils.ONE_HUNDRED_MILLION).mul(amount)), + clientUtils.ZERO, + ); +}; + +const randomUInt64 = (): BN => new BN(randomBytes(8).toString('hex'), 16); + +const toKeyString = (clazz: { readonly name: string }, toKey: () => string) => () => `${clazz.name}:${toKey()}`; + +function lazyAsync(getValue: (input: Input) => Promise): (input: Input) => Promise { + let valuePromise: Promise | undefined; + + return async (input) => { + if (valuePromise === undefined) { + valuePromise = getValue(input); + } + + return valuePromise; + }; +} + +function lazyOrValue(getValue: (() => Value) | Value): () => Value { + // tslint:disable-next-line no-any + let settings: any = + typeof getValue === 'function' ? { type: 'lazy', getValue } : { type: 'evaluated', value: getValue }; + + return () => { + if (settings.type === 'lazy') { + settings = { type: 'evaluated', value: settings.getValue() }; + } + + return settings.value; + }; +} + +function weightedAverage( + input: ReadonlyArray<{ + readonly value: number; + readonly weight: BigNumber; + }>, +): number { + let sumWeight = new BigNumber(0); + let sumValue = new BigNumber(0); + input.forEach((value) => { + sumWeight = sumWeight.plus(value.weight); + sumValue = sumValue.plus(value.weight.times(value.value)); + }); + + if (sumValue.isEqualTo(0) || sumWeight.isEqualTo(0)) { + return 0; + } + + return sumValue.div(sumWeight).integerValue(BigNumber.ROUND_FLOOR).toNumber(); +} + +function weightedFilter( + input: readonly T[], + startIn: number, + endIn: number, + getValueIn: (value: T) => BN, +): ReadonlyArray { + const start = new BigNumber(startIn); + const end = new BigNumber(endIn); + const getValue = (value: T) => new BigNumber(getValueIn(value).toString(10)); + const amount = input.reduce((acc, value) => acc.plus(getValue(value)), new BigNumber(0)); + + let sum = new BigNumber(0); + let current = new BigNumber(0); + const mutableResult: Array = []; + // tslint:disable-next-line no-loop-statement + for (const value of input) { + if (current.gte(end)) { + break; + } + let weight = getValue(value); + sum = sum.plus(weight); + const old = current; + current = sum.div(amount); + if (current.lte(start)) { + // eslint-disable-next-line + continue; + } + if (old.lt(start)) { + weight = current.gt(end) ? end.minus(start).times(amount) : current.minus(start).times(amount); + } else if (current.gt(end)) { + weight = end.minus(old).times(amount); + } + + mutableResult.push([ + value, + weight.gte(0) ? weight.integerValue(BigNumber.ROUND_FLOOR) : weight.integerValue(BigNumber.ROUND_CEIL), + ]); + } + + return mutableResult; +} + +function equals( + // tslint:disable-next-line no-any readonly-array + clazz: new (...args: any[]) => T, + thiz: T, + equalsFunc: (other: T) => boolean, + // tslint:disable-next-line no-any +): (other: any) => boolean { + return (other): boolean => other != undefined && (thiz === other || (other instanceof clazz && equalsFunc(other))); +} + +export const utils = { + ...clientUtils, + toASCII, + toUTF8, + calculateClaimAmount, + randomUInt64, + toKeyString, + equals, + lazyAsync, + lazyOrValue, + weightedAverage, + weightedFilter, +}; diff --git a/packages/neo-one-csharp-core/src/vm.ts b/packages/neo-one-csharp-core/src/vm.ts new file mode 100644 index 0000000000..dd2210a9fd --- /dev/null +++ b/packages/neo-one-csharp-core/src/vm.ts @@ -0,0 +1,4 @@ +export enum TriggerType { + Verification = 0x00, + Application = 0x10, +} diff --git a/packages/neo-one-csharp-core/tsconfig.json b/packages/neo-one-csharp-core/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-csharp-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-csharp-vm/gulpfile.js b/packages/neo-one-csharp-vm/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-csharp-vm/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-csharp-vm/lib/Blockchain.cs b/packages/neo-one-csharp-vm/lib/Blockchain.cs new file mode 100644 index 0000000000..3de4294ff7 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Blockchain.cs @@ -0,0 +1,21 @@ +using Neo.Ledger; + +// this just mimics the TestBlockchain used in Neo Unit Tests +namespace NEOONE +{ + public class NeoOneBlockchain + { + public static readonly Neo.NeoSystem NeoOneSystem; + + static NeoOneBlockchain() + { + NeoOneSystem = new Neo.NeoSystem(); + var _ = Blockchain.Singleton; + } + + public static bool InitializeNeoOneSystem() + { + return true; + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs b/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs new file mode 100644 index 0000000000..7efb63b7b1 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs @@ -0,0 +1,175 @@ +using System; +using System.Threading.Tasks; +using Neo.Network.P2P.Payloads; +using Neo.Persistence; +using System.Linq; +using Neo.VM; +using Neo.VM.Types; +using Neo.SmartContract; +using Neo.Ledger; +using System.Reflection; + +namespace NEOONE +{ + public class EngineDispatcher + { + + private ApplicationEngine engine; + private Neo.NeoSystem system; + private bool init = false; + public async Task Invoke(dynamic input) + { + if (!this.init) + { + this.init = NeoOneBlockchain.InitializeNeoOneSystem(); + } + + string method = (string)input.method; + + switch (method) + { + // constructor wrapper + case "create": + TriggerType trigger = (TriggerType)input.args.trigger; + long gas = (long)input.args.gas; + bool testMode = (bool)input.args.testMode; + bool snapshotBoolean = input.args.snapshot == null ? false : (bool)input.args.snapshot; + var snapshot = snapshotBoolean ? Blockchain.Singleton.GetSnapshot() : null; + return this._create(trigger, null, snapshot, gas, testMode); + + // getters + case "gettrigger": + return this._getTrigger(); + + case "getvmstate": + return this._getVMState(); + + case "getresultstack": + return this._getResultStack(); + + case "getgasconsumed": + return this._getGasConsumed(); + + // application engine methods + case "execute": + return this._execute(); + + case "loadscript": + byte[] rawBytes = (byte[])input.args.script; + var script = new Script(rawBytes); + return this._loadScript(script); + + // execution engine methods + case "loadclonedcontext": + int position = (int)input.args.position; + return this._loadClonedContext(position); + + case "peek": + int peekPosition = (int)input.args.position; + return this._peek(peekPosition); + + case "pop": + return this._pop(); + + case "dispose": + return this._dispose(); + + // internal testing + case "test": + long test = (long)input.args.test; + return this._test(test); + + default: + throw new InvalidOperationException($"'{method}' is not a valid method"); + } + } + + private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas, bool testMode = false) + { + if (this.engine == null) + { + this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); + } + + return true; + } + + private TriggerType _getTrigger() + { + this.isInitialized(); + return this.engine.Trigger; + } + + private dynamic[] _getResultStack() + { + this.isInitialized(); + return this.engine.ResultStack.Select((StackItem p) => ReturnHelpers.convertStackItem(p)).ToArray(); + } + + private VMState _getVMState() + { + this.isInitialized(); + return this.engine.State; + } + + private long _getGasConsumed() + { + this.isInitialized(); + return this.engine.GasConsumed; + } + + private VMState _execute() + { + this.isInitialized(); + return this.engine.Execute(); + } + + private ExecutionContext _loadClonedContext(int initialPosition) + { + this.isInitialized(); + return this.engine.LoadClonedContext(initialPosition); + } + + private bool _loadScript(Script script) + { + this.isInitialized(); + this.engine.LoadScript(script); + return true; + } + + private StackItem _peek(int index) + { + this.isInitialized(); + return this.engine.Peek(index); + } + + private StackItem _pop() + { + this.isInitialized(); + return this.engine.Pop(); + } + + private dynamic _test(long test) + { + long maxVerificationGas = 0_50000000; + return maxVerificationGas; + } + + private bool _dispose() + { + this.isInitialized(); + this.engine.Dispose(); + return true; + } + + private bool isInitialized() + { + if (this.engine == null) + { + throw new InvalidOperationException("Can't invoke a method without creating the engine"); + } + + return true; + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj b/packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj new file mode 100644 index 0000000000..ecf6342f5b --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj @@ -0,0 +1,30 @@ + + + + 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-csharp-vm/lib/ReturnHelpers.cs b/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs new file mode 100644 index 0000000000..4aaa29ef38 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs @@ -0,0 +1,142 @@ +using System; +using System.Linq; +using Neo.VM.Types; + +namespace NEOONE +{ + public class ReturnHelpers + { + public class PrimitiveReturn + { + public readonly dynamic 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 dynamic[] 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 dynamic[] 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 dynamic 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) + }; + } + } +} diff --git a/packages/neo-one-csharp-vm/package.json b/packages/neo-one-csharp-vm/package.json new file mode 100644 index 0000000000..f572280e1c --- /dev/null +++ b/packages/neo-one-csharp-vm/package.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/csharp-vm", + "version": "2.7.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", + "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/edge": "^15.0.0", + "@neo-one/csharp-core": "^2.7.0", + "@neo-one/client-common": "^2.7.0", + "bn.js": "^5.0.0" + }, + "devDependencies": { + "@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-csharp-vm/src/ApplicationEngine.ts b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts new file mode 100644 index 0000000000..a4b8e89e34 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts @@ -0,0 +1,164 @@ +import { common } from '@neo-one/client-common'; +import { CallFlags, TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { convertEngineOptions } from './converters'; +import { createEngineDispatcher } from './createEngineDispatcher'; +import { parse as parseStackItems } from './StackItems'; + +export interface EngineOptions { + readonly trigger: TriggerType; + readonly container?: Verifiable; + readonly snapshot?: boolean; + readonly gas: number; + readonly testMode?: boolean; +} + +export class ApplicationEngine { + public get trigger() { + return this.engineDispatcher({ + method: 'gettrigger', + }); + } + + // TODO: make sure the fixed8 numbers are the same between c# and what I'm inputting (just for ease of mind); + public get gasConsumed() { + return common + .fixed8ToDecimal( + new BN( + this.engineDispatcher({ + method: 'getgasconsumed', + }), + ), + ) + .toNumber(); + } + + public get gasLeft() { + return this.engineDispatcher({ + method: 'getgasleft', + }); + } + + public get currentScriptHash() { + return this.engineDispatcher({ + method: 'getcurrentscripthash', + }); + } + + public get callingScriptHash() { + return this.engineDispatcher({ + method: 'getcallingscripthash', + }); + } + + public get entryScriptHash() { + return this.engineDispatcher({ + method: 'getentryscripthash', + }); + } + + public get notifications() { + return this.engineDispatcher({ + method: 'getnotifications', + }); + } + + public get state() { + return this.engineDispatcher({ + method: 'getvmstate', + }); + } + + // we reverse the resultStack since we don't want to use `pop`. + public get resultStack() { + return _.reverse( + parseStackItems( + this.engineDispatcher({ + method: 'getresultstack', + }), + ), + ); + } + + public readonly init: boolean; + private readonly engineDispatcher: ReturnType; + + public constructor(options: EngineOptions) { + this.engineDispatcher = createEngineDispatcher(); + this.init = this.engineDispatcher({ + method: 'create', + args: convertEngineOptions(options), + }); + } + + // -- application engine method definitions + public dispose() { + return this.engineDispatcher({ + method: 'dispose', + }); + } + + public execute() { + return this.engineDispatcher({ + method: 'execute', + }); + } + + public loadScript(script: Buffer, callFlags = CallFlags.None) { + return this.engineDispatcher({ + method: 'loadscript', + args: { + script, + callFlags, + }, + }); + } + + public checkScript() { + return this.engineDispatcher({ + method: 'checkscript', + }); + } + + // - start - some ExecutionEngine method definitions we might need under the hood + public loadClonedContext(position: number) { + return this.engineDispatcher({ + method: 'loadclonedcontext', + args: { position }, + }); + } + + public peek(index = 0) { + return this.engineDispatcher({ + method: 'peek', + args: { + index, + }, + }); + } + + public pop() { + return this.engineDispatcher({ + method: 'pop', + }); + } + + public test(value: BN) { + return this.engineDispatcher({ + method: 'test', + args: { + test: value.toNumber(), + }, + }); + } +} + +// should be our equivalent of `(using var engine = new ApplicationEngine(...)) {...}` +export const withApplicationEngine = (options: EngineOptions, func: (engine: ApplicationEngine) => T): T => { + const engine = new ApplicationEngine(options); + const result = func(engine); + engine.dispose(); + + return result; +}; diff --git a/packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts b/packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts new file mode 100644 index 0000000000..cdc66cc6cb --- /dev/null +++ b/packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts @@ -0,0 +1,76 @@ +import { StackItemType } from '@neo-one/csharp-core'; + +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; // TODO: it might just be one? + 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; diff --git a/packages/neo-one-csharp-vm/src/StackItems/index.ts b/packages/neo-one-csharp-vm/src/StackItems/index.ts new file mode 100644 index 0000000000..cded9da4df --- /dev/null +++ b/packages/neo-one-csharp-vm/src/StackItems/index.ts @@ -0,0 +1,2 @@ +export * from './StackItemReturn'; +export * from './parse'; diff --git a/packages/neo-one-csharp-vm/src/StackItems/parse.ts b/packages/neo-one-csharp-vm/src/StackItems/parse.ts new file mode 100644 index 0000000000..b9df133e46 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/StackItems/parse.ts @@ -0,0 +1,105 @@ +import { PrimitiveStackItem, StackItem } from '@neo-one/csharp-core'; +import { BN } from 'bn.js'; +import { PrimitiveStackItemReturn, StackItemReturn } from './StackItemReturn'; + +export const parse = (stack: readonly StackItemReturn[]): readonly StackItem[] => stack.map(parseStackItem); + +const parseStackItem = (item: StackItemReturn): StackItem => { + const isNull = item.IsNull; + switch (item.Type) { + case 'Any': + return { + type: 'Any', + value: undefined, + isNull, + }; + + case 'Pointer': + return { + type: 'Pointer', + value: item.value, + position: item.Position, + isNull, + }; + + case 'Buffer': + return { + type: 'Buffer', + value: item.value, + size: item.Size, + isNull, + }; + + case 'Array': + return { + type: 'Array', + value: parse(item.value), + count: item.Count, + isNull, + }; + + case 'Struct': + return { + type: 'Struct', + value: parse(item.value), // TODO: how should StructStackItem look? + count: item.Count, + isNull, + }; + + case 'Map': + return { + type: 'Map', + value: item.value.reduce((acc, { key, value }) => { + acc.set(parsePrimitiveStackItem(key), parseStackItem(value)); + + return acc; + }, new Map()), + count: item.Count, + isNull, + }; + + case 'InteropInterface': + return { + type: 'InteropInterface', + value: item.value, + isNull, + }; + + default: + return parsePrimitiveStackItem(item); + } +}; + +const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStackItem => { + const isNull = item.IsNull; + switch (item.Type) { + case 'Boolean': + return { + type: 'Boolean', + value: item.value, + size: item.Size, + isNull, + }; + + case 'Integer': + return { + type: 'Integer', + value: new BN(item.value), + size: item.Size, + isNull, + }; + + case 'ByteString': + return { + type: 'ByteString', + value: item.value.toString('utf8'), + _buffer: item.value, + size: item.Size, + isNull, + }; + + default: + // TODO: create an error here + throw new Error('Invalid StackItem'); + } +}; diff --git a/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts new file mode 100644 index 0000000000..6c134ca107 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts @@ -0,0 +1,28 @@ +import { ScriptBuilder } from '@neo-one/client-common'; +import { TriggerType } from '@neo-one/csharp-core'; +import { withApplicationEngine } from '../ApplicationEngine'; + +describe('ApplicationEngine test', () => { + test('withApplicationEngine -- NOP Script -- Halt', () => { + const state = withApplicationEngine( + { + trigger: TriggerType.Application, + testMode: true, + gas: 1, + }, + (engine) => { + const initState = engine.state; + expect(initState).toEqual('BREAK'); + + const script = new ScriptBuilder(); + script.emitOp('NOP'); + + engine.loadScript(script.build()); + + return engine.execute(); + }, + ); + + expect(state).toEqual('HALT'); + }); +}); diff --git a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts new file mode 100644 index 0000000000..138155e204 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts @@ -0,0 +1,35 @@ +import { common, ScriptBuilder, UInt256 } from '@neo-one/client-common'; +import { ArrayStackItem, ByteStringStackItem, TriggerType } from '@neo-one/csharp-core'; +import { ApplicationEngine } from '../ApplicationEngine'; + +const createGetBlockScript = (hash: UInt256) => { + const script = new ScriptBuilder(); + script.emitPushUInt256(hash); + script.emitSysCall('System.Blockchain.GetBlock'); + + return script.build(); +}; + +const genesisHash = common.hexToUInt256('0xecaee33262f1bc7c7c28f2b25b54a5d61d50670871f45c0c6fe755a40cbde4a8'); + +describe('TS <--> C# Storage Test', () => { + test('genesis block', () => { + const engine = new ApplicationEngine({ + trigger: TriggerType.Application, + snapshot: true, + gas: 0, + testMode: true, + }); + const script = createGetBlockScript(genesisHash); + + engine.loadScript(script); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const stack = engine.resultStack; + const result = stack[0] as ArrayStackItem; + + const hashStackItem = result.value[0] as ByteStringStackItem; + expect(hashStackItem._buffer).toEqual(genesisHash); + }); +}); diff --git a/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts b/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts new file mode 100644 index 0000000000..ac36d44d11 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts @@ -0,0 +1,206 @@ +import { common, ScriptBuilder } from '@neo-one/client-common'; +import { + Block, + ByteStringStackItem, + ConsensusData, + IntegerStackItem, + TriggerType, + Witness, +} from '@neo-one/csharp-core'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { ApplicationEngine } from '../ApplicationEngine'; + +describe('Application Engine SysCall Tests', () => { + let engine: ApplicationEngine; + let script: ScriptBuilder; + beforeEach(() => { + engine = new ApplicationEngine({ + trigger: TriggerType.Application, + gas: 0, + testMode: true, + }); + + script = new ScriptBuilder(); + }); + + describe('System.Json.Deserialize', () => { + test('Halt -- Good values', () => { + script.emitPushString('123'); + script.emitSysCall('System.Json.Deserialize'); + script.emitPushString('null'); + script.emitSysCall('System.Json.Deserialize'); + + engine.loadScript(script.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack[0].isNull).toEqual(true); + expect(resultStack[1].value.toNumber()).toEqual(123); + }); + + test('Fault -- Wrong Json', () => { + script.emitPushString('***'); + script.emitSysCall('System.Json.Deserialize'); + + engine.loadScript(script.build()); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + expect(engine.resultStack.length).toEqual(0); + }); + + test('Fault -- No decimals', () => { + script.emitPushString('123.45'); + script.emitSysCall('System.Json.Deserialize'); + + engine.loadScript(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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(5); + + expect((resultStack[0] as ByteStringStackItem).value).toEqual('{"key":"value"}'); + expect((resultStack[1] as ByteStringStackItem).value).toEqual('null'); + expect((resultStack[2] as ByteStringStackItem).value).toEqual('"test"'); + expect((resultStack[3] as ByteStringStackItem).value).toEqual('true'); + expect((resultStack[4] as ByteStringStackItem).value).toEqual('5'); + }); + + test('Fault -- Bad values', () => { + script.emitSysCall('System.Storage.GetContext'); + script.emitSysCall('System.Json.Serialize'); + + engine.loadScript(script.build()); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + expect(engine.resultStack.length).toEqual(0); + }); + }); + + test('System.Callback.Invoke -- Halt', () => { + engine = new ApplicationEngine({ + trigger: TriggerType.Application, + gas: 1, + testMode: false, + }); + + 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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + expect((resultStack[0] as IntegerStackItem).value.eq(new BN(4))).toEqual(true); + }); + + test('System.Callback.CreateFromSyscall -- Halt', () => { + engine = new ApplicationEngine({ + trigger: TriggerType.Application, + gas: 1, + testMode: false, + }); + + 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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + const byteStringItem = engine.resultStack[0] as ByteStringStackItem; + expect(byteStringItem._buffer.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: [], + }); + + test('With Snapshot option -- Halt', () => { + engine = new ApplicationEngine({ + trigger: TriggerType.Application, + snapshot: true, + gas: 0, + testMode: true, + }); + script.emitPushUInt256(block.hash); + script.emitSysCall('System.Blockchain.GetBlock'); + + engine.loadScript(script.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const stack = engine.resultStack; + expect(stack.length).toEqual(1); + expect(stack[0].isNull).toEqual(true); + }); + + test('Without Snapshot option -- Fault', () => { + engine = new ApplicationEngine({ trigger: TriggerType.Application, gas: 0, testMode: true }); + script.emitPushUInt256(block.hash); + script.emitSysCall('System.Blockchain.GetBlock'); + + engine.loadScript(script.build()); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + }); + }); +}); diff --git a/packages/neo-one-csharp-vm/src/constants.ts b/packages/neo-one-csharp-vm/src/constants.ts new file mode 100644 index 0000000000..bd1f38eaa8 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/constants.ts @@ -0,0 +1,9 @@ +import path from 'path'; + +const APP_ROOT = 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, +}; diff --git a/packages/neo-one-csharp-vm/src/converters.ts b/packages/neo-one-csharp-vm/src/converters.ts new file mode 100644 index 0000000000..4707b15ba5 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/converters.ts @@ -0,0 +1,19 @@ +/* +our converters are in the same state as our types, only temporary while +we flesh out what will need to be converted going from c# to JS / from neo3 to NEO•ONE +*/ +import { common } from '@neo-one/client-common'; +import { Verifiable } from '@neo-one/csharp-core'; +import { EngineOptions } from './ApplicationEngine'; +// tslint:disable: no-null-keyword + +// TODO implement container conversion in the EngineDispatcher +export const convertContainer = (_container: Verifiable) => null; + +export const convertEngineOptions = (options: EngineOptions) => ({ + trigger: options.trigger, + container: options.container === undefined ? null : convertContainer(options.container), + snapshot: options.snapshot === undefined ? false : options.snapshot, + gas: common.fixed8FromDecimal(options.gas.toString()).toNumber(), + testMode: options.testMode, +}); diff --git a/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts b/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts new file mode 100644 index 0000000000..f4b07311d1 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts @@ -0,0 +1,44 @@ +import { UInt160, VMState } from '@neo-one/client-common'; +import { CallFlags, TriggerType } from '@neo-one/csharp-core'; +import path from 'path'; +import { constants } from './constants'; +import { convertEngineOptions } from './converters'; +import { createCSharpDispatchInvoke, DefaultMethods, DispatchMethod } from './dispatcher'; +import { StackItemReturn } from './StackItems'; +import { ExecutionContext } from './types'; + +interface LoadScriptArgs { + readonly script: Buffer; + readonly callFlags: CallFlags; +} + +interface ExecutionEngineMethods extends DefaultMethods { + // constructor + readonly create: DispatchMethod>; + // getters + readonly gettrigger: DispatchMethod; + readonly getgasconsumed: DispatchMethod; + readonly getgasleft: DispatchMethod; + readonly getcurrentscripthash: DispatchMethod; + readonly getcallingscripthash: DispatchMethod; + readonly getentryscripthash: DispatchMethod; + readonly getnotifications: DispatchMethod; + readonly getvmstate: DispatchMethod; + readonly getresultstack: DispatchMethod; + // methods + readonly execute: DispatchMethod; + readonly loadclonedcontext: DispatchMethod; + readonly loadscript: DispatchMethod; + // misc + readonly peek: DispatchMethod; + readonly pop: DispatchMethod; + readonly dispose: DispatchMethod; +} + +const engineAssemblyOptions = { + assemblyFile: path.join(constants.CSHARP_APP_ROOT, 'EngineDispatcher.dll'), + methodName: 'Invoke', + typeName: 'NEOONE.EngineDispatcher', +}; + +export const createEngineDispatcher = () => createCSharpDispatchInvoke(engineAssemblyOptions); diff --git a/packages/neo-one-csharp-vm/src/dispatcher.ts b/packages/neo-one-csharp-vm/src/dispatcher.ts new file mode 100644 index 0000000000..2bbf825186 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/dispatcher.ts @@ -0,0 +1,22 @@ +import { func, Params, Source, TSQL } from '@neo-one/edge'; + +type EdgeOptions = (() => void) | string | Params | Source | TSQL; + +// tslint:disable-next-line: no-any +export interface DispatchMethod { + readonly returnType: Return; + readonly args: Args; +} + +export interface DefaultMethods { + // tslint:disable-next-line: no-any + readonly [k: string]: DispatchMethod; +} + +export const createCSharpDispatchInvoke = (options: EdgeOptions) => { + const invokeFunction = func(options); + + return ( + input: Methods[T]['args'] extends undefined ? { method: T } : { method: T; args: Methods[T]['args'] }, + ) => invokeFunction(input, true) as Methods[T]['returnType']; +}; diff --git a/packages/neo-one-csharp-vm/src/index.ts b/packages/neo-one-csharp-vm/src/index.ts new file mode 100644 index 0000000000..f595f3d5c2 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/index.ts @@ -0,0 +1 @@ +export * from './ApplicationEngine'; diff --git a/packages/neo-one-csharp-vm/src/run.ts b/packages/neo-one-csharp-vm/src/run.ts new file mode 100644 index 0000000000..cb3235004e --- /dev/null +++ b/packages/neo-one-csharp-vm/src/run.ts @@ -0,0 +1,21 @@ +import { TriggerType } from '@neo-one/node-core'; +import { ApplicationEngine } from './ApplicationEngine'; +import { ScriptBuilder, common } from '@neo-one/client-common'; +import { Block } from '@neo-one/node-core'; + +const run = () => { + const script = new ScriptBuilder(); + const engine = new ApplicationEngine({ trigger: TriggerType.Application, snapshot: true, gas: 0, testMode: true }); + const block = new Block(); + script.emitPush(Buffer.from(common.ZERO_UINT256)); + script.emitSysCall('System.Blockchain.GetBlock'); + + engine.loadScript(script.build()); + const state = engine.execute(); + console.log(state); + + const stack = engine.resultStack; + console.log(stack[0]); +}; + +run(); diff --git a/packages/neo-one-csharp-vm/src/types.ts b/packages/neo-one-csharp-vm/src/types.ts new file mode 100644 index 0000000000..52d46579e9 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/types.ts @@ -0,0 +1,7 @@ +// tslint:disable no-any + +// TODO: not implemented +export type ExecutionContext = any; + +// TODO: not implemented +export type Notifications = any; diff --git a/packages/neo-one-csharp-vm/tsconfig.json b/packages/neo-one-csharp-vm/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-csharp-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-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index d8937a64d0..aa6b3868ce 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -7,19 +7,14 @@ import { CallReceipt, ConsensusPayload, Header, - Input, - InvocationTransaction, LogAction, NotificationAction, NULL_ACTION, - Output, - OutputKey, ScriptContainerType, SerializableInvocationData, Settings, Storage, Transaction, - TransactionData, TriggerType, utils, Validator, @@ -58,13 +53,6 @@ export interface BlockchainOptions extends CreateBlockchainOptions { readonly currentHeader: BlockchainType['currentHeader'] | undefined; } -interface SpentCoin { - readonly output: Output; - readonly startHeight: number; - readonly endHeight: number; - readonly claimed: boolean; -} - interface Entry { readonly block: Block; readonly resolve: () => void; @@ -378,8 +366,6 @@ export class Blockchain { }): 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, @@ -405,7 +391,7 @@ export class Blockchain { } public async invokeScript(script: Buffer): Promise { - const transaction = new InvocationTransaction({ + const transaction = new Transaction({ script, gas: common.ONE_HUNDRED_FIXED8, }); @@ -413,7 +399,7 @@ export class Blockchain { return this.invokeTransaction(transaction); } - public async invokeTransaction(transaction: InvocationTransaction): Promise { + public async invokeTransaction(transaction: Transaction): Promise { const blockchain = this.createWriteBlockchain(); const mutableActions: Action[] = []; @@ -481,52 +467,6 @@ export class Blockchain { 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), - ); - } - - 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, - }); - - return blockData.systemFee; - }, - }); - }; - private async persistBlocksAsync(): Promise { if (this.mutablePersistingBlocks || !this.mutableRunning) { return; @@ -645,7 +585,7 @@ export class Blockchain { const result = { actions: mutableActions, hash, witness }; const { stack, state, errorMessage } = executeResult; - if (state === VMState.Fault) { + if (state === VMState.FAULT) { return { ...result, failureMessage: errorMessage === undefined ? 'Script execution ended in a FAULT state' : errorMessage, @@ -670,7 +610,7 @@ export class Blockchain { }; private readonly tryGetInvocationData = async ( - transaction: InvocationTransaction, + transaction: Transaction, ): Promise => { const data = await this.invocationData.tryGet({ hash: transaction.hash, @@ -705,54 +645,9 @@ export class Blockchain { 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 ( - 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 claimed = transactionData.claimed[input.index]; - - return { - output, - startHeight: transactionData.startHeight, - endHeight, - claimed: !!claimed, - }; - }; private start(): void { this.mutableBlock$ = new Subject(); @@ -767,75 +662,6 @@ export class Blockchain { 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 { if (!unsafe) { await this.verifyBlock(block); diff --git a/packages/neo-one-node-blockchain/src/StorageCache.ts b/packages/neo-one-node-blockchain/src/StorageCache.ts index 45e3616d61..c9c542d360 100644 --- a/packages/neo-one-node-blockchain/src/StorageCache.ts +++ b/packages/neo-one-node-blockchain/src/StorageCache.ts @@ -1,13 +1,11 @@ // tslint:disable no-object-mutation no-dynamic-delete -import { common, UInt256 } from '@neo-one/client-common'; +import { common } from '@neo-one/client-common'; import { AddChange, Block, Change, ChangeSet, DeleteChange, - Output, - OutputKey, ReadAllStorage, ReadGetAllStorage, ReadMetadataStorage, @@ -16,6 +14,7 @@ import { 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 }; @@ -729,44 +728,6 @@ export class BlockLikeStorageCache extends BaseReadStor } } -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' }; diff --git a/packages/neo-one-node-blockchain/src/Verifiable.ts b/packages/neo-one-node-blockchain/src/Verifiable.ts new file mode 100644 index 0000000000..95f65c0aad --- /dev/null +++ b/packages/neo-one-node-blockchain/src/Verifiable.ts @@ -0,0 +1,126 @@ +import { BinaryWriter, common, ContractMethodDescriptor, UInt160, UInt256 } from '@neo-one/client-common'; +import { Contract, Header, StorageItem, TrimmedBlock, Witness } from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +const maxVerificationGas = common.fixed8FromDecimal(0.5); + +export interface SnapshotMethods { + readonly tryGetBlock: (hash: UInt256) => Promise; + readonly tryGetHeader: (hash: UInt256) => Promise
; + readonly tryGetContract: (hash: UInt160) => Promise; + readonly tryGetStorage: (key: StorageKey) => Promise; +} + +export interface Verifiable { + readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; + readonly witnesses: readonly Witness[]; +} + +export interface VerifyResult { + readonly gas: BN; + readonly result: boolean; +} + +export const verifyWithApplicationEngine = ( + verifiable: Verifiable, + verification: Buffer, + index: number, + gas: BN, + offset: number, + init?: ContractMethodDescriptor, +): VerifyResult => + withApplicationEngine({ trigger: TriggerType.Verification, verifiable, snapshot: true, gas }, (engine) => { + engine.loadScript(verification, CallFlags.None); + engine.setInstructionPointer(offset); + if (init !== undefined) { + engine.loadClonedContext(init.offset); + } + engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); + + const state = engine.execute(); + if (state === 'FAULT') { + return { result: false, gas }; + } + + const stack = engine.resultStack; + if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { + return { result: false, gas }; + } + + return { result: true, gas: gas.sub(engine.gasConsumed) }; + }); + +export const tryVerifyHash = async ( + hash: UInt160, + index: number, + snapshot: SnapshotMethods, + verifiable: Verifiable, + gas: BN, +): Promise => { + const verificationScript = verifiable.witnesses[index].verification; + if (verificationScript.length === 0) { + const contractState = await snapshot.tryGetContract(hash); + if (contractState === undefined) { + return { result: false, gas }; + } + const methodDescriptor = contractState.manifest.abi.getMethod('verify'); + if (methodDescriptor === undefined) { + return { result: false, gas }; + } + + const verification = contractState.script; + const offset = methodDescriptor.offset; + const init = contractState.manifest.abi.getMethod('_initialize'); + + return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); + } + + if (hash !== verifiable.witnesses[index].scriptHash) { + return { result: false, gas }; + } + + return verifyWithApplicationEngine(verifiable, verificationScript, index, gas, 0); +}; + +export const verifyWitnesses = async ( + verifiable: Verifiable, + snapshot: SnapshotMethods, + 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(snapshot); + } catch { + return false; + } + + if (hashes.length !== verifiable.witnesses.length) { + return false; + } + + const { next, previous } = hashes + .slice(1) + .reduce<{ readonly next: Promise; readonly previous: boolean }>( + async (acc, hash, index) => { + const { result, gas: newGas } = await acc.next; + if (!result) { + return { + next: Promise.resolve({ result: false, gas: newGas }), + previous: false, + }; + } + + return { + next: tryVerifyHash(hash, index, snapshot, verifiable, newGas), + previous: acc.previous && result, + }; + }, + { next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true }, + ); +}; 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..64d44d4b9e 100644 --- a/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts +++ b/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts @@ -1,12 +1,6 @@ // 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'; +import { BooleanContractParameter, 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'; @@ -118,27 +112,22 @@ describe('Blockchain', () => { 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({ + transaction: new Transaction({ script: Buffer.alloc(1, 0), - gas: utils.ZERO, - attributes: [ - new UInt160Attribute({ - usage: AttributeUsage.Script, - value: common.ZERO_UINT160, - }), - ], + attributes: [], - scripts: [ + 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); diff --git a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts index 4a77c87bfe..0c1c0eb7dc 100644 --- a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts +++ b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts @@ -9,7 +9,7 @@ import { export const wrapExecuteScripts = async (execute: () => Promise): Promise => { try { const result = await execute(); - if (result.state === VMState.Halt) { + if (result.state === VMState.HALT) { return new InvocationResultSuccess({ gasConsumed: result.gasConsumed, gasCost: result.gasCost, diff --git a/packages/neo-one-node-core/src/Block.ts b/packages/neo-one-node-core/src/Block.ts index 4d30410391..3945e0adbc 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -10,10 +10,13 @@ import { UInt160, UInt256, } from '@neo-one/client-common'; +import { ContractModel } from '@neo-one/client-full-common/src'; import { BN } from 'bn.js'; import { Account, AccountKey } from './Account'; import { Asset, AssetKey } from './Asset'; -import { BlockBase } from './BlockBase'; +import { BlockBase, BlockBaseAdd } from './BlockBase'; +import { ConsensusData } from './ConsensusData'; +import { ContractPropertyState } from './ContractPropertyState'; import { MerkleTree } from './crypto'; import { VerifyError } from './errors'; import { Header, HeaderKey } from './Header'; @@ -26,30 +29,23 @@ import { SerializeJSONContext, } from './Serializable'; import { - deserializeTransactionWireBase, - FeeContext, - Input, - Output, - OutputKey, - RegisterTransaction, + // deserializeTransactionWireBase, + // FeeContext, + // Input, + // Output, + // OutputKey, + // RegisterTransaction, Transaction, - TransactionType, + // TransactionType, } 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; - readonly merkleRoot?: UInt256; - readonly timestamp: number; - readonly index: number; - readonly consensusData: BN; - readonly nextConsensus: UInt160; - readonly script?: Witness; - readonly hash?: UInt256; +export interface BlockAdd extends BlockBaseAdd { + readonly consensusData?: ConsensusData; readonly transactions: readonly Transaction[]; } @@ -57,44 +53,63 @@ 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 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 SerializableWire, SerializableJSON { - public static async calculateNetworkFee(context: FeeContext, transactions: readonly Transaction[]): Promise { - const fees = await Promise.all(transactions.map(async (transaction) => transaction.getNetworkFee(context))); + 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); - } + // 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 = reader.readArray(() => Transaction.deserializeWireBase(options), 0x10000); - 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'); @@ -106,9 +121,9 @@ export class Block extends BlockBase implements SerializableWire, Seriali merkleRoot: blockBase.merkleRoot, timestamp: blockBase.timestamp, index: blockBase.index, - consensusData: blockBase.consensusData, + consensusData, nextConsensus: blockBase.nextConsensus, - script: blockBase.script, + witness: blockBase.witness, transactions, }); } @@ -121,8 +136,9 @@ export class Block extends BlockBase implements SerializableWire, Seriali } 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 +148,15 @@ 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, }), ); + private readonly allHashesInternal = utils.lazy(() => + getCombinedModels(this.transactions, this.consensusData).map((model) => model.hash), + ); + public constructor({ version, previousHash, @@ -145,10 +164,10 @@ export class Block extends BlockBase implements SerializableWire, Seriali index, consensusData, nextConsensus, - script, + witness, hash, transactions, - merkleRoot = MerkleTree.computeRoot(transactions.map((transaction) => transaction.hash)), + merkleRoot = MerkleTree.computeRoot(getCombinedModels(transactions, consensusData).map((model) => model.hash)), }: BlockAdd) { super({ version, @@ -156,25 +175,29 @@ export class Block extends BlockBase implements SerializableWire, Seriali merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + witness, hash, }); 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, @@ -185,170 +208,39 @@ export class Block extends BlockBase implements SerializableWire, Seriali consensusData: this.consensusData, nextConsensus: this.nextConsensus, 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(context) as TransactionJSON), + // confirmations: blockBaseJSON.confirmations, TODO: is this our own property? }; } - 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, }); - - 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..67dc3c6431 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -10,45 +10,64 @@ import { UInt256, UInt256Hex, } from '@neo-one/client-common'; +import { ContractModel } from '@neo-one/client-full-common'; 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 { Header } from './Header'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializeJSONContext, + SerializeWire, +} from './Serializable'; import { utils } from './utils'; +import { SnapshotMethods } 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 witness?: Witness; readonly hash?: UInt256; } export abstract class BlockBase implements EquatableKey { - public static deserializeBlockBaseWireBase(options: DeserializeWireBaseOptions): BlockBaseAdd { + 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], + }; + } + 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 +75,50 @@ export abstract class BlockBase implements EquatableKey { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, }; } 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; + public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: SnapshotMethods) => { + if (this.previousHash === common.ZERO_UINT256) { + return [this.witness.scriptHash]; + } + + const prevHeader = await tryGetHeader(this.previousHash); + 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 [prevHeader.nextConsensus]; + }); // 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 getScriptHashesForVerifying = utils.lazyAsync( - async ({ getHeader }: BlockGetScriptHashesForVerifyingOptions) => { - if (this.index === 0) { - return new Set([common.uInt160ToHex(crypto.toScriptHash(this.script.verification))]); - } - - const previousHeader = await getHeader({ - hashOrIndex: this.previousHash, - }); - - return new Set([common.uInt160ToHex(previousHeader.nextConsensus)]); - }, - ); public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); 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 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,9 +128,8 @@ export abstract class BlockBase implements EquatableKey { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + witness, hash, }: BlockBaseAdd) { this.version = version; @@ -123,9 +137,8 @@ export abstract class BlockBase implements EquatableKey { this.merkleRoot = merkleRoot; this.timestamp = timestamp; this.index = index; - this.consensusData = consensusData; this.nextConsensus = nextConsensus; - this.scriptInternal = script; + this.witnessInternal = witness; const hashIn = hash; this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; } @@ -146,49 +159,64 @@ 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 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: JSONHelper.writeUInt64(this.timestamp), index: this.index, - nonce: JSONHelper.writeUInt64LE(this.consensusData), nextconsensus: crypto.scriptHashToAddress({ addressVersion: context.addressVersion, scriptHash: this.nextConsensus, }), - script: this.script.serializeJSON(context), - confirmations: 0, + witnesses: [this.witness.serializeJSON(context)], + // confirmations: [] TODO: this is a property we used to use, do we still need? }; } + public async verify(options: SnapshotMethods) { + const prevHeader = await options.tryGetHeader(this.previousHash); + if (prevHeader === undefined) { + return false; + } + + if (prevHeader.index + 1 !== this.index) { + return false; + } + + if (prevHeader.timestamp.gte(this.timestamp)) { + return false; + } + + return this.verifyWitnesses(options, utils.ONE_HUNDRED_MILLION); + } + 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/ConsensusData.ts b/packages/neo-one-node-core/src/ConsensusData.ts new file mode 100644 index 0000000000..7dad0476b2 --- /dev/null +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -0,0 +1,64 @@ +import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + SerializableJSON, + SerializableWire, + SerializeWire, +} from './Serializable'; +import { utils } from './utils'; + +// TODO: could put this somewhere else it is possible it changes? +const defaultValidatorsCount = new BN(7); + +export interface ConsensusDataAdd { + readonly primaryIndex: number; + readonly nonce: BN; +} + +export class ConsensusData implements SerializableWire, SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusData { + const { reader } = options; + const primaryIndex = reader.readVarUIntLE(defaultValidatorsCount.subn(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 readonly hashInternal = utils.lazy(() => crypto.hash256(this.serializeWire())); + + public constructor({ primaryIndex, nonce }: ConsensusDataAdd) { + this.primaryIndex = primaryIndex; + this.nonce = nonce; + } + + 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: this.nonce.toString(16), + }; + } +} diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index 00f093395f..d67b1aa27d 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper } from '@neo-one/client-common'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { DeserializeWireBaseOptions, @@ -7,17 +7,15 @@ 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 { public static deserializeWireBase(options: DeserializeWireBaseOptions): Header { const { reader } = options; - const blockBase = super.deserializeBlockBaseWireBase(options); + const blockBase = super.deserializeWireBase(options); if (reader.readUInt8() !== 0) { throw new InvalidFormatError( `Expected Header BinaryReader readUInt8(0) to be 0. Received: ${reader.readUInt8()}`, @@ -30,9 +28,8 @@ 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, }); } @@ -45,12 +42,25 @@ export class Header extends BlockBase implements SerializableWire
, Seria 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: [], + }); + } + 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); } } diff --git a/packages/neo-one-node-core/src/ScriptContainer.ts b/packages/neo-one-node-core/src/ScriptContainer.ts index cb8e859131..ad72a127fd 100644 --- a/packages/neo-one-node-core/src/ScriptContainer.ts +++ b/packages/neo-one-node-core/src/ScriptContainer.ts @@ -1,7 +1,7 @@ import { Block } from './Block'; import { InvalidScriptContainerTypeError } from './errors'; import { ConsensusPayload } from './payload'; -import { Transaction } from './transaction'; +import { Transaction } from './transaction/Transaction'; export enum ScriptContainerType { Transaction = 0x00, diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index 52e3a2bc4e..5b0fd0e2a5 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -4,8 +4,6 @@ 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 { BinaryReader } from './utils'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; @@ -46,15 +44,16 @@ export interface SerializableInvocationData { 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; + // 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/Signer.ts b/packages/neo-one-node-core/src/Signer.ts new file mode 100644 index 0000000000..204cf31610 --- /dev/null +++ b/packages/neo-one-node-core/src/Signer.ts @@ -0,0 +1,66 @@ +import { + assertWitnessScope, + InvalidFormatError, + IOHelper, + JSONHelper, + SignerJSON, + SignerModel, + toJSONWitnessScope, + witnessScopeHasFlag, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from './Serializable'; +import { utils } from './utils'; + +const hasCustomContracts = (scopes: WitnessScopeModel) => + witnessScopeHasFlag(scopes, WitnessScopeModel.CustomContracts); +const hasCustomGroups = (scopes: WitnessScopeModel) => witnessScopeHasFlag(scopes, WitnessScopeModel.CustomGroups); + +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, + }); + } + + 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 get size() { + return this.sizeInternal(); + } + + public serializeJSON(_context: SerializeJSONContext): 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-node-core/src/TransactionData.ts b/packages/neo-one-node-core/src/TransactionData.ts deleted file mode 100644 index 62bd74fbc0..0000000000 --- a/packages/neo-one-node-core/src/TransactionData.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { BinaryWriter, IOHelper, UInt256 } from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { BN } from 'bn.js'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface TransactionDataAdd { - readonly version?: number; - readonly hash: UInt256; - readonly blockHash: UInt256; - readonly startHeight: number; - readonly index: number; - readonly globalIndex: BN; - readonly endHeights?: { readonly [index: number]: number }; - readonly claimed?: { readonly [index: number]: boolean }; -} - -export interface TransactionDataUpdate { - readonly endHeights?: { readonly [index: number]: number }; - readonly claimed?: { readonly [index: number]: boolean }; -} - -export interface TransactionDataKey { - readonly hash: UInt256; -} - -export class TransactionData extends BaseState implements SerializableWire { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): TransactionData { - const version = reader.readUInt8(); - const hash = reader.readUInt256(); - const blockHash = reader.readUInt256(); - const startHeight = reader.readUInt32LE(); - const index = reader.readUInt32LE(); - const globalIndex = reader.readUInt64LE(); - const endHeights = reader.readObject(() => { - const key = reader.readUInt32LE(); - const value = reader.readUInt32LE(); - - return { key, value }; - }); - const claimed = reader.readObject(() => { - const key = reader.readUInt32LE(); - const value = reader.readBoolean(); - - return { key, value }; - }); - - return new this({ - version, - hash, - blockHash, - startHeight, - index, - globalIndex, - endHeights, - claimed, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): TransactionData { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt256; - public readonly blockHash: UInt256; - public readonly startHeight: number; - public readonly index: number; - public readonly globalIndex: BN; - public readonly endHeights: { - readonly [index: number]: number; - }; - public readonly claimed: { - readonly [index: number]: boolean; - }; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ - version, - hash, - blockHash, - startHeight, - index, - globalIndex, - endHeights = {}, - claimed = {}, - }: TransactionDataAdd) { - super({ version }); - this.hash = hash; - this.blockHash = blockHash; - this.startHeight = startHeight; - this.index = index; - this.globalIndex = globalIndex; - this.endHeights = endHeights; - this.claimed = claimed; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfObject(this.endHeights, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt32LE) + - IOHelper.sizeOfObject(this.claimed, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfBoolean), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public update({ endHeights = this.endHeights, claimed = this.claimed }: TransactionDataUpdate): TransactionData { - return new TransactionData({ - version: this.version, - hash: this.hash, - blockHash: this.blockHash, - startHeight: this.startHeight, - index: this.index, - globalIndex: this.globalIndex, - endHeights, - claimed, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeUInt256(this.hash); - writer.writeUInt256(this.blockHash); - writer.writeUInt32LE(this.startHeight); - writer.writeUInt32LE(this.index); - writer.writeUInt64LE(this.globalIndex); - writer.writeObject(this.endHeights, (key, value) => { - writer.writeUInt32LE(key); - writer.writeUInt32LE(value); - }); - writer.writeObject(this.claimed, (key, value) => { - writer.writeUInt32LE(key); - writer.writeBoolean(value); - }); - } -} 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..e51e16d606 --- /dev/null +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -0,0 +1,136 @@ +import { + BinaryWriter, + InvalidFormatError, + IOHelper, + JSONHelper, + SerializableWire, + Transaction, + 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, SerializeJSONContext } from './Serializable'; +import { utils } from './utils'; + +export interface TrimmedBlockAdd extends BlockBaseAdd { + readonly consensusData?: ConsensusData; + readonly hashes: readonly UInt256[]; +} + +export class TrimmedBlock extends BlockBase implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { + const { + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + } = BlockBase.deserializeBlockBaseWireBase(options); + const { reader } = options; + + const hashes = reader.readArray(reader.readUInt256, Block.MaxContentsPerBlock); + const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; + + return new this({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hashes, + consensusData, + }); + } + + 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, + }), + ); + + public constructor(options: TrimmedBlockAdd) { + super(options); + this.consensusData = options.consensusData; + this.hashes = options.hashes; + this.isBlock = this.hashes.length > 0; + } + + public get header() { + return this.headerInternal(); + } + + public getBlock>(cache: Cache) { + 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: this.hashes.slice(1).map(cache.get), + }); + } + + // 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, + ...options, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + writer.writeArray(this.hashes, writer.writeUInt256); + 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/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts new file mode 100644 index 0000000000..4409dfbb77 --- /dev/null +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -0,0 +1,131 @@ +import { BinaryWriter, common, ContractMethodDescriptor, UInt160, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Contract } from './Contract'; +import { Header } from './Header'; +import { StorageItem } from './StorageItem'; +import { TrimmedBlock } from './TrimmedBlock'; +import { BinaryReader } from './utils'; +import { Witness } from './Witness'; + +const maxVerificationGas = common.fixed8FromDecimal(0.5); + +export interface SnapshotMethods { + readonly tryGetBlock: (hash: UInt256) => Promise; + readonly tryGetHeader: (hash: UInt256) => Promise
; + readonly tryGetContract: (hash: UInt160) => Promise; + readonly tryGetStorage: (key: StorageKey) => Promise; +} + +export interface Verifiable { + readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; + readonly witnesses: readonly Witness[]; +} + +export interface VerifyResult { + readonly gas: BN; + readonly result: boolean; +} + +export const verifyWithApplicationEngine = ( + verifiable: Verifiable, + verification: Buffer, + index: number, + gas: BN, + offset: number, + init?: ContractMethodDescriptor, +): VerifyResult => + withApplicationEngine({ trigger: TriggerType.Verification, verifiable, snapshot: true, gas }, (engine) => { + engine.loadScript(verification, CallFlags.None); + engine.setInstructionPointer(offset); + if (init !== undefined) { + engine.loadClonedContext(init.offset); + } + engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); + + const state = engine.execute(); + if (state === 'FAULT') { + return { result: false, gas }; + } + + const stack = engine.resultStack; + if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { + return { result: false, gas }; + } + + return { result: true, gas: gas.sub(engine.gasConsumed) }; + }); + +export const tryVerifyHash = async ( + hash: UInt160, + index: number, + snapshot: SnapshotMethods, + verifiable: Verifiable, + gas: BN, +): Promise => { + const verificationScript = verifiable.witnesses[index].verification; + if (verificationScript.length === 0) { + const contractState = await snapshot.tryGetContract(hash); + if (contractState === undefined) { + return { result: false, gas }; + } + const methodDescriptor = contractState.manifest.abi.getMethod('verify'); + if (methodDescriptor === undefined) { + return { result: false, gas }; + } + + const verification = contractState.script; + const offset = methodDescriptor.offset; + const init = contractState.manifest.abi.getMethod('_initialize'); + + return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); + } + + if (hash !== verifiable.witnesses[index].scriptHash) { + return { result: false, gas }; + } + + return verifyWithApplicationEngine(verifiable, verificationScript, index, gas, 0); +}; + +export const verifyWitnesses = async ( + verifiable: Verifiable, + snapshot: SnapshotMethods, + 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(snapshot); + } catch { + return false; + } + + if (hashes.length !== verifiable.witnesses.length) { + return false; + } + + const { next, previous } = hashes + .slice(1) + .reduce<{ readonly next: Promise; readonly previous: boolean }>( + async (acc, hash, index) => { + const { result, gas: newGas } = await acc.next; + if (!result) { + return { + next: Promise.resolve({ result: false, gas: newGas }), + previous: false, + }; + } + + return { + next: tryVerifyHash(hash, index, snapshot, verifiable, newGas), + previous: acc.previous && result, + }; + }, + { next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true }, + ); +}; diff --git a/packages/neo-one-node-core/src/Witness.ts b/packages/neo-one-node-core/src/Witness.ts index 05e113a328..46459b5c8c 100644 --- a/packages/neo-one-node-core/src/Witness.ts +++ b/packages/neo-one-node-core/src/Witness.ts @@ -1,5 +1,4 @@ -import { IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; -import { Equals, EquatableKey } from './Equatable'; +import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, DeserializeWireOptions, @@ -13,12 +12,20 @@ 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); +// TODO: put these somewhere else https://github.com/neo-project/neo/blob/master/src/neo/Network/P2P/Payloads/Witness.cs +const invocationSize = 663; +const verificationSize = 361; - return new this({ invocation, verification }); +export class Witness extends WitnessModel implements SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Witness { + const { reader } = options; + const invocation = reader.readVarBytesLE(invocationSize); + const verification = reader.readVarBytesLE(verificationSize); + + return new Witness({ + invocation, + verification, + }); } public static deserializeWire(options: DeserializeWireOptions): Witness { @@ -28,24 +35,16 @@ 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(); } diff --git a/packages/neo-one-node-core/src/__tests__/newBlock.ts b/packages/neo-one-node-core/src/__tests__/newBlock.ts new file mode 100644 index 0000000000..4dc4beda0d --- /dev/null +++ b/packages/neo-one-node-core/src/__tests__/newBlock.ts @@ -0,0 +1,33 @@ +import { Block } from '../Block'; +import { Witness } from '../Witness'; +import { common } from '@neo-one/client-common'; + +const tx = new Transaction({ + script: Buffer.from([0x01]), + attributes: [], + signers: [], + networkFee: 0x02, + systemFee: 0x03, + nonce: 0x04, + validUntilBlock: 0x05, + version: 0x06, + witness: new Witness({ verification: Buffer.from([0x07]), invocation: Buffer.from([]) }), +}); + +const block = new Block({ + index: 0, + timestamp: 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: 1, + primaryIndex: 1, + }), + transactions: [tx], +}); diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 282e730450..9b120de783 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -6,9 +6,9 @@ export * from './Asset'; export * from './AssetType'; export * from './Block'; export * from './BlockBase'; -export * from './BlockData'; export * from './Blockchain'; export * from './CallReceipt'; +export * from './ConsensusData'; export * from './Contract'; export * from './ContractPropertyState'; export * from './Equatable'; @@ -21,7 +21,7 @@ export * from './Settings'; export * from './Storage'; export * from './StorageFlags'; export * from './StorageItem'; -export * from './TransactionData'; +export * from './TrimmedBlock'; export * from './Validator'; export * from './ValidatorsCount'; export * from './Witness'; diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts index 771ce9110d..7536dc6ccd 100644 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts +++ b/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts @@ -9,9 +9,9 @@ export const deserializeInvocationResultWireBase = (options: DeserializeWireBase const { reader } = options; const state = assertVMState(reader.clone().readUInt8()); switch (state) { - case VMState.Fault: + case VMState.FAULT: return InvocationResultError.deserializeWireBase(options); - case VMState.Halt: + case VMState.HALT: return InvocationResultSuccess.deserializeWireBase(options); default: throw new Error('Invalid VM state'); diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts index d252a79784..77d1dea23e 100644 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts +++ b/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts @@ -21,13 +21,13 @@ export interface InvocationResultErrorAdd { const MAX_SIZE = 1024; -export class InvocationResultError extends InvocationResultBase +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}`); + if (state !== VMState.FAULT) { + throw new InvalidFormatError(`Expected VMState to be: ${VMState.FAULT}. Received: ${state}`); } const message = reader.readVarString(MAX_SIZE); @@ -38,7 +38,7 @@ export class InvocationResultError extends InvocationResultBase protected readonly sizeExclusive: () => number; public constructor({ gasConsumed, gasCost, stack, message }: InvocationResultErrorAdd) { - super({ state: VMState.Fault, gasConsumed, gasCost, stack }); + super({ state: VMState.FAULT, gasConsumed, gasCost, stack }); this.message = message; this.sizeExclusive = utils.lazy(() => IOHelper.sizeOfVarString(this.message)); } @@ -50,7 +50,7 @@ export class InvocationResultError extends InvocationResultBase public serializeJSON(context: SerializeJSONContext): InvocationResultErrorJSON { return { - state: VMState.Fault, + state: VMState.FAULT, 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/InvocationResultSuccess.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts index 4abaff2624..8b5c4b7bd2 100644 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts +++ b/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts @@ -10,24 +10,24 @@ export interface InvocationResultSuccessAdd { readonly stack: readonly ContractParameter[]; } -export class InvocationResultSuccess extends InvocationResultBase +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}.`); + 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 }); + super({ state: VMState.HALT, gasConsumed, gasCost, stack }); } public serializeJSON(context: SerializeJSONContext): InvocationResultSuccessJSON { return { - state: VMState.Halt, + 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/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 83f619583e..ac31760b49 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -1,137 +1,190 @@ import { + AttributeTypeModel, common, - crypto, InvalidFormatError, - InvocationDataJSON, - InvocationTransactionJSON, - InvocationTransactionModel, - InvocationTransactionModelAdd, IOHelper, JSONHelper, - UInt256, + scriptHashToAddress, + TransactionJSON, + TransactionModel, + TransactionModelAdd, + UInt160, } from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; import { BN } from 'bn.js'; -import { VerifyError } from '../errors'; -import { createDeserializeWire, DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; +import _ from 'lodash'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableJSON, + SerializableWire, + SerializeJSONContext, +} from '../Serializable'; +import { Signer } from '../Signer'; +import { BinaryReader, utils } from '../utils'; 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 TransactionKey { - readonly hash: UInt256; -} +import { Attribute, deserializeAttribute } from './attributes'; -export const deserializeTransactionWireBase = (options: DeserializeWireBaseOptions): Transaction => - Transaction.deserializeWireBase(options); +export type TransactionAddUnsigned = Omit, 'witnesses'>; +export type TransactionAdd = TransactionModelAdd; -export const deserializeTransactionWire = createDeserializeWire(deserializeTransactionWireBase); - -export interface InvocationTransactionAdd extends InvocationTransactionModelAdd {} +export class Transaction extends TransactionModel + implements SerializableWire, SerializableJSON { + 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)); -const MAX_SCRIPT_SIZE = 65536; + return new Transaction({ + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + signers, + attributes, + script, + witnesses, + }); + } -export class Transaction extends TransactionBase< - TransactionType.Invocation, - InvocationTransactionJSON, - Constructor> ->(InvocationTransactionModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { + public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): TransactionAddUnsigned { const { reader } = options; - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); + const version = reader.readUInt8(); + if (version > 0) { + throw new InvalidFormatError(`Expected version to equal 0, found: ${version}`); + } - if (type !== TransactionType.Invocation) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Invocation}. Received: ${type}`); + const nonce = reader.readUInt32LE(); + const systemFee = reader.readUInt64LE(); + if (systemFee.ltn(0)) { + throw new InvalidFormatError(`Expected systemFee to be greater than 0, found: ${systemFee.toString()}`); } - const script = reader.readVarBytesLE(MAX_SCRIPT_SIZE); - if (script.length === 0) { - throw new InvalidFormatError('Expected invocation script length to not be 0'); + const networkFee = reader.readUInt64LE(); + if (networkFee.ltn(0)) { + throw new InvalidFormatError(`Expected networkFee to be greater than 0, found: ${networkFee.toString()}`); } - let gas = utils.ZERO; - if (version >= 1) { - gas = reader.readFixed8(); + if (systemFee.add(networkFee).lt(systemFee)) { + throw new InvalidFormatError(); } - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); + 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 new this({ + return { version, + nonce, + systemFee, + networkFee, + validUntilBlock, + signers, attributes, - inputs, - outputs, - scripts, script, - gas, - }); + }; } - public readonly sizeExclusive: () => number = utils.lazy( - () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfVarBytesLE(this.script), - ); + public static deserializeWire(options: DeserializeWireOptions): Transaction { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } - 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), - ]), - voteUpdates: voteUpdates.map(([address, votes]) => [ - crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: address, - }), - votes.map((vote) => common.ecPointToString(vote)), - ]), - actions: actions.map((action) => action.serializeJSON(context)), - storageChanges: storageChanges.map((storageChange) => storageChange.serializeJSON(context)), - }; + 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}`); } - return { - ...transactionBaseJSON, - type: 'InvocationTransaction', - script: JSONHelper.writeBuffer(this.script), - gas: JSONHelper.writeFixed8(this.gas), - invocationData: invocationDataJSON, - }; + 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 getSystemFee(_context: FeeContext): BN { - return this.gas; + private readonly headerSizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE, + ); + + private readonly sizeInternal = utils.lazy( + () => + this.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 get headerSize() { + return this.headerSizeInternal(); } - public async verify(options: TransactionVerifyOptions): Promise { - if (!this.gas.mod(utils.ONE_HUNDRED_MILLION).eq(utils.ZERO)) { - throw new VerifyError('Invalid GAS amount'); - } + public get size() { + return this.sizeInternal(); + } - return super.verify(options); + public serializeJSON(options: SerializeJSONContext): TransactionJSON { + return { + hash: JSONHelper.writeUInt256(this.hash), + size: this.size, + version: this.version, + nonce: this.nonce, + sender: scriptHashToAddress(common.uInt160ToString(this.sender)), + sysfee: JSONHelper.writeUInt64LE(this.systemFee), + netfee: JSONHelper.writeUInt64LE(this.networkFee), + validuntilblock: this.validUntilBlock, + signers: this.signers.map((signer) => signer.serializeJSON(options)), + attributes: this.attributes.map((attr) => attr.serializeJSON(options)), + script: JSONHelper.writeBuffer(this.script), + witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), + }; } } 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 6a3cffa6d0..0000000000 --- a/packages/neo-one-node-core/src/transaction/TransactionBase.ts +++ /dev/null @@ -1,473 +0,0 @@ -import { - 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 { 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: Transaction; -}) => - 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: Transaction; - readonly utilityToken: Transaction; - 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: Transaction; - readonly utilityToken: Transaction; - readonly fees: { [K in TransactionType]?: BN }; - readonly registerValidatorFee: BN; - readonly memPool?: readonly Transaction[]; -} - -/** @internal */ -export function TransactionBase< - TransactionJSON, - TBase extends Constructor> ->(Base: TBase) { - abstract class TransactionBaseClass extends Base implements EquatableKey, SerializableJSON { - public static readonly WitnessConstructor: Constructor = Witness; - - public static deserializeTransactionBaseStartWireBase({ - reader, - }: DeserializeWireBaseOptions): { readonly version: number } { - const version = reader.readUInt8(); - - return { 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), - }); - } - - 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(); - }, - ); - public 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(), - ); - public 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; - }, - ); - public readonly getReferencesInternal = utils.lazyAsync(async ({ getOutput }: GetReferencesOptions) => - Promise.all(this.inputs.map(async (input) => getOutput(input))), - ); - public 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)); - }, - ); - public 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; - } - - public readonly sizeExclusive: () => number = () => 0; - - public 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'); - } - } - - public 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'); - } - } - - public 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.'); - } - } - } - - public 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/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..6744490f07 --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts @@ -0,0 +1,35 @@ +import { + AttributeBaseModel, + AttributeJSON, + AttributeTypeModel, + InvalidFormatError, + IOHelper, + toJSONAttributeType, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; + +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(_context: SerializeJSONContext): AttributeJSON { + return { + type: toJSONAttributeType(this.type), + }; + } + + public get size() { + return IOHelper.sizeOfUInt8 + this.sizeExclusive(); + } + + protected sizeExclusive(): number { + return 0; + } +} 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 e69de29bb2..0000000000 diff --git a/packages/neo-one-node-core/src/transaction/index.ts b/packages/neo-one-node-core/src/transaction/index.ts index f3ab4c46c3..348a5f9ebb 100644 --- a/packages/neo-one-node-core/src/transaction/index.ts +++ b/packages/neo-one-node-core/src/transaction/index.ts @@ -1,6 +1,2 @@ export * from './Transaction'; -export * from './Transaction'; -export * from './TransactionBase'; -export * from './TransactionType'; -export * from './attribute'; -export * from './state'; +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..7014d576d4 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); diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 8a521f4311..ccbb61b8e0 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -9,7 +9,6 @@ import { BlockKey, Contract, deserializeActionWire, - deserializeTransactionWire, DeserializeWireContext, Header, HeaderKey, diff --git a/packages/neo-one-node-vm/src/__tests__/execute.test.ts b/packages/neo-one-node-vm/src/__tests__/execute.test.ts index 36ac706d5c..8b2a555440 100644 --- a/packages/neo-one-node-vm/src/__tests__/execute.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/execute.test.ts @@ -57,7 +57,7 @@ describe('execute', () => { const expectFailure = (result: ExecuteScriptsResult) => { expect(result.errorMessage).toBeUndefined(); - expect(result.state).toEqual(VMState.Halt); + expect(result.state).toEqual(VMState.HALT); expect(result.stack.length).toEqual(1); expect(result.stack[0].asBoolean()).toBeFalsy(); expect(result.gasConsumed.toString(10)).toMatchSnapshot(); @@ -69,14 +69,14 @@ describe('execute', () => { if (result.errorMessage !== undefined) { expect(result.errorMessage.split('\n')[0]).toMatchSnapshot(); } - expect(result.state).toEqual(VMState.Fault); + 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.state).toEqual(VMState.HALT); expect(result.stack.length).toEqual(1); expect(result.stack[0].asBoolean()).toBeTruthy(); expect(result.gasConsumed.toString(10)).toMatchSnapshot(); @@ -88,7 +88,7 @@ describe('execute', () => { throw new Error(result.errorMessage); } - if (result.state !== VMState.Halt) { + if (result.state !== VMState.HALT) { throw new Error(`Ended in ${result.state}`); } @@ -144,7 +144,7 @@ describe('execute', () => { gas, }); - if (state === VMState.Fault) { + if (state === VMState.FAULT) { const { errorMessage } = result; expect(errorMessage).toBeDefined(); if (errorMessage !== undefined) { @@ -160,9 +160,9 @@ describe('execute', () => { }); }; - testKYC('should fail kyc transaction with insufficient gas', utils.ZERO, VMState.Fault); + 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); + 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)); @@ -198,7 +198,7 @@ describe('execute', () => { }); expect(result.errorMessage).toBeUndefined(); - expect(result.state).toEqual(VMState.Halt); + expect(result.state).toEqual(VMState.HALT); expect(result.gasConsumed.toString(10)).toMatchSnapshot(); testUtils.verifyBlockchainSnapshot(blockchain); testUtils.verifyListeners(listeners); 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 3e5e62e1a5..532e323527 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -3237,7 +3237,7 @@ const handleArgs = (sb: ScriptBuilder, args: readonly Arg[]) => { } }; -describe('syscalls', () => { +describe.skip('syscalls', () => { // tslint:disable-next-line no-any const filterMethods = (value: any): any => { if (value == undefined) { diff --git a/packages/neo-one-node-vm/src/execute.ts b/packages/neo-one-node-vm/src/execute.ts index 2bcf094799..cac0d1378b 100644 --- a/packages/neo-one-node-vm/src/execute.ts +++ b/packages/neo-one-node-vm/src/execute.ts @@ -40,14 +40,14 @@ const executeNext = async ({ readonly context: ExecutionContext; }): Promise => { let context = contextIn; - if (context.state !== VMState.None) { + if (context.state !== VMState.NONE) { return context; } if (context.pc >= context.code.length) { return { ...context, - state: VMState.Halt, + state: VMState.HALT, }; } @@ -137,13 +137,13 @@ const executeNext = async ({ const run = async ({ context: contextIn }: { readonly context: ExecutionContext }): Promise => { let context = contextIn; // tslint:disable-next-line no-loop-statement - while (context.state === VMState.None) { + while (context.state === VMState.NONE) { try { // eslint-disable-next-line context = await executeNext({ context }); } catch (error) { context = { - state: VMState.Fault, + state: VMState.FAULT, errorMessage: getErrorMessage(error), blockchain: context.blockchain, init: context.init, @@ -198,7 +198,7 @@ export const executeScript = async ({ const scriptHash = crypto.hash160(code); const context = { - state: VMState.None, + state: VMState.NONE, blockchain, init, engine: { @@ -275,7 +275,7 @@ export const execute = async ({ 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) { + 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 @@ -325,7 +325,7 @@ export const execute = async ({ const finalContext = context; if (finalContext === undefined) { return { - state: errorMessage === undefined ? VMState.Halt : VMState.Fault, + state: errorMessage === undefined ? VMState.HALT : VMState.FAULT, stack: [], stackAlt: [], gasConsumed: utils.ZERO, @@ -340,11 +340,11 @@ export const execute = async ({ gasConsumed = utils.ZERO; } - const state = errorMessage === undefined ? finalContext.state : VMState.Fault; - const toContractParameter = (item: StackItem) => safeToContractParameter(item, state === VMState.Fault); + 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, + state: errorMessage === undefined ? finalContext.state : VMState.FAULT, stack: finalContext.stack.map(toContractParameter), stackAlt: finalContext.stackAlt.map(toContractParameter), gasConsumed, diff --git a/packages/neo-one-node-vm/src/opcodes.ts b/packages/neo-one-node-vm/src/opcodes.ts index 2d2a30a8b3..ec8eba678c 100644 --- a/packages/neo-one-node-vm/src/opcodes.ts +++ b/packages/neo-one-node-vm/src/opcodes.ts @@ -245,10 +245,10 @@ const call = ({ name, tailCall }: { readonly name: OpCode; readonly tailCall?: b }); let { state } = resultContext; - if (state === VMState.Halt) { + 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; + state = tailCall ? VMState.HALT : context.state; } return { @@ -345,17 +345,17 @@ const callIsolated = ({ }); let { state, stackCount } = resultContext; - if (state === VMState.Halt) { + 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; + 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) { + if (resultContext.state === VMState.HALT && resultContext.stack.length < returnValueCount) { throw new InsufficientReturnValueError(context, resultContext.stack.length, returnValueCount); } @@ -430,7 +430,7 @@ const functionCallIsolated = ({ name }: { readonly name: OpCode }): OpCreate => }); let { state, stackCount } = resultContext; - if (state === VMState.Halt) { + if (state === VMState.HALT) { state = context.state; } @@ -595,7 +595,7 @@ const OPCODE_PAIRS = ([ ...resultContext, callingScriptHash: context.callingScriptHash, pc: pc + 2, - state: resultContext.state === VMState.Fault ? VMState.Fault : VMState.None, + state: resultContext.state === VMState.FAULT ? VMState.FAULT : VMState.NONE, depth: context.depth, }, }; @@ -607,7 +607,7 @@ const OPCODE_PAIRS = ([ createOp({ name: 'RET', invoke: ({ context }) => ({ - context: { ...context, state: VMState.Halt }, + context: { ...context, state: VMState.HALT }, }), }), ], diff --git a/packages/neo-one-node-vm/src/syscalls.ts b/packages/neo-one-node-vm/src/syscalls.ts index b91edca8d2..7e48913781 100644 --- a/packages/neo-one-node-vm/src/syscalls.ts +++ b/packages/neo-one-node-vm/src/syscalls.ts @@ -384,6 +384,7 @@ const createPut = ({ name }: { readonly name: 'Neo.Storage.Put' | 'Neo.Storage.P })({ context: contextIn }); }; +// TODO: PICKUP HERE export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { 'System.Runtime.Platform': createSysCall({ name: 'System.Runtime.Platform', @@ -393,697 +394,27 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { 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', + name: 'Neo.Block.GetTransactionCount', in: 1, out: 1, invoke: ({ context, args }) => ({ context, - results: [new UInt160StackItem(args[0].asAccount().hash)], + results: [new IntegerStackItem(new BN(args[0].asBlock().transactions.length))], }), }), - 'Neo.Account.GetVotes': createSysCall({ - name: 'Neo.Account.GetVotes', + 'Neo.Account.GetScriptHash': createSysCall({ + name: 'Neo.Account.GetScriptHash', in: 1, out: 1, invoke: ({ context, args }) => ({ context, - results: [new ArrayStackItem(args[0].asAccount().votes.map((vote) => new ECPointStackItem(vote)))], + results: [new UInt160StackItem(args[0].asAccount().hash)], }), }), - '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, @@ -1094,96 +425,6 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }), }), - '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, @@ -1193,90 +434,50 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }), }), - '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', + // TODO: they maybe just changed the name of this one to System + // '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]()))], + // }; + // }, + // }), + + // TODO: base the new create syscall off of this one + // '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]()))], + // }; + // }, + // }), + + 'System.Enumerator.Next': createSysCall({ + name: 'System.Enumerator.Next', in: 1, out: 1, invoke: async ({ context, args }) => { @@ -1290,65 +491,66 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }, }), - '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', + 'System.Enumerator.Value': createSysCall({ + name: 'System.Enumerator.Value', in: 1, out: 1, invoke: async ({ context, args }) => ({ context, // tslint:disable-next-line no-any - results: [args[0].asIterator().key() as any], + results: [args[0].asEnumerator().value() as any], }), }), - 'Neo.Enumerator.Value': createSysCall({ - name: 'Neo.Enumerator.Value', - in: 1, + 'System.Enumerator.Concat': createSysCall({ + name: 'System.Enumerator.Concat', + in: 2, out: 1, invoke: async ({ context, args }) => ({ context, - // tslint:disable-next-line no-any - results: [args[0].asEnumerator().value() as any], + results: [new EnumeratorStackItem(args[0].asEnumerator().concat(args[1].asEnumerator()))], }), }), - 'Neo.Enumerator.Concat': createSysCall({ - name: 'Neo.Enumerator.Concat', - in: 2, + // TODO: base the new create syscall off of this + // '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]()))], + // }; + // }, + // }), + + 'System.Iterator.Key': createSysCall({ + name: 'System.Iterator.Key', + in: 1, out: 1, invoke: async ({ context, args }) => ({ context, - results: [new EnumeratorStackItem(args[0].asEnumerator().concat(args[1].asEnumerator()))], + // tslint:disable-next-line no-any + results: [args[0].asIterator().key() as any], }), }), - 'Neo.Iterator.Concat': createSysCall({ - name: 'Neo.Iterator.Concat', + 'System.Iterator.Concat': createSysCall({ + name: 'System.Iterator.Concat', in: 2, out: 1, invoke: async ({ context, args }) => ({ @@ -1357,8 +559,8 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }), }), - 'Neo.Iterator.Keys': createSysCall({ - name: 'Neo.Iterator.Keys', + 'System.Iterator.Keys': createSysCall({ + name: 'System.Iterator.Keys', in: 1, out: 1, invoke: async ({ context, args }) => ({ @@ -1367,8 +569,8 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }), }), - 'Neo.Iterator.Values': createSysCall({ - name: 'Neo.Iterator.Values', + 'System.Iterator.Values': createSysCall({ + name: 'System.Iterator.Values', in: 1, out: 1, invoke: async ({ context, args }) => ({ @@ -1416,22 +618,6 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }, }), - '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, @@ -1459,300 +645,109 @@ export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { }, }), - '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' }), + // TODO: check this contract create call when reimplementing + // '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), + // ), + + // TODO: might want to use this flow for System.Contract.Update? + // '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), + // ), + + // TODO: Update this with new implementation + // 'System.Contract.Destroy': createSysCall({ + // name: 'System.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.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 } = { @@ -1763,7 +758,6 @@ export const SYSCALL_ALIASES: { readonly [key: string]: string | undefined } = { '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', @@ -1771,7 +765,6 @@ export const SYSCALL_ALIASES: { readonly [key: string]: string | undefined } = { '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', diff --git a/rush.json b/rush.json index c4237e50c9..cc35dff7c0 100644 --- a/rush.json +++ b/rush.json @@ -106,6 +106,24 @@ "shouldPublish": true, "versionPolicyName": "CoreReleasePolicy" }, + { + "packageName": "@neo-one/csharp-blockchain", + "projectFolder": "packages/neo-one-csharp-blockchain", + "reviewCategory": "production", + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/csharp-core", + "projectFolder": "packages/neo-one-csharp-core", + "reviewCategory": "production", + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/csharp-vm", + "projectFolder": "packages/neo-one-csharp-vm", + "reviewCategory": "production", + "versionPolicyName": "CoreReleasePolicy" + }, { "packageName": "@neo-one/developer-tools", "projectFolder": "packages/neo-one-developer-tools", From f827d213d64d7d91bf9426385cd31bc9bc652880 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 24 Aug 2020 15:29:28 -0700 Subject: [PATCH 092/141] feat(client-full-common): 90% of work on client-full-common, more client-common (#2144) --- .../src/NativeContract.ts | 2 +- .../src/__data__/data.ts | 2 +- .../src/__tests__/contractParameters.test.ts | 142 ++++++++++------ .../models/ContractParameterTypeModel.test.ts | 4 +- ...ignerModel.test.ts => SignerModel.test.ts} | 15 +- .../models/StateDescriptorTypeModel.test.ts | 17 -- .../models/WitnessScopeModel.test.ts | 1 - .../transactionModel.test.ts.snap | 3 + .../models/transaction/attributes.test.ts | 99 +++-------- .../transaction/transactionModel.test.ts | 127 +------------- .../src/__tests__/models/vm.test.ts | 2 +- packages/neo-one-client-common/src/common.ts | 9 +- packages/neo-one-client-common/src/errors.ts | 4 - .../src/models/Serializable.ts | 4 + .../models/transaction/TransactionModel.ts | 4 +- .../attribute/AttributeBaseModel.ts | 4 - .../neo-one-client-common/src/models/types.ts | 72 ++++---- packages/neo-one-client-common/src/types.ts | 155 ++++++++++++------ .../src/__data__/index.ts | 1 + .../src/__data__/models.ts | 119 ++++++++++++++ .../__tests__/abi/ContractABIModel.test.ts | 25 +++ .../abi/ContractEventDescriptorModel.test.ts | 17 ++ .../abi/ContractMethodDescriptorModel.test.ts | 21 +++ .../ContractParameterDefinitionModel.test.ts | 51 ++++++ .../ContractABIModel.test.ts.snap | 80 +++++++++ .../ContractEventDescriptorModel.test.ts.snap | 33 ++++ ...ContractMethodDescriptorModel.test.ts.snap | 37 +++++ ...tractParameterDefinitionModel.test.ts.snap | 85 ++++++++++ .../models/ContractFeaturesModel.test.ts | 46 ++++++ .../models/ContractGroupModel.test.ts | 7 + .../models/ContractManifestModel.test.ts | 7 + .../__tests__/models/ContractModel.test.ts | 14 ++ .../ContractPermissionDescriptorModel.test.ts | 27 +++ .../models/ContractPermissionModel.test.ts | 15 ++ .../__tests__/models/ContractTests.test.ts | 60 ------- .../ContractFeaturesModel.test.ts.snap | 9 + .../ContractGroupModel.test.ts.snap | 8 + .../ContractManifestModel.test.ts.snap | 60 +++++++ .../__snapshots__/ContractModel.test.ts.snap | 3 + ...ractPermissionDescriptorModel.test.ts.snap | 7 + .../ContractPermissionModel.test.ts.snap | 27 +++ .../__snapshots__/ContractTests.test.ts.snap | 3 - .../src/__tests__/models/transaction.test.ts | 14 -- .../neo-one-client-full-common/src/errors.ts | 4 +- .../src/models/ContractModel.ts | 108 ------------ .../src/models/ContractPropertyStateModel.ts | 88 ---------- .../models/contract/ContractFeaturesModel.ts | 48 ++++++ .../models/contract/ContractManifestModel.ts | 102 ++++++++++++ .../src/models/contract/ContractModel.ts | 32 ++++ .../models/contract/abi/ContractABIModel.ts | 35 ++++ .../abi/ContractEventDescriptorModel.ts | 28 ++++ .../abi/ContractMethodDescriptorModel.ts | 37 +++++ .../abi/ContractParameterDefinitionModel.ts | 27 +++ .../src/models/contract/abi/index.ts | 4 + .../src/models/contract/index.ts | 4 + .../src/models/index.ts | 4 +- .../models/permissions/ContractGroupModel.ts | 23 +++ .../ContractPermissionDescriptorModel.ts | 43 +++++ .../permissions/ContractPermissionModel.ts | 28 ++++ .../src/models/permissions/index.ts | 3 + 60 files changed, 1406 insertions(+), 654 deletions(-) rename packages/neo-one-client-common/src/__tests__/models/{CosignerModel.test.ts => SignerModel.test.ts} (84%) delete mode 100644 packages/neo-one-client-common/src/__tests__/models/StateDescriptorTypeModel.test.ts create mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__data__/index.ts create mode 100644 packages/neo-one-client-full-common/src/__data__/models.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/ContractABIModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/ContractEventDescriptorModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/ContractMethodDescriptorModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/ContractParameterDefinitionModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractABIModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractEventDescriptorModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractMethodDescriptorModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractParameterDefinitionModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractGroupModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractManifestModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionDescriptorModel.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionModel.test.ts delete mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractTests.test.ts create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractGroupModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractManifestModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionDescriptorModel.test.ts.snap create mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionModel.test.ts.snap delete mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractTests.test.ts.snap delete mode 100644 packages/neo-one-client-full-common/src/__tests__/models/transaction.test.ts delete mode 100644 packages/neo-one-client-full-common/src/models/ContractModel.ts delete mode 100644 packages/neo-one-client-full-common/src/models/ContractPropertyStateModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/ContractFeaturesModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/ContractModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/ContractEventDescriptorModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/ContractParameterDefinitionModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/index.ts create mode 100644 packages/neo-one-client-full-common/src/models/contract/index.ts create mode 100644 packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/permissions/ContractPermissionModel.ts create mode 100644 packages/neo-one-client-full-common/src/models/permissions/index.ts diff --git a/packages/neo-one-client-common/src/NativeContract.ts b/packages/neo-one-client-common/src/NativeContract.ts index ccb36c5ecd..cffa962621 100644 --- a/packages/neo-one-client-common/src/NativeContract.ts +++ b/packages/neo-one-client-common/src/NativeContract.ts @@ -2,7 +2,7 @@ import { common, UInt160 } from './common'; import { crypto } from './crypto'; import { scriptHashToAddress } from './helpers'; import { ScriptBuilder } from './ScriptBuilder'; -import { AddressString, ContractManifest } from './types'; +import { AddressString } from './types'; export type NativeContractServiceName = 'Neo.Native.Policy' | 'Neo.Native.Tokens.GAS' | 'Neo.Native.Tokens.NEO'; 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__/contractParameters.test.ts b/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts index e83b4b7c82..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,19 +468,21 @@ 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', @@ -463,7 +497,9 @@ describe('Extra Contract Parameter Coverage', () => { const mapParam = { type: 'Map', value: [stringMap], - }; + name: randomName, + // tslint:disable-next-line: no-any + } as any; const mapABI = { type: 'Map', @@ -473,7 +509,8 @@ describe('Extra Contract Parameter Coverage', () => { value: { type: 'String', }, - }; + // tslint:disable-next-line: no-any + } as any; const objABI = { type: 'Object', @@ -482,7 +519,8 @@ describe('Extra Contract Parameter Coverage', () => { type: 'String', }, }, - }; + // tslint:disable-next-line: no-any + } as any; test('toForwardValue', () => { expect(smartContractConverters.toForwardValue(mapParam)).toEqual(mapParam); @@ -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/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/CosignerModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts similarity index 84% rename from packages/neo-one-client-common/src/__tests__/models/CosignerModel.test.ts rename to packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts index c09d3c883f..0053c7c5c8 100644 --- a/packages/neo-one-client-common/src/__tests__/models/CosignerModel.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts @@ -1,6 +1,6 @@ import { keys } from '../../__data__'; import { common } from '../../common'; -import { CosignerAdd, CosignerModel } from '../../models/SignerModel'; +import { SignerAdd, SignerModel } from '../../models/SignerModel'; import { toWitnessScope } from '../../models/WitnessScopeModel'; const testAccount = keys[0].scriptHash; @@ -12,17 +12,16 @@ const optionsBuilder = ({ scopes = 'Global', allowedContracts = [], allowedGroups = [], -}: Partial = {}): CosignerAdd => ({ +}: Partial = {}): SignerAdd => ({ account, scopes, allowedContracts, allowedGroups, }); -// TODO: check and run this test -describe('Cosigner Model', () => { +describe('Signer Model', () => { test('SerializeWire', () => { - const cosigner = new CosignerModel(optionsBuilder()); + const cosigner = new SignerModel(optionsBuilder()); const serialized = cosigner.serializeWire(); expect(serialized).toEqual( Buffer.concat([common.uInt160ToBuffer(testAccount), Buffer.from([toWitnessScope('Global')])]), @@ -30,7 +29,7 @@ describe('Cosigner Model', () => { }); test('SerializeWire - CustomContracts Scope', () => { - const contractCosigner = new CosignerModel( + const contractCosigner = new SignerModel( optionsBuilder({ scopes: 'CustomContracts', allowedContracts: [testContract], @@ -48,7 +47,7 @@ describe('Cosigner Model', () => { }); test('SerializeWire - CustomGroups Scope', () => { - const groupCosigner = new CosignerModel( + const groupCosigner = new SignerModel( optionsBuilder({ scopes: 'CustomGroups', allowedGroups: [testGroup], @@ -66,7 +65,7 @@ describe('Cosigner Model', () => { }); test('SerializeWire - CustomContractsAndCustomGroups Scope', () => { - const bothCosigner = new CosignerModel( + const bothCosigner = new SignerModel( optionsBuilder({ scopes: 'CustomContractsAndCustomGroups', allowedContracts: [testContract], 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/WitnessScopeModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts index d298a7637c..8c20f50e18 100644 --- a/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts @@ -7,7 +7,6 @@ import { WitnessScopeModel, } from '../../models/WitnessScopeModel'; -// TODO: check and run this test describe('Witness Scope - Functions', () => { const goodScope = WitnessScopeModel.Global; const goodString = 'Global'; 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/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/transactionModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts index d20c535fd2..ddb9589f7e 100644 --- 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 @@ -1,7 +1,7 @@ import { BN } from 'bn.js'; import { keys } from '../../../__data__/keys'; import { BinaryWriter } from '../../../BinaryWriter'; -import { CosignerModel, TransactionModel, TransactionModelAdd } from '../../../models'; +import { SignerModel, TransactionModel, TransactionModelAdd } from '../../../models'; const testSender = keys[0].scriptHash; const testPrivKey = keys[1].privateKey; @@ -15,7 +15,7 @@ const optionsBuilder = ({ sender = testSender, attributes = [], witnesses = [], - cosigners = [], + signers = [], hash, script = Buffer.from([0x10]), }: Partial): TransactionModelAdd => ({ @@ -27,7 +27,7 @@ const optionsBuilder = ({ sender, attributes, witnesses, - cosigners, + signers, hash, script, }); @@ -39,7 +39,6 @@ const resetWriter = () => { testWriter = new BinaryWriter(); }; -// TODO: check and run this test describe('Transaction Model', () => { beforeEach(resetWriter); @@ -54,7 +53,7 @@ describe('Transaction Model', () => { }); test('Serialize Base - With Cosigners', () => { - const cosigner = new CosignerModel({ + const signer = new SignerModel({ account: testSender, scopes: 'Global', }); @@ -64,7 +63,7 @@ describe('Transaction Model', () => { systemFee, networkFee, script, - cosigners: [cosigner], + signers: [signer], }), }); @@ -89,119 +88,3 @@ describe('Transaction Model', () => { expect(serializedSigned).toEqual(Buffer.concat([serializedUnsigned, Buffer.from([0x01]), witness.serializeWire()])); }); }); - -// 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 029d1f17b0..93a188ff30 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( @@ -205,6 +206,8 @@ 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 ONE_HUNDRED_FIXED8 = fixed8FromDecimal(100); @@ -219,8 +222,9 @@ export const common = { D8, NEO_ADDRESS_VERSION: 0x35, NEO_PRIVATE_KEY_VERSION: 0x80, - GROUPING_SIZE_BYTES: 16, // TODO: remove? added by Dan? - MAX_CONTRACT_STRING: 252, // TODO: remove? added by Dan? + GROUPING_SIZE_BYTES: 16, + MAX_CONTRACT_STRING: 252, + MAX_MANIFEST_LENGTH: 4096, ECPOINT_BUFFER_BYTES, ECPOINT_INFINITY, ECPOINT_INFINITY_BYTE, @@ -285,4 +289,5 @@ export const common = { fixedFromDecimal, fixedToDecimal, reverse, + isWildcard, }; diff --git a/packages/neo-one-client-common/src/errors.ts b/packages/neo-one-client-common/src/errors.ts index e15c8fcde1..4fcfdbe844 100644 --- a/packages/neo-one-client-common/src/errors.ts +++ b/packages/neo-one-client-common/src/errors.ts @@ -73,10 +73,6 @@ export const InvalidVerifyResultJSONError = makeErrorWithCode( 'INVALID_RELAY_RESULT_REASON_JSON', (value: string) => `Invalid VerifyResult: ${value}`, ); -export const InvalidStateDescriptorTypeError = makeErrorWithCode( - 'INVALID_STATE_DESCRIPTOR_TYPE', - (stateDescriptorType: number) => `Expected StateDescriptorType, found: ${stateDescriptorType.toString(16)}`, -); export const InvalidContractParameterTypeJSONError = makeErrorWithCode( 'INVALID_CONTRACT_PARAMETER_TYPE_JSON', (value: string) => `Invalid ContractParameterType: ${value}`, diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 9182f67340..2e6acfa9df 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -13,3 +13,7 @@ export const createSerializeWire = (serializeWireBase: (writer: BinaryWriter) => return writer.toBuffer(); }; + +export interface SerializableJSON { + readonly serializeJSON: () => TJSON; +} 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 6270e09ef5..eb2fb69751 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -44,7 +44,7 @@ export class TransactionModel< public readonly version: number; public readonly nonce: number; - public readonly sender: UInt160; + public readonly sender?: UInt160; public readonly validUntilBlock: number; public readonly signers: readonly TSigner[]; public readonly attributes: readonly TAttribute[]; @@ -73,7 +73,7 @@ export class TransactionModel< }: TransactionModelAdd) { this.version = version === undefined ? DEFAULT_VERSION : version; this.nonce = nonce; - this.sender = signers[0].account; + this.sender = signers[0]?.account; this.attributes = attributes; this.witnesses = witnesses; this.signers = signers; 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 686e5abfea..65bbcc70de 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 @@ -13,10 +13,6 @@ export abstract class AttributeBaseModel implements SerializableWire; } -export interface PublicKeyContractParameterJSON extends ContractParameterDeclarationJSON { +export interface PublicKeyContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'PublicKey'; readonly value: string; } -export interface SignatureContractParameterJSON extends ContractParameterDeclarationJSON { +export interface SignatureContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Signature'; readonly value: string; } -export interface StringContractParameterJSON extends ContractParameterDeclarationJSON { +export interface StringContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'String'; readonly value: string; } -export interface VoidContractParameterJSON extends ContractParameterDeclarationJSON { +export interface VoidContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Void'; } @@ -191,16 +191,16 @@ export type AttributeTypeJSON = keyof typeof AttributeTypeModel; export type VerifyResultJSON = keyof typeof VerifyResultModel; // TODO: check that this can be removed. or rename to "TransactionDataJSON" ? -// export interface InvocationDataJSON { -// readonly result: InvocationResultJSON; -// readonly asset?: AssetJSON; -// readonly contracts: readonly ContractJSON[]; -// readonly deletedContractHashes: readonly string[]; -// readonly migratedContractHashes: ReadonlyArray; -// readonly voteUpdates: ReadonlyArray]>; -// readonly actions: readonly ActionJSON[]; -// readonly storageChanges: readonly StorageChangeJSON[]; -// } +export interface InvocationDataJSON { + readonly result: InvocationResultJSON; + // readonly asset?: AssetJSON; + readonly contracts: readonly ContractJSON[]; + readonly deletedContractHashes: readonly string[]; + readonly migratedContractHashes: ReadonlyArray; + readonly voteUpdates: ReadonlyArray]>; + readonly actions: readonly ActionJSON[]; + readonly storageChanges: readonly StorageChangeJSON[]; +} export interface TransactionJSON { readonly hash: string; @@ -226,24 +226,25 @@ export interface TransactionReceiptJSON { export interface ConfirmedTransactionJSON extends TransactionJSON, TransactionReceiptJSON {} -export type WildcardContainerJSON = readonly T[] | '*'; +export type Wildcard = '*'; +export type WildcardContainerJSON = readonly T[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; - readonly parameters: readonly ContractParameterDeclarationJSON[]; + readonly parameters: readonly ContractParameterDefinitionJSON[]; + readonly offset?: number; readonly returnType: ContractParameterTypeJSON; } -export interface ContractEventJSON { +export interface ContractEventDescriptorJSON { readonly name: string; - readonly parameters: readonly ContractParameterDeclarationJSON[]; + readonly parameters: readonly ContractParameterDefinitionJSON[]; } export interface ContractABIJSON { readonly hash: string; - readonly entryPoint: ContractMethodDescriptorJSON; readonly methods: readonly ContractMethodDescriptorJSON[]; - readonly events: readonly ContractEventJSON[]; + readonly events: readonly ContractEventDescriptorJSON[]; } export interface ContractGroupJSON { @@ -251,13 +252,15 @@ export interface ContractGroupJSON { readonly signature: string; } -export type ContractPermissionDescriptorJSON = string | '*'; +export type ContractPermissionDescriptorJSON = string; export interface ContractPermissionJSON { readonly contract: ContractPermissionDescriptorJSON; - readonly methods: ReadonlyArray>; + readonly methods: WildcardContainerJSON; } +export type Extra = JSON; + export interface ContractManifestJSON { readonly abi: ContractABIJSON; readonly groups: readonly ContractGroupJSON[]; @@ -268,6 +271,13 @@ export interface ContractManifestJSON { readonly storage: boolean; readonly payable: boolean; }; + readonly supportedStandards: readonly string[]; + readonly extra?: Extra; +} + +export interface ContractParameterDefinitionJSON { + readonly name: string; + readonly type: ContractParameterTypeJSON; } export interface ContractJSON { diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 9307f588e4..f0dbd14c54 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -4,8 +4,8 @@ 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 { ConsensusDataJSON } from './models'; +import { ECPoint, UInt160, UInt160Hex, UInt256 } from './common'; +import { Wildcard } from './models'; /** * Base58 encoded string that represents a NEO address. @@ -225,7 +225,9 @@ export interface Witness { readonly verification: BufferString; } -// TODO: add description +/** + * TODO: document this + */ export interface Signer { /** * Hash160 Address of the `Signer`. @@ -372,7 +374,7 @@ export interface ConsensusData { */ readonly primaryIndex: number; /** - * Unique number in order to ensure the hash for this `ConcensusData` is unique. + * Unique number in order to ensure the hash for this `ConsensusData` is unique. */ readonly nonce: BufferString; } @@ -972,7 +974,7 @@ export interface ForwardOptions = Event> { /** * Additional events that may be emitted due to forwarding arguments to another smart contract method. */ - readonly events?: readonly ContractEvent[]; + readonly events?: readonly ContractEventDescriptor[]; readonly __tag?: TEvent; } @@ -1377,31 +1379,31 @@ 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. */ export interface ContractMethodDescriptor { /** - * Name of the function + * Name of the method. */ readonly name: string; /** - * Parameters of the function. + * Parameters of the method. */ - readonly parameters: readonly ContractParameterDeclaration[]; + readonly parameters: readonly ContractParameterDefinition[]; /** - * Return type of the function. + * Return type of the method. */ readonly returnType: ContractParameterType; /** - * `true` if the function is constant or read-only. + * TODO: fill out description here */ - // readonly constant?: boolean; // TODO: check + readonly offset?: number; } /** * Event specification in the `ABI` of a smart contract. */ -export interface ContractEvent { +export interface ContractEventDescriptor { /** * Name of the event. */ @@ -1409,7 +1411,7 @@ export interface ContractEvent { /** * Parameters of the event. */ - readonly parameters: readonly ContractParameterDeclaration[]; + readonly parameters: readonly ContractParameterDefinition[]; } /** @@ -1422,10 +1424,6 @@ export interface ContractABI { * Script hash of the contract. */ readonly hash: UInt160; - /** - * Entrypoint is an ABIFunction whcih describes the entrypoint of the contract. - */ - readonly entryPoint: ContractMethodDescriptor; /** * Specification of the smart contract methods. */ @@ -1433,11 +1431,11 @@ export interface ContractABI { /** * Specification of the smart contract events. */ - readonly events: readonly ContractEvent[]; + readonly events: readonly ContractEventDescriptor[]; } /** - * A ConctractGroup represents a set of mutuallly trusted contracts. A contract will allow any contract in the same + * 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. */ @@ -1474,26 +1472,42 @@ export enum ContractFeatures { HasStoragePayable = 0x05, } -export interface WildcardContainer { - readonly data?: readonly T[]; -} +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 interface ContractPermissionDescriptor { - readonly hashOrGroup: UInt160 | ECPoint | undefined; - // TODO: what do do here? WIP? - // readonly isHash: () => boolean; - // readonly isGroup: () => boolean; - // readonly isWildcard: () => boolean; + readonly hashOrGroup: UInt160 | ECPoint | Wildcard; + /** + * Returns true if the permission is for a `UInt160`. + */ + readonly isHash: () => boolean; + /** + * Returns true if the permission is for a `ECPoint`, representing a `ContractGroup`. + */ + readonly isGroup: () => boolean; + /** + * Returns true if the permission is a wildcard (*), meaning any group or address can call this `Contract`. + */ + readonly isWildcard: () => boolean; } /** * Describes which contracts may be invoked and which methods are called. */ -export interface ContractPermissions { +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; - // TODO: what to do with isAllowed? - // readonly isAllowed: (manifest: ContractManifest, method: string) => boolean; } /** @@ -1504,15 +1518,15 @@ export interface ContractManifest { /** * Max length for a valid Contract Manifest. */ - // readonly maxLength: 2048; // TODO: what to do here? + readonly maxLength: 4096; // TODO: abstract this /** - * Size of serialized contract. + * Get the `Contract`'s hash. */ - // readonly size: () => number; // TODO: what to do here? + readonly hash: UInt160; /** - * Contract hash. + * Get the `Contract`'s hash as a hex string. */ - // readonly hash: () => UInt160; // TODO: what to do here? + readonly hashHex: UInt160Hex; /** * Set of mutually trusted contracts. */ @@ -1524,6 +1538,10 @@ export interface ContractManifest { readonly storage: boolean; readonly payable: boolean; }; + /** + * 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. @@ -1532,7 +1550,7 @@ export interface ContractManifest { /** * Describes which contracts may be invoked and which methods are called. */ - readonly permissions: readonly ContractPermissions[]; + readonly permissions: readonly ContractPermission[]; /** * The trusts field is an array containing a set of contract hashes or group of public keys. */ @@ -1541,6 +1559,18 @@ export interface ContractManifest { * The safeMethods field is an array containing a set of safe methods. */ readonly safeMethods: WildcardContainer; + /** + * Custom user-defined JSON object. + */ + readonly extra: JSON; + /** + * True if the `Contract` modified blockchain storage. + */ + readonly hasStorage: boolean; + /** + * True if the `Contract` can receive native assets. + */ + readonly payable: boolean; } declare const OpaqueTagSymbol: unique symbol; @@ -1652,9 +1682,9 @@ export type Return = */ export interface Contract { /** - * `AddressString` of this `Contract`. + * The `Contract`s ID. */ - readonly address: string; // TODO: check this shouldn't be AddressString + readonly id: number; /** * `Contract` code. */ @@ -1663,12 +1693,29 @@ export interface Contract { * The `Contract`'s manifest. */ readonly manifest: ContractManifest; + /** + * True if the `Contract` modified blockchain storage. + */ + readonly hasStorage: boolean; + /** + * True if the `Contract` can receive native assets. + */ + readonly payable: boolean; } /* BEGIN LOW-LEVEL API */ -export interface ContractParameterDeclaration { +/** + * Describes the details of a contract parameter. + */ +export interface ContractParameterDefinition { + /** + * 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; } @@ -1678,7 +1725,7 @@ export interface ContractParameterDeclaration { * @see ContractParameter * @see SignatureString */ -export interface SignatureContractParameter extends ContractParameterDeclaration { +export interface SignatureContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `SignatureContractParameter` from other `ContractParameter` object types. */ @@ -1694,7 +1741,7 @@ export interface SignatureContractParameter extends ContractParameterDeclaration * * @see ContractParameter */ -export interface BooleanContractParameter extends ContractParameterDeclaration { +export interface BooleanContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `BooleanContractParameter` from other `ContractParameter` object types. */ @@ -1713,7 +1760,7 @@ export interface BooleanContractParameter extends ContractParameterDeclaration { * * @see ContractParameter */ -export interface IntegerContractParameter extends ContractParameterDeclaration { +export interface IntegerContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `IntegerContractParameter` from other `ContractParameter` object types. */ @@ -1730,7 +1777,7 @@ export interface IntegerContractParameter extends ContractParameterDeclaration { * @see ContractParameter * @see AddressString */ -export interface AddressContractParameter extends ContractParameterDeclaration { +export interface AddressContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `AddressContractParameter` from other `ContractParameter` object types. */ @@ -1747,7 +1794,7 @@ export interface AddressContractParameter extends ContractParameterDeclaration { * @see ContractParameter * @see UInt160 */ -export interface Hash160ContractParameter extends ContractParameterDeclaration { +export interface Hash160ContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `Hash160ContractParameter` from other `ContractParameter` object types. */ @@ -1764,7 +1811,7 @@ export interface Hash160ContractParameter extends ContractParameterDeclaration { * @see ContractParameter * @see Hash256String */ -export interface Hash256ContractParameter extends ContractParameterDeclaration { +export interface Hash256ContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `Hash256ContractParameter` from other `ContractParameter` object types. */ @@ -1781,7 +1828,7 @@ export interface Hash256ContractParameter extends ContractParameterDeclaration { * @see ContractParameter * @see BufferString */ -export interface BufferContractParameter extends ContractParameterDeclaration { +export interface BufferContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `BufferContractParameter` from other `ContractParameter` object types. */ @@ -1798,7 +1845,7 @@ export interface BufferContractParameter extends ContractParameterDeclaration { * @see ContractParameter * @see PublicKeyString */ -export interface PublicKeyContractParameter extends ContractParameterDeclaration { +export interface PublicKeyContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `PublicKeyContractParameter` from other `ContractParameter` object types. */ @@ -1814,7 +1861,7 @@ export interface PublicKeyContractParameter extends ContractParameterDeclaration * * @see ContractParameter */ -export interface StringContractParameter extends ContractParameterDeclaration { +export interface StringContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `StringContractParameter` from other `ContractParameter` object types. */ @@ -1830,7 +1877,7 @@ export interface StringContractParameter extends ContractParameterDeclaration { * * @see ContractParameter */ -export interface ArrayContractParameter extends ContractParameterDeclaration { +export interface ArrayContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `ArrayContractParameter` from other `ContractParameter` object types. */ @@ -1846,7 +1893,7 @@ export interface ArrayContractParameter extends ContractParameterDeclaration { * * @see ContractParameter */ -export interface MapContractParameter extends ContractParameterDeclaration { +export interface MapContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `MapContractParameter` from other `ContractParameter` object types. */ @@ -1864,7 +1911,7 @@ export interface MapContractParameter extends ContractParameterDeclaration { * * @see ContractParameter */ -export interface InteropInterfaceContractParameter extends ContractParameterDeclaration { +export interface InteropInterfaceContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `InteropInterfaceContractParameter` from other `ContractParameter` object types. */ @@ -1876,7 +1923,7 @@ export interface InteropInterfaceContractParameter extends ContractParameterDecl * * @see ContractParameter */ -export interface VoidContractParameter extends ContractParameterDeclaration { +export interface VoidContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `VoidContractParameter` from other `ContractParameter` object types. */ @@ -1905,6 +1952,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']; 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..0d04c7087d --- /dev/null +++ b/packages/neo-one-client-full-common/src/__data__/models.ts @@ -0,0 +1,119 @@ +import { common, ContractParameterTypeModel, ECPoint, SignatureString, UInt160 } from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import { + ContractABIModel, + ContractEventDescriptorModel, + ContractFeaturesModel, + ContractGroupModel, + ContractManifestModel, + ContractMethodDescriptorModel, + ContractModel, + ContractParameterDefinitionModel, + ContractPermissionDescriptorModel, + ContractPermissionModel, +} from '../models'; + +export const contractParamDefinitionModel = { + 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', +) => new ContractMethodDescriptorModel({ name, parameters, returnType }); + +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: SignatureString = 'ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67', +) => 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()], + features: ContractFeaturesModel = ContractFeaturesModel.HasStoragePayable, + abi: ContractABIModel = contractAbiModel(), + permissions: readonly ContractPermissionModel[] = [contractPermissionModel('uint160', ['method1'])], + trusts: readonly UInt160[] = [common.bufferToUInt160(Buffer.alloc(20, 1))], + safeMethods: readonly string[] = ['method1', 'method2'], + supportedStandards: readonly string[] = [], +) => new ContractManifestModel({ groups, features, supportedStandards, abi, permissions, trusts, safeMethods }); + +export const contractModel = ( + id = 1, + script: Buffer = Buffer.alloc(25), + manifest: ContractManifestModel = contractManifestModel(), +) => new ContractModel({ 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/ContractFeaturesModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts new file mode 100644 index 0000000000..1fd5c61650 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts @@ -0,0 +1,46 @@ +import { assertContractFeature, getContractProperties, HasPayable, HasStorage } from '../../models'; + +describe('ContractFeaturesModel', () => { + test('isContractFeatures', () => { + expect(assertContractFeature(0)).toEqual(0); + expect(assertContractFeature(1)).toEqual(1); + expect(assertContractFeature(4)).toEqual(4); + expect(assertContractFeature(5)).toEqual(5); + + const assertThrowNeg1 = () => assertContractFeature(-1); + expect(assertThrowNeg1).toThrowErrorMatchingSnapshot(); + const assertThrow2 = () => assertContractFeature(2); + expect(assertThrow2).toThrowErrorMatchingSnapshot(); + const assertThrow3 = () => assertContractFeature(3); + expect(assertThrow3).toThrowErrorMatchingSnapshot(); + const assertThrow6 = () => assertContractFeature(6); + expect(assertThrow6).toThrowErrorMatchingSnapshot(); + }); + + test('getContractProperties', () => { + expect(getContractProperties({ hasStorage: false, payable: false })).toEqual(0); + expect(getContractProperties({ hasStorage: false, payable: true })).toEqual(4); + expect(getContractProperties({ hasStorage: true, payable: false })).toEqual(1); + expect(getContractProperties({ hasStorage: true, payable: true })).toEqual(5); + }); + + test('HasStorage', () => { + expect(HasStorage.has(0)).toEqual(false); + expect(HasStorage.has(1)).toEqual(true); + expect(HasStorage.has(2)).toEqual(false); + expect(HasStorage.has(3)).toEqual(false); + expect(HasStorage.has(4)).toEqual(false); + expect(HasStorage.has(5)).toEqual(true); + expect(HasStorage.has(6)).toEqual(false); + }); + + test('HasPayable', () => { + expect(HasPayable.has(0)).toEqual(false); + expect(HasPayable.has(1)).toEqual(false); + expect(HasPayable.has(2)).toEqual(false); + expect(HasPayable.has(3)).toEqual(false); + expect(HasPayable.has(4)).toEqual(true); + expect(HasPayable.has(5)).toEqual(true); + expect(HasPayable.has(6)).toEqual(false); + }); +}); 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..499977ad2f --- /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__/ContractFeaturesModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap new file mode 100644 index 0000000000..34676b5689 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractFeaturesModel isContractFeatures 1`] = `"Expected contract feature, found: -1"`; + +exports[`ContractFeaturesModel isContractFeatures 2`] = `"Expected contract feature, found: 2"`; + +exports[`ContractFeaturesModel isContractFeatures 3`] = `"Expected contract feature, found: 3"`; + +exports[`ContractFeaturesModel isContractFeatures 4`] = `"Expected contract feature, found: 6"`; 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..4a417d4526 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractManifestModel.test.ts.snap @@ -0,0 +1,60 @@ +// 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, + "features": Object { + "payable": true, + "storage": true, + }, + "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/contract/ContractFeaturesModel.ts b/packages/neo-one-client-full-common/src/models/contract/ContractFeaturesModel.ts new file mode 100644 index 0000000000..fca7fd9d26 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/ContractFeaturesModel.ts @@ -0,0 +1,48 @@ +import { InvalidContractFeatureError } from '../../errors'; + +export enum ContractFeaturesModel { + NoProperty = 0x00, + HasStorage = 0x01, + Payable = 0x04, + HasStoragePayable = 0x05, +} + +// tslint:disable-next-line variable-name +export const HasStorage = new Set([ContractFeaturesModel.HasStorage, ContractFeaturesModel.HasStoragePayable]); + +// tslint:disable-next-line variable-name +export const HasPayable = new Set([ContractFeaturesModel.Payable, ContractFeaturesModel.HasStoragePayable]); + +const isContractFeature = (value: number): value is ContractFeaturesModel => + // tslint:disable-next-line strict-type-predicates + ContractFeaturesModel[value] !== undefined; + +export const assertContractFeature = (value: number): ContractFeaturesModel => { + if (isContractFeature(value)) { + return value; + } + + throw new InvalidContractFeatureError(value); +}; + +export const getContractProperties = ({ + hasStorage, + payable, +}: { + readonly hasStorage: boolean; + readonly payable: boolean; +}): ContractFeaturesModel => { + if (hasStorage && payable) { + return ContractFeaturesModel.HasStoragePayable; + } + + if (hasStorage) { + return ContractFeaturesModel.HasStorage; + } + + if (payable) { + return ContractFeaturesModel.Payable; + } + + return ContractFeaturesModel.NoProperty; +}; diff --git a/packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts b/packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts new file mode 100644 index 0000000000..842fb92083 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts @@ -0,0 +1,102 @@ +import { + BinaryWriter, + common, + ContractManifestJSON, + createSerializeWire, + Extra, + SerializableJSON, + SerializableWire, + SerializeWire, + UInt160, + UInt160Hex, + utils, + WildcardContainer, +} from '@neo-one/client-common'; +import { ContractGroupModel, ContractPermissionModel } from '../permissions'; +import { ContractABIModel } from './abi'; +import { ContractFeaturesModel, HasPayable, HasStorage } from './ContractFeaturesModel'; + +export interface ContractManifestModelAdd< + TContractABI extends ContractABIModel = ContractABIModel, + TContractGroup extends ContractGroupModel = ContractGroupModel, + TContractPermission extends ContractPermissionModel = ContractPermissionModel +> { + readonly groups: readonly TContractGroup[]; + readonly features: ContractFeaturesModel; + readonly supportedStandards: readonly string[]; + readonly abi: TContractABI; + readonly permissions: readonly TContractPermission[]; + readonly trusts: readonly UInt160[]; + readonly safeMethods: readonly string[]; + readonly extra?: Extra; +} + +export class ContractManifestModel< + TContractABI extends ContractABIModel = ContractABIModel, + TContractGroup extends ContractGroupModel = ContractGroupModel, + TContractPermission extends ContractPermissionModel = ContractPermissionModel +> implements SerializableWire, SerializableJSON { + public get hash(): UInt160 { + return this.hashInternal(); + } + + public get hashHex(): UInt160Hex { + return this.hashHexInternal(); + } + public readonly maxLength = common.MAX_MANIFEST_LENGTH; + public readonly groups: readonly TContractGroup[]; + public readonly features: ContractFeaturesModel; + public readonly supportedStandards: readonly string[]; + public readonly abi: TContractABI; + public readonly permissions: readonly TContractPermission[]; + public readonly trusts: WildcardContainer; + public readonly safeMethods: WildcardContainer; + public readonly extra: Extra | undefined; + public readonly hasStorage: boolean; + public readonly payable: boolean; + 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, + features, + supportedStandards, + abi, + permissions, + trusts, + safeMethods, + extra, + }: ContractManifestModelAdd) { + this.groups = groups; + this.features = features; + this.supportedStandards = supportedStandards; + this.abi = abi; + this.permissions = permissions; + this.trusts = trusts; + this.safeMethods = safeMethods; + this.hasStorage = HasStorage.has(features); + this.payable = HasPayable.has(features); + this.extra = extra; + } + + public serializeJSON(): ContractManifestJSON { + return { + groups: this.groups.map((group) => group.serializeJSON()), + features: { + storage: this.hasStorage, + payable: this.payable, + }, + 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) => common.uInt160ToString(trust)), + safeMethods: this.safeMethods, + 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/contract/ContractModel.ts b/packages/neo-one-client-full-common/src/models/contract/ContractModel.ts new file mode 100644 index 0000000000..53e3ced2a4 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/ContractModel.ts @@ -0,0 +1,32 @@ +import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire } from '@neo-one/client-common'; +import { ContractManifestModel } from './ContractManifestModel'; + +export interface ContractModelAdd { + readonly id: number; + readonly script: Buffer; + readonly manifest: TContractManifest; +} + +export class ContractModel + implements SerializableWire { + public readonly id: number; + public readonly script: Buffer; + public readonly manifest: TContractManifest; + public readonly hasStorage: boolean; + public readonly payable: boolean; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ script, manifest, id }: ContractModelAdd) { + this.id = id; + this.script = script; + this.manifest = manifest; + this.hasStorage = manifest.hasStorage; + this.payable = manifest.payable; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt32LE(this.id); + writer.writeVarBytesLE(this.script); + this.manifest.serializeWireBase(writer); + } +} diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts b/packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts new file mode 100644 index 0000000000..1126069eee --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts @@ -0,0 +1,35 @@ +import { common, ContractABIJSON, 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: common.uInt160ToString(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/contract/abi/ContractEventDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/contract/abi/ContractEventDescriptorModel.ts new file mode 100644 index 0000000000..fe9e023e1f --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/abi/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/contract/abi/ContractMethodDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts new file mode 100644 index 0000000000..b69170acb1 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts @@ -0,0 +1,37 @@ +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; +} + +export class ContractMethodDescriptorModel< + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel +> extends ContractEventDescriptorModel + implements SerializableJSON { + public readonly returnType: ContractParameterTypeModel; + private readonly offset?: number; + + public constructor(options: ContractMethodDescriptorModelAdd) { + super(options); + this.returnType = options.returnType; + this.offset = options.offset; + } + + public serializeJSON(): ContractMethodDescriptorJSON { + return { + ...super.serializeJSON(), + offset: this.offset, + returnType: toJSONContractParameterType(this.returnType), + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/ContractParameterDefinitionModel.ts b/packages/neo-one-client-full-common/src/models/contract/abi/ContractParameterDefinitionModel.ts new file mode 100644 index 0000000000..c424db1e25 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/abi/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/contract/abi/index.ts b/packages/neo-one-client-full-common/src/models/contract/abi/index.ts new file mode 100644 index 0000000000..3eeb5c14bf --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/abi/index.ts @@ -0,0 +1,4 @@ +export * from './ContractABIModel'; +export * from './ContractEventDescriptorModel'; +export * from './ContractMethodDescriptorModel'; +export * from './ContractParameterDefinitionModel'; diff --git a/packages/neo-one-client-full-common/src/models/contract/index.ts b/packages/neo-one-client-full-common/src/models/contract/index.ts new file mode 100644 index 0000000000..65c8a004ba --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/contract/index.ts @@ -0,0 +1,4 @@ +export * from './ContractFeaturesModel'; +export * from './ContractManifestModel'; +export * from './ContractModel'; +export * from './abi'; 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 b77b2e1b8e..aade65cb56 100644 --- a/packages/neo-one-client-full-common/src/models/index.ts +++ b/packages/neo-one-client-full-common/src/models/index.ts @@ -1,3 +1,3 @@ export * from './BaseState'; -export * from './ContractModel'; -export * from './ContractPropertyStateModel'; +export * from './contract'; +export * from './permissions'; diff --git a/packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts b/packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts new file mode 100644 index 0000000000..4f9de18693 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts @@ -0,0 +1,23 @@ +import { common, ContractGroupJSON, ECPoint, SerializableJSON, SignatureString } from '@neo-one/client-common'; + +export interface ContractGroupModelAdd { + readonly publicKey: ECPoint; + readonly signature: SignatureString; +} + +export class ContractGroupModel implements SerializableJSON { + public readonly publicKey: ECPoint; + public readonly signature: SignatureString; + + public constructor({ publicKey, signature }: ContractGroupModelAdd) { + this.publicKey = publicKey; + this.signature = signature; + } + + public serializeJSON(): ContractGroupJSON { + return { + publicKey: common.ecPointToString(this.publicKey), + signature: this.signature, + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts new file mode 100644 index 0000000000..2e9f36ca19 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/permissions/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 isHash(): boolean { + return common.isWildcard(this.hashOrGroup) ? false : common.isUInt160(this.hashOrGroup); + } + + public 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/permissions/ContractPermissionModel.ts b/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionModel.ts new file mode 100644 index 0000000000..a7a495da0b --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/permissions/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/permissions/index.ts b/packages/neo-one-client-full-common/src/models/permissions/index.ts new file mode 100644 index 0000000000..9724d918e2 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/permissions/index.ts @@ -0,0 +1,3 @@ +export * from './ContractGroupModel'; +export * from './ContractPermissionDescriptorModel'; +export * from './ContractPermissionModel'; From acddb5a26b17a6b03e2b607ecef93ba8ac1fcbad Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 31 Aug 2020 11:25:09 -0700 Subject: [PATCH 093/141] feat(rpc): first round of RPC updates (#2148) --- .../neo-one-client-common/src/GasToken.ts | 1 + .../src/NativeContract.ts | 17 +- .../neo-one-client-common/src/NeoToken.ts | 1 + .../src/PolicyContract.ts | 7 + packages/neo-one-client-common/src/index.ts | 2 + .../neo-one-client-common/src/models/types.ts | 11 +- packages/neo-one-client-common/src/types.ts | 1 + packages/neo-one-csharp-core/package.json | 1 + packages/neo-one-csharp-core/src/Node.ts | 36 +++ .../src/TransactionData.ts | 148 +++++++++ packages/neo-one-csharp-core/src/index.ts | 2 + .../src/transaction/Transaction.ts | 11 +- .../neo-one-node-blockchain/src/Blockchain.ts | 2 +- .../src/__tests__/Blockchain.test.ts | 2 +- .../neo-one-node-core/src/TransactionData.ts | 148 +++++++++ packages/neo-one-node-core/src/index.ts | 1 + .../src/transaction/Transaction.ts | 3 +- packages/neo-one-node-protocol/src/Node.ts | 11 +- .../src/createHandler.ts | 298 ++++++++++++------ 19 files changed, 596 insertions(+), 107 deletions(-) create mode 100644 packages/neo-one-client-common/src/GasToken.ts create mode 100644 packages/neo-one-client-common/src/NeoToken.ts create mode 100644 packages/neo-one-client-common/src/PolicyContract.ts create mode 100644 packages/neo-one-csharp-core/src/Node.ts create mode 100644 packages/neo-one-csharp-core/src/TransactionData.ts create mode 100644 packages/neo-one-node-core/src/TransactionData.ts diff --git a/packages/neo-one-client-common/src/GasToken.ts b/packages/neo-one-client-common/src/GasToken.ts new file mode 100644 index 0000000000..115c515e72 --- /dev/null +++ b/packages/neo-one-client-common/src/GasToken.ts @@ -0,0 +1 @@ +export class GasToken {} diff --git a/packages/neo-one-client-common/src/NativeContract.ts b/packages/neo-one-client-common/src/NativeContract.ts index cffa962621..acd3e0d24c 100644 --- a/packages/neo-one-client-common/src/NativeContract.ts +++ b/packages/neo-one-client-common/src/NativeContract.ts @@ -1,12 +1,19 @@ import { common, UInt160 } from './common'; import { crypto } from './crypto'; +import { GasToken } from './GasToken'; import { scriptHashToAddress } from './helpers'; +import { NeoToken } from './NeoToken'; +import { PolicyContract } from './PolicyContract'; import { ScriptBuilder } from './ScriptBuilder'; import { AddressString } from './types'; -export type NativeContractServiceName = 'Neo.Native.Policy' | 'Neo.Native.Tokens.GAS' | 'Neo.Native.Tokens.NEO'; +export type NativeContractServiceName = 'Policy' | 'GAS' | 'NEO'; + +export class NativeContract { + public static readonly NEO: NeoToken; + public static readonly GAS: GasToken; + public static readonly Policy: PolicyContract; -class NativeContract { public readonly serviceName: NativeContractServiceName; public readonly script: Buffer; public readonly scriptHex: string; @@ -26,9 +33,3 @@ class NativeContract { this.address = scriptHashToAddress(this.scriptHash); } } - -export const NativeContracts = { - NEO: new NativeContract('Neo.Native.Tokens.NEO'), - GAS: new NativeContract('Neo.Native.Tokens.GAS'), - Policy: new NativeContract('Neo.Native.Policy'), -}; diff --git a/packages/neo-one-client-common/src/NeoToken.ts b/packages/neo-one-client-common/src/NeoToken.ts new file mode 100644 index 0000000000..7850ad9da5 --- /dev/null +++ b/packages/neo-one-client-common/src/NeoToken.ts @@ -0,0 +1 @@ +export class NeoToken {} diff --git a/packages/neo-one-client-common/src/PolicyContract.ts b/packages/neo-one-client-common/src/PolicyContract.ts new file mode 100644 index 0000000000..f8d78d8455 --- /dev/null +++ b/packages/neo-one-client-common/src/PolicyContract.ts @@ -0,0 +1,7 @@ +import { NativeContract } from './NativeContract'; + +export class PolicyContract extends NativeContract { + public constructor() { + super('Policy'); + } +} diff --git a/packages/neo-one-client-common/src/index.ts b/packages/neo-one-client-common/src/index.ts index 6726a1d057..28dd9d9da2 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 './NativeContract'; +export * from './GasToken'; +export * from './NeoToken'; export * from './paramUtils'; export * from './BaseScriptBuilder'; export * from './ScriptBuilder'; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 802d4b6256..49ce5adc51 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -190,7 +190,7 @@ export type AttributeTypeJSON = keyof typeof AttributeTypeModel; export type VerifyResultJSON = keyof typeof VerifyResultModel; -// TODO: check that this can be removed. or rename to "TransactionDataJSON" ? +// TODO: what extra invocation data are we going to include now? export interface InvocationDataJSON { readonly result: InvocationResultJSON; // readonly asset?: AssetJSON; @@ -217,8 +217,14 @@ export interface TransactionJSON { readonly witnesses: readonly WitnessJSON[]; } +export interface TransactionWithInvocationDataJSON extends TransactionJSON { + readonly script: string; + readonly gas: string; + readonly invocationData?: InvocationDataJSON | undefined; +} + export interface TransactionReceiptJSON { - readonly blockIndex: number; // TODO: check this + readonly blockIndex: number; readonly blockHash: string; readonly transactionIndex: number; readonly globalIndex: string; @@ -281,6 +287,7 @@ export interface ContractParameterDefinitionJSON { } export interface ContractJSON { + readonly id: number; readonly hash: string; readonly script: string; readonly manifest: ContractManifestJSON; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index f0dbd14c54..af597bd488 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -2290,6 +2290,7 @@ export type ParamJSON = * Constant settings used to initialize the client APIs. */ export interface NetworkSettings { + // TODO: remove/replace this readonly issueGASFee: BigNumber; } diff --git a/packages/neo-one-csharp-core/package.json b/packages/neo-one-csharp-core/package.json index f44e43f98d..dac8c8c7f3 100644 --- a/packages/neo-one-csharp-core/package.json +++ b/packages/neo-one-csharp-core/package.json @@ -13,6 +13,7 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", "@neo-one/utils": "^2.6.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-csharp-core/src/Node.ts b/packages/neo-one-csharp-core/src/Node.ts new file mode 100644 index 0000000000..29c204ba9e --- /dev/null +++ b/packages/neo-one-csharp-core/src/Node.ts @@ -0,0 +1,36 @@ +import { VersionJSON } from '@neo-one/client-common'; +import { Block } from './Block'; +import { Blockchain, VerifyTransactionResult } from './Blockchain'; +import { Endpoint } from './net'; +import { ConsensusPayload } from './payload'; +import { Transaction } from './transaction'; + +export interface Consensus { + readonly runConsensusNow: () => Promise; + readonly fastForwardOffset: (seconds: number) => Promise; + readonly fastForwardToTime: (seconds: number) => Promise; + readonly nowSeconds: () => number; + readonly pause: () => Promise; + readonly reset: () => Promise; + readonly resume: () => Promise; +} + +export interface RelayTransactionResult { + readonly verifyResult?: VerifyTransactionResult; +} + +export interface Node { + readonly version: VersionJSON; + readonly blockchain: Blockchain; + readonly relayTransaction: ( + transaction: Transaction, + options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, + ) => Promise; + readonly relayConsensusPayload: (payload: ConsensusPayload) => void; + readonly relayBlock: (block: Block) => Promise; + readonly connectedPeers: readonly Endpoint[]; + readonly memPool: { readonly [hash: string]: Transaction }; + readonly syncMemPool: () => void; + readonly consensus: Consensus | undefined; + readonly reset: () => Promise; +} diff --git a/packages/neo-one-csharp-core/src/TransactionData.ts b/packages/neo-one-csharp-core/src/TransactionData.ts new file mode 100644 index 0000000000..62bd74fbc0 --- /dev/null +++ b/packages/neo-one-csharp-core/src/TransactionData.ts @@ -0,0 +1,148 @@ +import { BinaryWriter, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BaseState } from '@neo-one/client-full-common'; +import { BN } from 'bn.js'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, + SerializeWire, +} from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface TransactionDataAdd { + readonly version?: number; + readonly hash: UInt256; + readonly blockHash: UInt256; + readonly startHeight: number; + readonly index: number; + readonly globalIndex: BN; + readonly endHeights?: { readonly [index: number]: number }; + readonly claimed?: { readonly [index: number]: boolean }; +} + +export interface TransactionDataUpdate { + readonly endHeights?: { readonly [index: number]: number }; + readonly claimed?: { readonly [index: number]: boolean }; +} + +export interface TransactionDataKey { + readonly hash: UInt256; +} + +export class TransactionData extends BaseState implements SerializableWire { + public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): TransactionData { + const version = reader.readUInt8(); + const hash = reader.readUInt256(); + const blockHash = reader.readUInt256(); + const startHeight = reader.readUInt32LE(); + const index = reader.readUInt32LE(); + const globalIndex = reader.readUInt64LE(); + const endHeights = reader.readObject(() => { + const key = reader.readUInt32LE(); + const value = reader.readUInt32LE(); + + return { key, value }; + }); + const claimed = reader.readObject(() => { + const key = reader.readUInt32LE(); + const value = reader.readBoolean(); + + return { key, value }; + }); + + return new this({ + version, + hash, + blockHash, + startHeight, + index, + globalIndex, + endHeights, + claimed, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): TransactionData { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly hash: UInt256; + public readonly blockHash: UInt256; + public readonly startHeight: number; + public readonly index: number; + public readonly globalIndex: BN; + public readonly endHeights: { + readonly [index: number]: number; + }; + public readonly claimed: { + readonly [index: number]: boolean; + }; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal: () => number; + + public constructor({ + version, + hash, + blockHash, + startHeight, + index, + globalIndex, + endHeights = {}, + claimed = {}, + }: TransactionDataAdd) { + super({ version }); + this.hash = hash; + this.blockHash = blockHash; + this.startHeight = startHeight; + this.index = index; + this.globalIndex = globalIndex; + this.endHeights = endHeights; + this.claimed = claimed; + this.sizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfObject(this.endHeights, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt32LE) + + IOHelper.sizeOfObject(this.claimed, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfBoolean), + ); + } + + public get size(): number { + return this.sizeInternal(); + } + + public update({ endHeights = this.endHeights, claimed = this.claimed }: TransactionDataUpdate): TransactionData { + return new TransactionData({ + version: this.version, + hash: this.hash, + blockHash: this.blockHash, + startHeight: this.startHeight, + index: this.index, + globalIndex: this.globalIndex, + endHeights, + claimed, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt8(this.version); + writer.writeUInt256(this.hash); + writer.writeUInt256(this.blockHash); + writer.writeUInt32LE(this.startHeight); + writer.writeUInt32LE(this.index); + writer.writeUInt64LE(this.globalIndex); + writer.writeObject(this.endHeights, (key, value) => { + writer.writeUInt32LE(key); + writer.writeUInt32LE(value); + }); + writer.writeObject(this.claimed, (key, value) => { + writer.writeUInt32LE(key); + writer.writeBoolean(value); + }); + } +} diff --git a/packages/neo-one-csharp-core/src/index.ts b/packages/neo-one-csharp-core/src/index.ts index ef53e29c9f..af800b6ac9 100644 --- a/packages/neo-one-csharp-core/src/index.ts +++ b/packages/neo-one-csharp-core/src/index.ts @@ -15,3 +15,5 @@ export * from './Verifiable'; export * from './vm'; export * from './Witness'; export * from './CallFlags'; +export * from './TransactionData'; +export * from './Node'; diff --git a/packages/neo-one-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts index ac31760b49..ef9059aeea 100644 --- a/packages/neo-one-csharp-core/src/transaction/Transaction.ts +++ b/packages/neo-one-csharp-core/src/transaction/Transaction.ts @@ -8,6 +8,7 @@ import { TransactionJSON, TransactionModel, TransactionModelAdd, + TransactionWithInvocationDataJSON, UInt160, } from '@neo-one/client-common'; import { BN } from 'bn.js'; @@ -27,7 +28,8 @@ import { Attribute, deserializeAttribute } from './attributes'; export type TransactionAddUnsigned = Omit, 'witnesses'>; export type TransactionAdd = TransactionModelAdd; -export class Transaction extends TransactionModel +export class Transaction + extends TransactionModel implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { @@ -187,4 +189,11 @@ export class Transaction extends TransactionModel witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), }; } + + public async serializeJSONWithInvocationData( + _options: SerializeJSONContext, + ): Promise { + // TODO: Implement method similar to old InvocationTransaction.serializeJSON(), which includes extra invocation data + return Promise.reject(); + } } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index aa6b3868ce..7aec00934a 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,4 +1,4 @@ -import { common, crypto, ECPoint, ScriptBuilder, UInt160, VMState } from '@neo-one/client-common'; +import { common, crypto, ECPoint, ScriptBuilder, VMState } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Action, 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 64d44d4b9e..7ff3a2ad28 100644 --- a/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts +++ b/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts @@ -1,5 +1,5 @@ // tslint:disable no-any no-object-mutation -import { BooleanContractParameter, Transaction, Witness } from '@neo-one/node-core'; +import { Transaction, Witness } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { of as _of } from 'rxjs'; import { settings } from '../__data__'; diff --git a/packages/neo-one-node-core/src/TransactionData.ts b/packages/neo-one-node-core/src/TransactionData.ts new file mode 100644 index 0000000000..62bd74fbc0 --- /dev/null +++ b/packages/neo-one-node-core/src/TransactionData.ts @@ -0,0 +1,148 @@ +import { BinaryWriter, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BaseState } from '@neo-one/client-full-common'; +import { BN } from 'bn.js'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, + SerializeWire, +} from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface TransactionDataAdd { + readonly version?: number; + readonly hash: UInt256; + readonly blockHash: UInt256; + readonly startHeight: number; + readonly index: number; + readonly globalIndex: BN; + readonly endHeights?: { readonly [index: number]: number }; + readonly claimed?: { readonly [index: number]: boolean }; +} + +export interface TransactionDataUpdate { + readonly endHeights?: { readonly [index: number]: number }; + readonly claimed?: { readonly [index: number]: boolean }; +} + +export interface TransactionDataKey { + readonly hash: UInt256; +} + +export class TransactionData extends BaseState implements SerializableWire { + public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): TransactionData { + const version = reader.readUInt8(); + const hash = reader.readUInt256(); + const blockHash = reader.readUInt256(); + const startHeight = reader.readUInt32LE(); + const index = reader.readUInt32LE(); + const globalIndex = reader.readUInt64LE(); + const endHeights = reader.readObject(() => { + const key = reader.readUInt32LE(); + const value = reader.readUInt32LE(); + + return { key, value }; + }); + const claimed = reader.readObject(() => { + const key = reader.readUInt32LE(); + const value = reader.readBoolean(); + + return { key, value }; + }); + + return new this({ + version, + hash, + blockHash, + startHeight, + index, + globalIndex, + endHeights, + claimed, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): TransactionData { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly hash: UInt256; + public readonly blockHash: UInt256; + public readonly startHeight: number; + public readonly index: number; + public readonly globalIndex: BN; + public readonly endHeights: { + readonly [index: number]: number; + }; + public readonly claimed: { + readonly [index: number]: boolean; + }; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal: () => number; + + public constructor({ + version, + hash, + blockHash, + startHeight, + index, + globalIndex, + endHeights = {}, + claimed = {}, + }: TransactionDataAdd) { + super({ version }); + this.hash = hash; + this.blockHash = blockHash; + this.startHeight = startHeight; + this.index = index; + this.globalIndex = globalIndex; + this.endHeights = endHeights; + this.claimed = claimed; + this.sizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfObject(this.endHeights, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt32LE) + + IOHelper.sizeOfObject(this.claimed, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfBoolean), + ); + } + + public get size(): number { + return this.sizeInternal(); + } + + public update({ endHeights = this.endHeights, claimed = this.claimed }: TransactionDataUpdate): TransactionData { + return new TransactionData({ + version: this.version, + hash: this.hash, + blockHash: this.blockHash, + startHeight: this.startHeight, + index: this.index, + globalIndex: this.globalIndex, + endHeights, + claimed, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt8(this.version); + writer.writeUInt256(this.hash); + writer.writeUInt256(this.blockHash); + writer.writeUInt32LE(this.startHeight); + writer.writeUInt32LE(this.index); + writer.writeUInt64LE(this.globalIndex); + writer.writeObject(this.endHeights, (key, value) => { + writer.writeUInt32LE(key); + writer.writeUInt32LE(value); + }); + writer.writeObject(this.claimed, (key, value) => { + writer.writeUInt32LE(key); + writer.writeBoolean(value); + }); + } +} diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 9b120de783..cf049c6b52 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -22,6 +22,7 @@ export * from './Storage'; export * from './StorageFlags'; export * from './StorageItem'; export * from './TrimmedBlock'; +export * from './TransactionData'; export * from './Validator'; export * from './ValidatorsCount'; export * from './Witness'; diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index ac31760b49..29f365bd71 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -27,7 +27,8 @@ import { Attribute, deserializeAttribute } from './attributes'; export type TransactionAddUnsigned = Omit, 'witnesses'>; export type TransactionAdd = TransactionModelAdd; -export class Transaction extends TransactionModel +export class Transaction + extends TransactionModel implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index 3e585bdb86..32a939e824 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -1,4 +1,4 @@ -import { common, crypto, UInt256Hex, utils } from '@neo-one/client-common'; +import { common, crypto, UInt256Hex, utils, VersionJSON } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Consensus, ConsensusOptions } from '@neo-one/node-consensus'; import { @@ -124,6 +124,15 @@ interface PeerHealth { } export class Node implements INode { + public get version(): VersionJSON { + return { + tcpPort: this.externalPort, + wsPort: -1, + nonce: this.nonce, + useragent: this.userAgent, + }; + } + public get consensus(): Consensus | undefined { return this.mutableConsensus; } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 6dcb195b60..f637e0efb5 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,17 +1,20 @@ -import { common, crypto, JSONHelper, RelayTransactionResultJSON, TransactionJSON, utils } from '@neo-one/client-common'; +import { + common, + crypto, + JSONHelper, + RelayTransactionResultJSON, + toWitnessScope, + TransactionJSON, +} from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { - Account, Blockchain, - deserializeTransactionWire, getEndpointConfig, - Input, - InvocationTransaction, Node, RelayTransactionResult, + Signer, Transaction, TransactionData, - TransactionType, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; import { filter, switchMap, take, timeout, toArray } from 'rxjs/operators'; @@ -52,20 +55,15 @@ export class JSONRPCError { } const RPC_METHODS: { readonly [key: string]: string } = { - getaccountstate: 'getaccountstate', - getassetstate: 'getassetstate', getbestblockhash: 'getbestblockhash', getblock: 'getblock', getblockcount: 'getblockcount', getblockhash: 'getblockhash', - getblocksysfee: 'getblocksysfee', getconnectioncount: 'getconnectioncount', getcontractstate: 'getcontractstate', getrawmempool: 'getrawmempool', getrawtransaction: 'getrawtransaction', getstorage: 'getstorage', - gettxout: 'gettxout', - invoke: 'invoke', invokefunction: 'invokefunction', invokescript: 'invokescript', sendrawtransaction: 'sendrawtransaction', @@ -74,7 +72,6 @@ const RPC_METHODS: { readonly [key: string]: string } = { getpeers: 'getpeers', relaytransaction: 'relaytransaction', relaystrippedtransaction: 'relaystrippedtransaction', - getoutput: 'getoutput', getclaimamount: 'getclaimamount', getallstorage: 'getallstorage', testinvocation: 'testinvocation', @@ -90,6 +87,25 @@ const RPC_METHODS: { readonly [key: string]: string } = { reset: 'reset', getneotrackerurl: 'getneotrackerurl', resetproject: 'resetproject', + listplugins: 'listplugins', + gettransactionheight: 'gettransactionheight', + getversion: 'getversion', + getapplicationlog: 'getapplicationlog', + getnep5transfers: 'getnep5transfers', + getnep5balances: 'getnep5balances', + getblockheader: 'getblockheader', + closewallet: 'closewallet', + dumpprivkey: 'dumpprivkey', + getnewaddress: 'getnewaddress', + getunclaimedgas: 'getunclaimedgas', + getwalletbalance: 'getwalletbalance', + getwalletunclaimedgas: 'getwalletunclaimedgas', + importprivkey: 'importprivkey', + listaddress: 'listaddress', + openwallet: 'openwallet', + sendfrom: 'sendfrom', + sendmany: 'sendmany', + sendtoaddress: 'sendtoaddress', UNKNOWN: 'UNKNOWN', INVALID: 'INVALID', }; @@ -241,30 +257,6 @@ export const createHandler = ({ }; const handlers: Handlers = { - [RPC_METHODS.getaccountstate]: async (args) => { - const hash = crypto.addressToScriptHash({ - addressVersion: blockchain.settings.addressVersion, - address: args[0], - }); - - 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]), - }); - - if (asset === undefined) { - throw new JSONRPCError(-100, 'Unknown asset'); - } - - return asset.serializeJSON(blockchain.serializeJSONContext); - }, [RPC_METHODS.getbestblockhash]: async () => JSONHelper.writeUInt256(blockchain.currentBlock.hash), [RPC_METHODS.getblock]: async (args) => { let hashOrIndex = args[0]; @@ -314,16 +306,6 @@ export const createHandler = ({ return JSONHelper.writeUInt256(block.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.getconnectioncount]: async () => node.connectedPeers.length, [RPC_METHODS.getcontractstate]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); @@ -355,34 +337,33 @@ export const createHandler = ({ }, [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 }); - - 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 }), - ]); - - if (spentCoins !== undefined && (spentCoins.endHeights[index] as number | undefined) !== undefined) { + const contract = await blockchain.contract.tryGet({ hash }); + if (contract === undefined) { return undefined; } + const id = contract.id; + const key = Buffer.from(args[1], 'hex'); + const item = await blockchain.storageItem.tryGet({ id, key }); - return output === undefined ? undefined : output.serializeJSON(blockchain.serializeJSONContext, index); - }, - [RPC_METHODS.invoke]: async () => { - throw new JSONRPCError(-101, 'Not implemented'); + return item === undefined ? undefined : item.value.toString('hex'); }, [RPC_METHODS.invokefunction]: async () => { throw new JSONRPCError(-101, 'Not implemented'); }, [RPC_METHODS.invokescript]: async (args) => { + // TODO: test this method const script = JSONHelper.readBuffer(args[0]); - const receipt = await blockchain.invokeScript(script); + const signers = args[1]?.map( + // tslint:disable-next-line: no-any + (signer: any) => + new Signer({ + account: JSONHelper.readUInt160(signer.account), + scopes: toWitnessScope(signer?.scopes), + allowedContracts: signer.allowedcontracts?.map((contract: string) => JSONHelper.readUInt160(contract)), + allowedGroups: signer.allowedgroups?.map((group: string) => JSONHelper.readECPoint(group)), + }), + ); + const receipt = await blockchain.invokeScript(script, signers); return { result: receipt.result.serializeJSON(blockchain.serializeJSONContext), @@ -390,7 +371,7 @@ export const createHandler = ({ }; }, [RPC_METHODS.sendrawtransaction]: async (args) => { - const transaction = deserializeTransactionWire({ + const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); @@ -426,10 +407,135 @@ export const createHandler = ({ return { address: host, port }; }), }), + [RPC_METHODS.listplugins]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getversion]: async () => { + const { tcpPort: tcpport, wsPort: wsport, nonce, useragent } = node.version; + + return { + tcpport, + wsport, + nonce, + useragent, + }; + }, + [RPC_METHODS.gettransactionheight]: async (args) => { + const hash = JSONHelper.readUInt256(args[0]); + const transaction = await blockchain.transactionData.tryGet({ hash }); + if (transaction === undefined) { + throw new JSONRPCError(-100, 'Unknown transaction'); + } + + return transaction.startHeight; + }, + [RPC_METHODS.getapplicationlog]: async () => { + // TODO: this is very similar to our "getinvocationdata" + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getnep5transfers]: async (args) => { + const hash = JSONHelper.readUInt160(args[0]); + 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'); + } + + // TODO: + // get all NEP5 transfers either by address or time specified + // or can get all blocks over the time period + // then get all transactions from those blocks + // then filter transactions by address + + // possiblities: TransferData, InvocationData, Account, Transaction, Action + + return { + sent: [], + transfersReceived: [], + address: common.uInt160ToString(hash), + }; + }, + [RPC_METHODS.getnep5balances]: async (args) => { + const hash = JSONHelper.readUInt160(args[0]); + const account = await blockchain.account.tryGet({ hash }); + if (account === undefined) { + throw new JSONRPCError(-100, 'Unknown account'); + } + const resultBalances: Array<{ + readonly assethash: string; + readonly amount: string; + readonly lastupdatedblock: number; + }> = []; + const balances = Object.entries(account.balances); + // tslint:disable-next-line: no-loop-statement + for (const balance of balances) { + // tslint:disable-next-line: no-array-mutation + resultBalances.push({ + assethash: balance[0], + amount: balance[1]?.toString() ?? '0', + lastupdatedblock: -1, // TODO: in account balance in blockchain.account we need to store the "lastUpdateBlock" as well + }); + } + + return { + balance: resultBalances, + address: common.uInt160ToString(hash), + }; + }, + [RPC_METHODS.getblockheader]: async (args) => { + let hashOrIndex = args[0]; + if (typeof args[0] === 'string') { + hashOrIndex = JSONHelper.readUInt256(args[0]); + } + + const header = await blockchain.header.tryGet({ hashOrIndex }); + if (header === undefined) { + throw new JSONRPCError(-100, 'Unknown block'); + } + + return header.serializeWire().toString('hex'); + }, + [RPC_METHODS.getunclaimedgas]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [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'); + }, // Extended [RPC_METHODS.relaytransaction]: async (args): Promise => { - const transaction = deserializeTransactionWire({ + const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); @@ -464,12 +570,12 @@ export const createHandler = ({ } }, [RPC_METHODS.relaystrippedtransaction]: async (args): Promise => { - const verificationTransaction = deserializeTransactionWire({ + const verificationTransaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); - const relayTransaction = deserializeTransactionWire({ + const relayTransaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[1]), }); @@ -506,25 +612,16 @@ export const createHandler = ({ 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 { + // TODO: figure out how we're going to implement calculateClaimAmount in blockchain const value = await blockchain.calculateClaimAmount([ - new Input({ + { hash, index, - }), + }, ]); return common.fixed8ToDecimal(value).toString(); @@ -534,26 +631,30 @@ export const createHandler = ({ }, [RPC_METHODS.getallstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); - const items = await blockchain.storageItem.getAll$({ hash }).pipe(toArray()).toPromise(); + const contract = await blockchain.contract.tryGet({ hash }); + if (contract === undefined) { + return []; + } + const items = await blockchain.storageItem.getAll$({ id: contract.id }).pipe(toArray()).toPromise(); return items.map((item) => item.serializeJSON(blockchain.serializeJSONContext)); }, [RPC_METHODS.testinvocation]: async (args) => { - const transaction = deserializeTransactionWire({ + const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); - if (transaction instanceof InvocationTransaction) { + try { const receipt = await blockchain.invokeTransaction(transaction); return { result: receipt.result.serializeJSON(blockchain.serializeJSONContext), actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), }; + } catch { + throw new JSONRPCError(-103, 'Invalid Transaction'); } - - throw new JSONRPCError(-103, 'Invalid InvocationTransaction'); }, [RPC_METHODS.gettransactionreceipt]: async (args) => { const transactionData = await blockchain.transactionData.tryGet({ @@ -601,25 +702,38 @@ export const createHandler = ({ hash: JSONHelper.readUInt256(args[0]), }); - const result = await transaction.serializeJSON(blockchain.serializeJSONContext); + const result = await transaction.serializeJSONWithInvocationData(blockchain.serializeJSONContext); - if (result.type !== 'InvocationTransaction' || result.invocationData === undefined) { - throw new JSONRPCError(-103, 'Invalid InvocationTransaction'); + if (result.invocationData === undefined) { + throw new JSONRPCError(-103, 'Invalid Transaction'); } return result.invocationData; }, [RPC_METHODS.getvalidators]: async () => { + // TODO: implement with NativeContract.NEO + // blockchain.getValidators() const validators = await blockchain.validator.all$.pipe(toArray()).toPromise(); return validators.map((validator) => validator.serializeJSON(blockchain.serializeJSONContext)); }, [RPC_METHODS.getnetworksettings]: async () => { - const fee = blockchain.settings.fees[TransactionType.Issue]; - const issueGASFee = common.fixed8ToDecimal(fee === undefined ? utils.ZERO : fee); + const settings = blockchain.settings; + // TODO: change blockchain.settings to be set from NativeContracts + // Update returned values. Don't have to return all the below values + // Unique to NEO•ONE return { - issueGASFee: issueGASFee.toString(), + maxTransactionPerBlock: 512, + blockAccounts: [], + maxBlockSize: 1024 * 256, + maxBlockSystemFee: '', + neoVotersCount: 0, + neoNextBlockValidators: [], + neoCandidates: [], + neoCommitteeMembers: [], + neoCommitteeAddress: '', + neoTotalSupply: 100000000, }; }, [RPC_METHODS.runconsensusnow]: async () => { From 29ebbd557d626bbf7662b53d954553ccc188fb6f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 31 Aug 2020 12:06:21 -0700 Subject: [PATCH 094/141] feat(vm): organize vm dispatcher, add initial snapshot support (#2146) --- .../environments/test/jestSetup.js | 4 +- .../src/models/Serializable.ts | 13 + .../models/transaction/TransactionModel.ts | 6 +- .../neo-one-client-common/src/models/types.ts | 2 +- .../neo-one-csharp-blockchain/package.json | 6 +- .../src/Blockchain.ts | 172 ++++++++++++ packages/neo-one-csharp-core/src/Block.ts | 6 +- packages/neo-one-csharp-core/src/BlockBase.ts | 18 +- .../src/StackItems/StackItem.ts | 4 +- .../neo-one-csharp-core/src/Verifiable.ts | 2 +- .../src/transaction/Transaction.ts | 2 +- packages/neo-one-csharp-core/src/vm.ts | 40 +++ packages/neo-one-csharp-vm/lib/Blockchain.cs | 5 +- .../lib/Dispatcher.Engine.cs | 140 ++++++++++ .../lib/Dispatcher.Snapshot.cs | 146 ++++++++++ packages/neo-one-csharp-vm/lib/Dispatcher.cs | 108 ++++++++ ...ineDispatcher.csproj => Dispatcher.csproj} | 0 .../neo-one-csharp-vm/lib/EngineDispatcher.cs | 175 ------------ .../neo-one-csharp-vm/lib/ReturnHelpers.cs | 260 +++++++++--------- .../neo-one-csharp-vm/lib/SnapshotHelpers.cs | 7 + .../src/ApplicationEngine.ts | 130 +++------ .../src/Methods/BaseMethods.ts | 8 + .../src/Methods/EngineMethods.ts | 26 ++ .../src/Methods/SnapshotMethods.ts | 32 +++ .../neo-one-csharp-vm/src/Methods/common.ts | 1 + .../neo-one-csharp-vm/src/Methods/index.ts | 3 + .../neo-one-csharp-vm/src/SnapshotHandler.ts | 77 ++++++ .../neo-one-csharp-vm/src/StackItems/parse.ts | 4 +- .../src/__tests__/ApplicationEngine.test.ts | 34 +-- .../src/__tests__/Dispatcher.test.ts | 40 +++ .../src/__tests__/storage.test.ts | 85 +++++- .../src/__tests__/syscalls.test.ts | 33 ++- packages/neo-one-csharp-vm/src/constants.ts | 9 - packages/neo-one-csharp-vm/src/converters.ts | 19 -- .../src/createEngineDispatcher.ts | 44 --- packages/neo-one-csharp-vm/src/dispatcher.ts | 88 ++++-- packages/neo-one-csharp-vm/src/index.ts | 1 + packages/neo-one-csharp-vm/src/run.ts | 21 -- packages/neo-one-csharp-vm/src/types.ts | 25 ++ packages/neo-one-csharp-vm/src/utils.ts | 21 ++ 40 files changed, 1237 insertions(+), 580 deletions(-) create mode 100644 packages/neo-one-csharp-blockchain/src/Blockchain.ts create mode 100644 packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs create mode 100644 packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs create mode 100644 packages/neo-one-csharp-vm/lib/Dispatcher.cs rename packages/neo-one-csharp-vm/lib/{EngineDispatcher.csproj => Dispatcher.csproj} (100%) delete mode 100644 packages/neo-one-csharp-vm/lib/EngineDispatcher.cs create mode 100644 packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs create mode 100644 packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts create mode 100644 packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts create mode 100644 packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts create mode 100644 packages/neo-one-csharp-vm/src/Methods/common.ts create mode 100644 packages/neo-one-csharp-vm/src/Methods/index.ts create mode 100644 packages/neo-one-csharp-vm/src/SnapshotHandler.ts create mode 100644 packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts delete mode 100644 packages/neo-one-csharp-vm/src/constants.ts delete mode 100644 packages/neo-one-csharp-vm/src/converters.ts delete mode 100644 packages/neo-one-csharp-vm/src/createEngineDispatcher.ts delete mode 100644 packages/neo-one-csharp-vm/src/run.ts create mode 100644 packages/neo-one-csharp-vm/src/utils.ts diff --git a/packages/neo-one-build-tests/environments/test/jestSetup.js b/packages/neo-one-build-tests/environments/test/jestSetup.js index 935b7a034a..dff7a25fb1 100644 --- a/packages/neo-one-build-tests/environments/test/jestSetup.js +++ b/packages/neo-one-build-tests/environments/test/jestSetup.js @@ -10,8 +10,8 @@ jest.setTimeout(120 * 1000); const tempConsole = global.console; global.console = { - // log: console.log, // Use this to debug source code - log: jest.fn(), + log: console.log, // Use this to debug source code + // log: jest.fn(), error: console.error, warn: console.warn, info: jest.fn(), diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 2e6acfa9df..6687ebd328 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -17,3 +17,16 @@ export const createSerializeWire = (serializeWireBase: (writer: BinaryWriter) => export interface SerializableJSON { readonly serializeJSON: () => TJSON; } + +/** TODO: revist how the `magic` gets in here. Previously it was passed only as a `DeserializeContext` option + * but now its needed for getting the hash of certain models. Really this is something that should get passed in + * from `Blockchain` or `Settings` + */ + +export const createGetHashData = (serializeWire: () => Buffer, magic = 5195086) => () => { + const writer = new BinaryWriter(); + writer.writeUInt32LE(magic); + writer.writeBytes(serializeWire()); + + return writer.toBuffer(); +}; 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 eb2fb69751..abd960ca6f 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -4,7 +4,7 @@ import { BinaryWriter } from '../../BinaryWriter'; import { common, ECPoint, InvalidFormatError, PrivateKey, UInt160, UInt256, UInt256Hex } from '../../common'; import { crypto } from '../../crypto'; import { utils } from '../../utils'; -import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; +import { createGetHashData, createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; import { SignerModel } from '../SignerModel'; import { WitnessModel } from '../WitnessModel'; import { AttributeModel } from './attribute'; @@ -44,9 +44,9 @@ export class TransactionModel< public readonly version: number; public readonly nonce: number; - public readonly sender?: UInt160; 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[]; @@ -57,7 +57,7 @@ export class TransactionModel< private readonly networkFeeInternal: () => BN; private readonly hashInternal: () => UInt256; private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned)()); public constructor({ version, diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 49ce5adc51..89d01197ab 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -207,7 +207,7 @@ export interface TransactionJSON { readonly size: number; readonly version: number; readonly nonce: number; - readonly sender: string; + readonly sender?: string; readonly sysfee: string; readonly netfee: string; readonly validuntilblock: number; diff --git a/packages/neo-one-csharp-blockchain/package.json b/packages/neo-one-csharp-blockchain/package.json index 18cfd02fbf..94c90f23df 100644 --- a/packages/neo-one-csharp-blockchain/package.json +++ b/packages/neo-one-csharp-blockchain/package.json @@ -15,12 +15,16 @@ "@neo-one/client-common": "^2.7.0", "@neo-one/csharp-core": "^2.7.0", "@neo-one/csharp-vm": "^2.7.0", + "@neo-one/logger": "^2.6.1", "bn.js": "^5.0.0", - "lodash": "^4.17.15" + "js-priority-queue": "^0.1.5", + "lodash": "^4.17.15", + "rxjs": "^6.5.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", + "@types/js-priority-queue": "^0.0.5", "@types/lodash": "^4.14.138", "gulp": "~4.0.2", "tslib": "^1.10.0" diff --git a/packages/neo-one-csharp-blockchain/src/Blockchain.ts b/packages/neo-one-csharp-blockchain/src/Blockchain.ts new file mode 100644 index 0000000000..85a684c87a --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/Blockchain.ts @@ -0,0 +1,172 @@ +import { Block, VM } from '@neo-one/csharp-core'; +import PriorityQueue from 'js-priority-queue'; +import { verifyWitnesses } from './verify'; + +export interface BlockchainOptions { + readonly storage: Storage; + readonly vm: VM; +} + +interface Entry { + readonly block: Block; + readonly resolve: () => void; + readonly reject: (error: Error) => void; + readonly verify: boolean; +} + +export class Blockchain { + private readonly storage: Storage; + private readonly vm: VM; + private readonly mutableBlockQueue: PriorityQueue = new PriorityQueue({ + comparator: (a, b) => a.block.index - b.block.index, + }); + private mutableCurrentBlock: Block | undefined; + private readonly mutableInQueue: Set = new Set(); + private readonly mutableRunning = false; + private mutableDoneRunningResolve: (() => void) | undefined; + private readonly mutableBlock$: Subject = new Subject(); + + public constructor(options: BlockchainOptions) { + this.storage = options.storage; + this.vm = options.vm; + } + + public get currentBlock(): Block { + if (this.mutableCurrentBlock === undefined) { + throw new GenesisBlockNotRegisteredError(); + } + + return this.mutableCurrentBlock; + } + + public get currentBlockIndex(): number { + return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; + } + + // TODO: make sure all of this storage is implemented + public get snapshotMethods() { + return { + tryGetBlock: this.storage.block.tryGet, + tryGetHeader: this.storage.header.tryGet, + tryGetContract: this.storage.contract.tryGet, + tryGetStorage: this.storage.item.tryGet, + }; + } + + public async verifyBlock(block: Block): Promise { + const verification = await block.verify(this.snapshotMethods, verifyWitnesses); + if (!verification) { + // TODO: implement a makeError + throw new Error('Block Verification Failed'); + } + } + + public async persistBlock({ + block, + verify = false, + }: { + readonly block: Block; + readonly verify?: boolean; + }): Promise { + // tslint:disable-next-line promise-must-complete + return new Promise((resolve, reject) => { + if (this.mutableInQueue.has(block.hashHex)) { + resolve(); + + return; + } + this.mutableInQueue.add(block.hashHex); + + this.mutableBlockQueue.queue({ + block, + resolve, + reject, + verify, + }); + + // tslint:disable-next-line no-floating-promises + this.persistBlocksAsync(); + }); + } + + private async persistBlocksAsync(): Promise { + if (this.mutablePersistingBlocks || !this.mutableRunning) { + return; + } + + this.mutablePersistingBlocks = true; + let entry: Entry | undefined; + try { + entry = this.cleanBlockQueue(); + + // tslint:disable-next-line no-loop-statement + while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { + 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.verify); + logger.debug(logData); + } catch (err) { + logger.error({ err, ...logData }); + + throw err; + } + + entry.resolve(); + this.mutableBlock$.next(entry.block); + entry = this.cleanBlockQueue(); + } + + if (entry !== undefined) { + this.mutableBlockQueue.queue(entry); + } + } catch (error) { + if (entry !== undefined) { + entry.reject(error); + } + } finally { + this.mutablePersistingBlocks = false; + if (this.mutableDoneRunningResolve !== undefined) { + this.mutableDoneRunningResolve(); + this.mutableDoneRunningResolve = undefined; + } + } + } + + private cleanBlockQueue(): Entry | undefined { + let entry = this.dequeBlockQueue(); + // tslint:disable-next-line no-loop-statement + while (entry !== undefined && entry.block.index <= this.currentBlockIndex) { + entry.resolve(); + entry = this.dequeBlockQueue(); + } + + return entry; + } + + private dequeBlockQueue(): Entry | undefined { + if (this.mutableBlockQueue.length > 0) { + return this.mutableBlockQueue.dequeue(); + } + + return undefined; + } + + private async persistBlockInternal(block: Block, verify?: boolean): Promise { + if (verify) { + await this.verifyBlock(block); + } + + const blockchain = this.createWriteBlockchain(); + + await blockchain.persistBlock(block); + await this.storage.commit(blockchain.getChangeSet()); + + this.mutablePreviousBlock = this.mutableCurrentBlock; + this.mutableCurrentBlock = block; + this.mutableCurrentHeader = block.header; + } +} diff --git a/packages/neo-one-csharp-core/src/Block.ts b/packages/neo-one-csharp-core/src/Block.ts index a15261509b..cc55b7b4a1 100644 --- a/packages/neo-one-csharp-core/src/Block.ts +++ b/packages/neo-one-csharp-core/src/Block.ts @@ -7,6 +7,7 @@ import { TransactionJSON, UInt256, } from '@neo-one/client-common'; +import _ from 'lodash'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { ConsensusData } from './ConsensusData'; import { MerkleTree } from './crypto'; @@ -23,7 +24,8 @@ import { TrimmedBlock } from './TrimmedBlock'; import { BinaryReader, utils } from './utils'; import { Witness } from './Witness'; -export interface BlockAdd extends BlockBaseAdd { +export interface BlockAdd extends Omit { + readonly merkleRoot?: UInt256; readonly consensusData?: ConsensusData; readonly transactions: readonly Transaction[]; } @@ -80,7 +82,7 @@ export class Block extends BlockBase implements SerializableWire, Seriali throw new InvalidFormatError('Expected count to be greater than 0'); } const consensusData = ConsensusData.deserializeWireBase(options); - const transactions = reader.readArray(() => Transaction.deserializeWireBase(options), 0x10000); + const transactions = _.range(count - 1).map(() => Transaction.deserializeWireBase(options)); if (transactions.length !== count - 1) { throw new InvalidFormatError(`Expected ${count - 1} transactions on the block, found: ${transactions.length}`); diff --git a/packages/neo-one-csharp-core/src/BlockBase.ts b/packages/neo-one-csharp-core/src/BlockBase.ts index 00bb285a50..50666b4cd4 100644 --- a/packages/neo-one-csharp-core/src/BlockBase.ts +++ b/packages/neo-one-csharp-core/src/BlockBase.ts @@ -2,6 +2,7 @@ import { BinaryWriter, BlockBaseJSON, common, + createGetHashData, crypto, InvalidFormatError, IOHelper, @@ -13,14 +14,7 @@ import { import { BN } from 'bn.js'; import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; -import { Header } from './Header'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; +import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; import { utils } from './utils'; import { SnapshotMethods, VerifyWitnesses } from './Verifiable'; import { Witness } from './Witness'; @@ -106,7 +100,7 @@ export abstract class BlockBase implements EquatableKey { public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly hashInternal: () => UInt256; private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned)()); private readonly witnessInternal: Witness | undefined; private readonly sizeInternal = utils.lazy( () => @@ -204,8 +198,8 @@ export abstract class BlockBase implements EquatableKey { }; } - public async verify(options: SnapshotMethods, verifyWitnesses: VerifyWitnesses) { - const prevHeader = await options.tryGetHeader(this.previousHash); + public async verify(snapshot: SnapshotMethods, verifyWitnesses: VerifyWitnesses) { + const prevHeader = await snapshot.tryGetHeader(this.previousHash); if (prevHeader === undefined) { return false; } @@ -218,7 +212,7 @@ export abstract class BlockBase implements EquatableKey { return false; } - return verifyWitnesses(this, options, utils.ONE_HUNDRED_MILLION); + return verifyWitnesses(this, snapshot, 1); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-csharp-core/src/StackItems/StackItem.ts b/packages/neo-one-csharp-core/src/StackItems/StackItem.ts index bbff7eb696..274c6ee6b5 100644 --- a/packages/neo-one-csharp-core/src/StackItems/StackItem.ts +++ b/packages/neo-one-csharp-core/src/StackItems/StackItem.ts @@ -31,9 +31,9 @@ export interface IntegerStackItem extends StackItemBase { export interface ByteStringStackItem extends StackItemBase { readonly type: 'ByteString'; - readonly value: string; + readonly value: Buffer; readonly size: number; - readonly _buffer: Buffer; + readonly asString: () => string; } export interface BufferStackItem extends StackItemBase { diff --git a/packages/neo-one-csharp-core/src/Verifiable.ts b/packages/neo-one-csharp-core/src/Verifiable.ts index fe1c405c51..2b686c1040 100644 --- a/packages/neo-one-csharp-core/src/Verifiable.ts +++ b/packages/neo-one-csharp-core/src/Verifiable.ts @@ -21,4 +21,4 @@ export interface VerifyResult { readonly result: boolean; } -export type VerifyWitnesses = (verifiable: Verifiable, snapshot: SnapshotMethods, gasIn: BN) => Promise; +export type VerifyWitnesses = (verifiable: Verifiable, snapshot: SnapshotMethods, gasIn: number) => Promise; diff --git a/packages/neo-one-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts index ef9059aeea..98708937c9 100644 --- a/packages/neo-one-csharp-core/src/transaction/Transaction.ts +++ b/packages/neo-one-csharp-core/src/transaction/Transaction.ts @@ -179,7 +179,7 @@ export class Transaction size: this.size, version: this.version, nonce: this.nonce, - sender: scriptHashToAddress(common.uInt160ToString(this.sender)), + sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, sysfee: JSONHelper.writeUInt64LE(this.systemFee), netfee: JSONHelper.writeUInt64LE(this.networkFee), validuntilblock: this.validUntilBlock, diff --git a/packages/neo-one-csharp-core/src/vm.ts b/packages/neo-one-csharp-core/src/vm.ts index dd2210a9fd..0ec7b77691 100644 --- a/packages/neo-one-csharp-core/src/vm.ts +++ b/packages/neo-one-csharp-core/src/vm.ts @@ -1,4 +1,44 @@ +import { VMState } from '@neo-one/client-common'; +import { StackItem } from './StackItems'; +import { Transaction } from './transaction'; +import { Verifiable } from './Verifiable'; + export enum TriggerType { Verification = 0x00, Application = 0x10, } + +export interface ApplicationEngineOptions { + readonly trigger: TriggerType; + readonly container?: Verifiable; + readonly snapshot?: boolean; + readonly gas: number; + readonly testMode?: boolean; +} + +export interface ApplicationEngine { + readonly trigger: TriggerType; + readonly gasConsumed: number; + readonly resultStack: readonly StackItem[]; + readonly execute: () => keyof typeof VMState; + readonly loadClonedContext: (position: number) => boolean; +} + +// tslint:disable-next-line no-any TODO: implement +export type Notification = any; + +export interface ApplicationExecuted { + readonly transaction?: Transaction; + readonly trigger: TriggerType; + readonly state: VMState; + readonly gasConsumed: number; + readonly stack: readonly StackItem[]; + readonly notification: readonly Notification[]; +} + +export interface VM { + readonly withApplicationEngine: ( + options: ApplicationEngineOptions, + func: (engine: ApplicationEngine) => T, + ) => T; +} diff --git a/packages/neo-one-csharp-vm/lib/Blockchain.cs b/packages/neo-one-csharp-vm/lib/Blockchain.cs index 3de4294ff7..b3770243c6 100644 --- a/packages/neo-one-csharp-vm/lib/Blockchain.cs +++ b/packages/neo-one-csharp-vm/lib/Blockchain.cs @@ -5,11 +5,12 @@ namespace NEOONE { public class NeoOneBlockchain { - public static readonly Neo.NeoSystem NeoOneSystem; + + private static readonly Neo.NeoSystem system; static NeoOneBlockchain() { - NeoOneSystem = new Neo.NeoSystem(); + system = new Neo.NeoSystem(); var _ = Blockchain.Singleton; } diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs new file mode 100644 index 0000000000..d2dcbcf944 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs @@ -0,0 +1,140 @@ +using System; +using System.Linq; +using System.Threading; +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 EngineMethod + { + create, + execute, + loadscript, + loadclonedcontext, + getvmstate, + getresultstack, + gettrigger, + getgasconsumed, + 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); + bool testMode = (bool)args.testMode; + return this._create(trigger, null, this.selectSnapshot(args.snapshot, false), gas, testMode); + + case EngineMethod.execute: + return this._execute(); + + case EngineMethod.loadscript: + Script script = new Script((byte[])args.script); + return this._loadScript(script); + + case EngineMethod.loadclonedcontext: + int position = (int)args.position; + return this._loadClonedContext(position); + + 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.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, bool testMode = false) + { + this.disposeEngine(); + this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); + + return true; + } + + private VMState _execute() + { + this.isEngineInitialized(); + return this.engine.Execute(); + } + + private bool _loadScript(Script script) + { + this.isEngineInitialized(); + this.engine.LoadScript(script); + return true; + } + + private bool _loadClonedContext(int initialPosition) + { + this.isEngineInitialized(); + this.engine.LoadClonedContext(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 long _getGasConsumed() + { + return this.engine != null ? this.engine.GasConsumed : 0; + } + + private bool isEngineInitialized() + { + if (this.engine == null) + { + throw new InvalidOperationException("Can't invoke an engine method without creating the engine"); + } + + return true; + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs new file mode 100644 index 0000000000..ede00aaff1 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs @@ -0,0 +1,146 @@ +using System; +using System.IO; +using Neo; +using Neo.Ledger; +using Neo.Network.P2P.Payloads; +using Neo.Persistence; +using Neo.VM; + +namespace NEOONE +{ + partial class Dispatcher + { + + private StoreView snapshot; + private StoreView clonedSnapshot; + + enum SnapshotMethod + { + snapshot_blocks_add, + snapshot_transactions_add, + snapshot_clone, + snapshot_set_height, + snapshot_commit, + snapshot_reset, + } + + 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; + 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); + + case SnapshotMethod.snapshot_clone: + return this._snapshotClone(); + + case SnapshotMethod.snapshot_set_height: + uint index = (uint)args.index; + return this._snapshotSetHeight(this.selectSnapshot(args.snapshot), index); + + case SnapshotMethod.snapshot_commit: + this.selectCommitStore( + this.selectSnapshot(args.snapshot, false), + args.partial + ).Commit(); + + return true; + + case SnapshotMethod.snapshot_reset: + this.resetSnapshots(); + + return true; + + default: + throw new InvalidOperationException(); + } + } + + + private void resetSnapshots() + { + this.snapshot = Blockchain.Singleton.GetSnapshot(); + 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 CommitStore selectCommitStore(StoreView snapshot, string partial) + { + switch (partial) + { + case "blocks": + return (CommitStore)snapshot.Blocks; + case "transactions": + return (CommitStore)snapshot.Transactions; + default: + return (CommitStore)snapshot; + } + } + + 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 _snapshotSetHeight(StoreView snapshot, uint index) + { + var height = snapshot.BlockHashIndex.GetAndChange(); + height.Index = index; + + return true; + } + + private bool _snapshotClone() + { + this.clonedSnapshot = this.snapshot.Clone(); + + return true; + } + } + +} diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.cs b/packages/neo-one-csharp-vm/lib/Dispatcher.cs new file mode 100644 index 0000000000..74a6a03491 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Dispatcher.cs @@ -0,0 +1,108 @@ +using System; +using System.Threading.Tasks; +using Neo.SmartContract; +using System.Dynamic; +using System.Collections.Generic; + +namespace NEOONE +{ + public partial class Dispatcher + { + + private ApplicationEngine engine; + private bool init = false; + + private enum BaseMethod + { + init, + dispose, + test, + } + + private dynamic dispatchBaseMethod(BaseMethod method) + { + switch (method) + { + case BaseMethod.init: + return this._init(); + + case BaseMethod.dispose: + return this._dispose(); + + case BaseMethod.test: + return this._test(); + + default: + throw new InvalidOperationException(); + + } + } + + private bool _init() + { + this.init = this.init ? true : NeoOneBlockchain.InitializeNeoOneSystem(); + this.resetSnapshots(); + + return true; + } + + private dynamic _test() + { + return true; + } + + private bool _dispose() + { + this.snapshot = null; + this.clonedSnapshot = null; + this.disposeEngine(); + this.init = false; + + return true; + } + +#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); + } + + 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); + } + + 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; + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj b/packages/neo-one-csharp-vm/lib/Dispatcher.csproj similarity index 100% rename from packages/neo-one-csharp-vm/lib/EngineDispatcher.csproj rename to packages/neo-one-csharp-vm/lib/Dispatcher.csproj diff --git a/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs b/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs deleted file mode 100644 index 7efb63b7b1..0000000000 --- a/packages/neo-one-csharp-vm/lib/EngineDispatcher.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using System.Threading.Tasks; -using Neo.Network.P2P.Payloads; -using Neo.Persistence; -using System.Linq; -using Neo.VM; -using Neo.VM.Types; -using Neo.SmartContract; -using Neo.Ledger; -using System.Reflection; - -namespace NEOONE -{ - public class EngineDispatcher - { - - private ApplicationEngine engine; - private Neo.NeoSystem system; - private bool init = false; - public async Task Invoke(dynamic input) - { - if (!this.init) - { - this.init = NeoOneBlockchain.InitializeNeoOneSystem(); - } - - string method = (string)input.method; - - switch (method) - { - // constructor wrapper - case "create": - TriggerType trigger = (TriggerType)input.args.trigger; - long gas = (long)input.args.gas; - bool testMode = (bool)input.args.testMode; - bool snapshotBoolean = input.args.snapshot == null ? false : (bool)input.args.snapshot; - var snapshot = snapshotBoolean ? Blockchain.Singleton.GetSnapshot() : null; - return this._create(trigger, null, snapshot, gas, testMode); - - // getters - case "gettrigger": - return this._getTrigger(); - - case "getvmstate": - return this._getVMState(); - - case "getresultstack": - return this._getResultStack(); - - case "getgasconsumed": - return this._getGasConsumed(); - - // application engine methods - case "execute": - return this._execute(); - - case "loadscript": - byte[] rawBytes = (byte[])input.args.script; - var script = new Script(rawBytes); - return this._loadScript(script); - - // execution engine methods - case "loadclonedcontext": - int position = (int)input.args.position; - return this._loadClonedContext(position); - - case "peek": - int peekPosition = (int)input.args.position; - return this._peek(peekPosition); - - case "pop": - return this._pop(); - - case "dispose": - return this._dispose(); - - // internal testing - case "test": - long test = (long)input.args.test; - return this._test(test); - - default: - throw new InvalidOperationException($"'{method}' is not a valid method"); - } - } - - private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas, bool testMode = false) - { - if (this.engine == null) - { - this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); - } - - return true; - } - - private TriggerType _getTrigger() - { - this.isInitialized(); - return this.engine.Trigger; - } - - private dynamic[] _getResultStack() - { - this.isInitialized(); - return this.engine.ResultStack.Select((StackItem p) => ReturnHelpers.convertStackItem(p)).ToArray(); - } - - private VMState _getVMState() - { - this.isInitialized(); - return this.engine.State; - } - - private long _getGasConsumed() - { - this.isInitialized(); - return this.engine.GasConsumed; - } - - private VMState _execute() - { - this.isInitialized(); - return this.engine.Execute(); - } - - private ExecutionContext _loadClonedContext(int initialPosition) - { - this.isInitialized(); - return this.engine.LoadClonedContext(initialPosition); - } - - private bool _loadScript(Script script) - { - this.isInitialized(); - this.engine.LoadScript(script); - return true; - } - - private StackItem _peek(int index) - { - this.isInitialized(); - return this.engine.Peek(index); - } - - private StackItem _pop() - { - this.isInitialized(); - return this.engine.Pop(); - } - - private dynamic _test(long test) - { - long maxVerificationGas = 0_50000000; - return maxVerificationGas; - } - - private bool _dispose() - { - this.isInitialized(); - this.engine.Dispose(); - return true; - } - - private bool isInitialized() - { - if (this.engine == null) - { - throw new InvalidOperationException("Can't invoke a method without creating the engine"); - } - - return true; - } - } -} diff --git a/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs b/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs index 4aaa29ef38..b512157725 100644 --- a/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs @@ -4,139 +4,139 @@ namespace NEOONE { - public class ReturnHelpers + public class ReturnHelpers + { + public class PrimitiveReturn { - public class PrimitiveReturn - { - public readonly dynamic 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 dynamic[] 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 dynamic[] 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 dynamic value; + 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 KeyValueReturn(PrimitiveReturn key, dynamic value) - { - this.key = key; - this.value = value; - } - } + 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 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) + 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 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) - }; - } + 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) + }; } + } } diff --git a/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs b/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs new file mode 100644 index 0000000000..94d61b72d6 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs @@ -0,0 +1,7 @@ +namespace NEOONE +{ + interface CommitStore + { + void Commit(); + } +} diff --git a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts index a4b8e89e34..aec2a85697 100644 --- a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts @@ -1,32 +1,41 @@ import { common } from '@neo-one/client-common'; -import { CallFlags, TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { TriggerType, Verifiable } from '@neo-one/csharp-core'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { convertEngineOptions } from './converters'; -import { createEngineDispatcher } from './createEngineDispatcher'; +import { EngineMethods } from './Methods'; import { parse as parseStackItems } from './StackItems'; +import { DispatcherFunc, SnapshotName } from './types'; -export interface EngineOptions { +export interface CreateOptions { readonly trigger: TriggerType; readonly container?: Verifiable; - readonly snapshot?: boolean; + readonly snapshot?: SnapshotName; readonly gas: number; - readonly testMode?: boolean; + readonly testMode: boolean; +} + +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 this.engineDispatcher({ + return this.dispatch({ method: 'gettrigger', }); } - // TODO: make sure the fixed8 numbers are the same between c# and what I'm inputting (just for ease of mind); public get gasConsumed() { return common .fixed8ToDecimal( new BN( - this.engineDispatcher({ + this.dispatch({ method: 'getgasconsumed', }), ), @@ -34,131 +43,60 @@ export class ApplicationEngine { .toNumber(); } - public get gasLeft() { - return this.engineDispatcher({ - method: 'getgasleft', - }); - } - - public get currentScriptHash() { - return this.engineDispatcher({ - method: 'getcurrentscripthash', - }); - } - - public get callingScriptHash() { - return this.engineDispatcher({ - method: 'getcallingscripthash', - }); - } - - public get entryScriptHash() { - return this.engineDispatcher({ - method: 'getentryscripthash', - }); - } - - public get notifications() { - return this.engineDispatcher({ - method: 'getnotifications', - }); - } - public get state() { - return this.engineDispatcher({ + return this.dispatch({ method: 'getvmstate', }); } - // we reverse the resultStack since we don't want to use `pop`. public get resultStack() { return _.reverse( parseStackItems( - this.engineDispatcher({ + this.dispatch({ method: 'getresultstack', }), ), ); } - public readonly init: boolean; - private readonly engineDispatcher: ReturnType; - - public constructor(options: EngineOptions) { - this.engineDispatcher = createEngineDispatcher(); - this.init = this.engineDispatcher({ + public create({ trigger, container, gas, snapshot, testMode }: CreateOptions) { + return this.dispatch({ method: 'create', - args: convertEngineOptions(options), - }); - } - - // -- application engine method definitions - public dispose() { - return this.engineDispatcher({ - method: 'dispose', + args: { + trigger, + container, + gas: common.fixed8FromDecimal(gas.toString()).toString(), + snapshot, + testMode, + }, }); } public execute() { - return this.engineDispatcher({ + return this.dispatch({ method: 'execute', }); } - public loadScript(script: Buffer, callFlags = CallFlags.None) { - return this.engineDispatcher({ + public loadScript(script: Buffer) { + return this.dispatch({ method: 'loadscript', args: { script, - callFlags, }, }); } public checkScript() { - return this.engineDispatcher({ + return this.dispatch({ method: 'checkscript', }); } - // - start - some ExecutionEngine method definitions we might need under the hood public loadClonedContext(position: number) { - return this.engineDispatcher({ + return this.dispatch({ method: 'loadclonedcontext', args: { position }, }); } - - public peek(index = 0) { - return this.engineDispatcher({ - method: 'peek', - args: { - index, - }, - }); - } - - public pop() { - return this.engineDispatcher({ - method: 'pop', - }); - } - - public test(value: BN) { - return this.engineDispatcher({ - method: 'test', - args: { - test: value.toNumber(), - }, - }); - } } - -// should be our equivalent of `(using var engine = new ApplicationEngine(...)) {...}` -export const withApplicationEngine = (options: EngineOptions, func: (engine: ApplicationEngine) => T): T => { - const engine = new ApplicationEngine(options); - const result = func(engine); - engine.dispose(); - - return result; -}; diff --git a/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts b/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts new file mode 100644 index 0000000000..83859ec535 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts @@ -0,0 +1,8 @@ +import { DefaultMethods, DispatchMethod } from '../types'; + +export interface BaseMethods extends DefaultMethods { + readonly init: DispatchMethod; + readonly dispose_engine: DispatchMethod; + readonly snapshot_reset: DispatchMethod; + readonly dispose: DispatchMethod; +} diff --git a/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts b/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts new file mode 100644 index 0000000000..15cbd6fd43 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts @@ -0,0 +1,26 @@ +import { VMState } from '@neo-one/client-common'; +import { TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { StackItemReturn } from '../StackItems'; +import { DefaultMethods, DispatchMethod, SnapshotName } from '../types'; + +interface CreateEngineArgs { + readonly trigger: TriggerType; + readonly container?: Verifiable; + readonly gas: string; + readonly snapshot?: SnapshotName; + readonly testMode: boolean; +} + +export interface EngineMethods extends DefaultMethods { + // constructor + readonly create: DispatchMethod; + // getters + readonly gettrigger: DispatchMethod; + readonly getgasconsumed: DispatchMethod; + readonly getvmstate: DispatchMethod; + readonly getresultstack: DispatchMethod; + // methods + readonly execute: DispatchMethod; + readonly loadclonedcontext: DispatchMethod; + readonly loadscript: DispatchMethod; +} diff --git a/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts b/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts new file mode 100644 index 0000000000..1ec5ee0f5a --- /dev/null +++ b/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts @@ -0,0 +1,32 @@ +import { UInt256, VMState } from '@neo-one/client-common'; +import { DefaultMethods, DispatchMethod, SnapshotName, SnapshotPartial } 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 CommitArgs extends Partial { + readonly partial?: SnapshotPartial; +} + +interface SetHeightArgs extends SnapshotChoice { + readonly index: number; +} + +export interface SnapshotMethods extends DefaultMethods { + readonly snapshot_blocks_add: DispatchMethod; + readonly snapshot_transactions_add: DispatchMethod; + readonly snapshot_commit: DispatchMethod; + readonly snapshot_clone: DispatchMethod; + readonly snapshot_set_height: DispatchMethod; +} diff --git a/packages/neo-one-csharp-vm/src/Methods/common.ts b/packages/neo-one-csharp-vm/src/Methods/common.ts new file mode 100644 index 0000000000..046b3a2585 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/Methods/common.ts @@ -0,0 +1 @@ +export type SnapshotName = 'main' | 'clone'; diff --git a/packages/neo-one-csharp-vm/src/Methods/index.ts b/packages/neo-one-csharp-vm/src/Methods/index.ts new file mode 100644 index 0000000000..acbca381c9 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/Methods/index.ts @@ -0,0 +1,3 @@ +export * from './BaseMethods'; +export * from './EngineMethods'; +export * from './SnapshotMethods'; diff --git a/packages/neo-one-csharp-vm/src/SnapshotHandler.ts b/packages/neo-one-csharp-vm/src/SnapshotHandler.ts new file mode 100644 index 0000000000..e096599ff3 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/SnapshotHandler.ts @@ -0,0 +1,77 @@ +import { VMState } from '@neo-one/client-common'; +import { Block, Transaction } from '@neo-one/csharp-core'; +import { SnapshotMethods } from './Methods'; +import { DispatcherFunc, SnapshotName, SnapshotPartial } 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 setHeight(index: number) { + return this.dispatch({ + method: 'snapshot_set_height', + args: { + index, + snapshot: this.snapshot, + }, + }); + } + + public commit(partial?: SnapshotPartial) { + return this.dispatch({ + method: 'snapshot_commit', + args: { + partial, + snapshot: this.snapshot, + }, + }); + } + + public clone() { + this.cloneInternal(); + } +} diff --git a/packages/neo-one-csharp-vm/src/StackItems/parse.ts b/packages/neo-one-csharp-vm/src/StackItems/parse.ts index b9df133e46..e9f6f419ce 100644 --- a/packages/neo-one-csharp-vm/src/StackItems/parse.ts +++ b/packages/neo-one-csharp-vm/src/StackItems/parse.ts @@ -92,8 +92,8 @@ const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStack case 'ByteString': return { type: 'ByteString', - value: item.value.toString('utf8'), - _buffer: item.value, + value: item.value, + asString: () => item.value.toString('utf8'), size: item.Size, isNull, }; diff --git a/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts index 6c134ca107..57514a1a2c 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts +++ b/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts @@ -1,28 +1,20 @@ -import { ScriptBuilder } from '@neo-one/client-common'; import { TriggerType } from '@neo-one/csharp-core'; -import { withApplicationEngine } from '../ApplicationEngine'; +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; describe('ApplicationEngine test', () => { + const dispatcher = new Dispatcher(); + beforeEach(() => { + dispatcher.reset(); + }); test('withApplicationEngine -- NOP Script -- Halt', () => { - const state = withApplicationEngine( - { - trigger: TriggerType.Application, - testMode: true, - gas: 1, - }, - (engine) => { - const initState = engine.state; - expect(initState).toEqual('BREAK'); - - const script = new ScriptBuilder(); - script.emitOp('NOP'); - - engine.loadScript(script.build()); - - return engine.execute(); - }, - ); + const engine = new ApplicationEngine(dispatcher); + engine.create({ + trigger: TriggerType.Application, + gas: 0, + testMode: true, + }); - expect(state).toEqual('HALT'); + expect(engine.state).toEqual('BREAK'); }); }); diff --git a/packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts new file mode 100644 index 0000000000..18bdf0f738 --- /dev/null +++ b/packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts @@ -0,0 +1,40 @@ +import { ScriptBuilder } from '@neo-one/client-common'; +import { TriggerType } from '@neo-one/csharp-core'; +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; + +describe('Dispatcher Tests', () => { + const dispatcher = new Dispatcher(); + beforeEach(() => { + dispatcher.reset(); + }); + + test('withApplicationEngine -- NOP Script', () => { + const state = dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + testMode: true, + gas: 0, + }, + (engine) => { + expect(engine.state).toEqual('BREAK'); + + const script = new ScriptBuilder(); + script.emitOp('NOP'); + + engine.loadScript(script.build()); + + return engine.execute(); + }, + ); + + expect(state).toEqual('HALT'); + + // check that the dispatcher reset the engine. + const postEngine = new ApplicationEngine(dispatcher); + expect(postEngine.resultStack).toEqual([]); + expect(postEngine.gasConsumed).toEqual(0); + expect(postEngine.state).toEqual('BREAK'); + expect(() => postEngine.execute()).toThrow(); + }); +}); diff --git a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts index 138155e204..c67843c24d 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts @@ -1,6 +1,17 @@ -import { common, ScriptBuilder, UInt256 } from '@neo-one/client-common'; -import { ArrayStackItem, ByteStringStackItem, TriggerType } from '@neo-one/csharp-core'; +import { common, ScriptBuilder, UInt256, WitnessScopeModel } from '@neo-one/client-common'; +import { + ArrayStackItem, + Block, + ByteStringStackItem, + ConsensusData, + Signer, + Transaction, + TriggerType, + Witness, +} from '@neo-one/csharp-core'; +import { BN } from 'bn.js'; import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; const createGetBlockScript = (hash: UInt256) => { const script = new ScriptBuilder(); @@ -13,10 +24,16 @@ const createGetBlockScript = (hash: UInt256) => { const genesisHash = common.hexToUInt256('0xecaee33262f1bc7c7c28f2b25b54a5d61d50670871f45c0c6fe755a40cbde4a8'); describe('TS <--> C# Storage Test', () => { - test('genesis block', () => { - const engine = new ApplicationEngine({ + const dispatcher = new Dispatcher(); + const engine = new ApplicationEngine(dispatcher); + beforeEach(() => { + dispatcher.reset(); + }); + + test('genesis block -- returns hash', () => { + engine.create({ trigger: TriggerType.Application, - snapshot: true, + snapshot: 'main', gas: 0, testMode: true, }); @@ -30,6 +47,62 @@ describe('TS <--> C# Storage Test', () => { const result = stack[0] as ArrayStackItem; const hashStackItem = result.value[0] as ByteStringStackItem; - expect(hashStackItem._buffer).toEqual(genesisHash); + expect(hashStackItem.value).toEqual(genesisHash); + }); + + test('add a block to the snapshot -- returns Block StackItems', () => { + 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([]), + }), + ], + }); + + 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], + }); + + const script = createGetBlockScript(block.hash); + dispatcher.withSnapshots(({ main }) => { + main.addBlock(block); + main.addTransaction(tx, block.index); + main.setHeight(block.index); + + engine.create({ + trigger: TriggerType.Application, + snapshot: 'main', + gas: 0, + testMode: true, + }); + + engine.loadScript(script); + const newState = engine.execute(); + expect(newState).toEqual('HALT'); + + const resultStack = engine.resultStack; + const arr = resultStack[0] as ArrayStackItem; + const hashFromStackItem = common.asUInt256(arr.value[0].value); + expect(hashFromStackItem).toEqual(block.hash); + }); }); }); diff --git a/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts b/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts index ac36d44d11..c149f8055c 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts @@ -10,12 +10,15 @@ import { import { BN } from 'bn.js'; import _ from 'lodash'; import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; describe('Application Engine SysCall Tests', () => { - let engine: ApplicationEngine; + const dispatcher = new Dispatcher(); + const engine = new ApplicationEngine(dispatcher); let script: ScriptBuilder; beforeEach(() => { - engine = new ApplicationEngine({ + dispatcher.reset(); + engine.create({ trigger: TriggerType.Application, gas: 0, testMode: true, @@ -86,11 +89,11 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack.length).toEqual(5); - expect((resultStack[0] as ByteStringStackItem).value).toEqual('{"key":"value"}'); - expect((resultStack[1] as ByteStringStackItem).value).toEqual('null'); - expect((resultStack[2] as ByteStringStackItem).value).toEqual('"test"'); - expect((resultStack[3] as ByteStringStackItem).value).toEqual('true'); - expect((resultStack[4] as ByteStringStackItem).value).toEqual('5'); + expect((resultStack[0] as ByteStringStackItem).asString()).toEqual('{"key":"value"}'); + expect((resultStack[1] as ByteStringStackItem).asString()).toEqual('null'); + expect((resultStack[2] as ByteStringStackItem).asString()).toEqual('"test"'); + expect((resultStack[3] as ByteStringStackItem).asString()).toEqual('true'); + expect((resultStack[4] as ByteStringStackItem).asString()).toEqual('5'); }); test('Fault -- Bad values', () => { @@ -105,12 +108,14 @@ describe('Application Engine SysCall Tests', () => { }); test('System.Callback.Invoke -- Halt', () => { - engine = new ApplicationEngine({ + engine.create({ trigger: TriggerType.Application, gas: 1, testMode: false, }); + script = new ScriptBuilder(); + script.emitPushInt(5); // Callback argument 1 script.emitPushInt(1); // Callback argument 2 script.emitPushInt(2); // ParamCount @@ -136,12 +141,14 @@ describe('Application Engine SysCall Tests', () => { }); test('System.Callback.CreateFromSyscall -- Halt', () => { - engine = new ApplicationEngine({ + engine.create({ trigger: TriggerType.Application, gas: 1, testMode: false, }); + script = new ScriptBuilder(); + script.emitPush(Buffer.from([])); script.emitPushInt(1); script.emitOp('PACK'); @@ -156,7 +163,7 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack.length).toEqual(1); const byteStringItem = engine.resultStack[0] as ByteStringStackItem; - expect(byteStringItem._buffer.toString('hex')).toEqual( + expect(byteStringItem.value.toString('hex')).toEqual( 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', ); }); @@ -175,11 +182,11 @@ describe('Application Engine SysCall Tests', () => { }); test('With Snapshot option -- Halt', () => { - engine = new ApplicationEngine({ + engine.create({ trigger: TriggerType.Application, - snapshot: true, gas: 0, testMode: true, + snapshot: 'main', }); script.emitPushUInt256(block.hash); script.emitSysCall('System.Blockchain.GetBlock'); @@ -194,7 +201,7 @@ describe('Application Engine SysCall Tests', () => { }); test('Without Snapshot option -- Fault', () => { - engine = new ApplicationEngine({ trigger: TriggerType.Application, gas: 0, testMode: true }); + engine.create({ trigger: TriggerType.Application, gas: 0, testMode: true }); script.emitPushUInt256(block.hash); script.emitSysCall('System.Blockchain.GetBlock'); diff --git a/packages/neo-one-csharp-vm/src/constants.ts b/packages/neo-one-csharp-vm/src/constants.ts deleted file mode 100644 index bd1f38eaa8..0000000000 --- a/packages/neo-one-csharp-vm/src/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -import path from 'path'; - -const APP_ROOT = 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, -}; diff --git a/packages/neo-one-csharp-vm/src/converters.ts b/packages/neo-one-csharp-vm/src/converters.ts deleted file mode 100644 index 4707b15ba5..0000000000 --- a/packages/neo-one-csharp-vm/src/converters.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* -our converters are in the same state as our types, only temporary while -we flesh out what will need to be converted going from c# to JS / from neo3 to NEO•ONE -*/ -import { common } from '@neo-one/client-common'; -import { Verifiable } from '@neo-one/csharp-core'; -import { EngineOptions } from './ApplicationEngine'; -// tslint:disable: no-null-keyword - -// TODO implement container conversion in the EngineDispatcher -export const convertContainer = (_container: Verifiable) => null; - -export const convertEngineOptions = (options: EngineOptions) => ({ - trigger: options.trigger, - container: options.container === undefined ? null : convertContainer(options.container), - snapshot: options.snapshot === undefined ? false : options.snapshot, - gas: common.fixed8FromDecimal(options.gas.toString()).toNumber(), - testMode: options.testMode, -}); diff --git a/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts b/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts deleted file mode 100644 index f4b07311d1..0000000000 --- a/packages/neo-one-csharp-vm/src/createEngineDispatcher.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { UInt160, VMState } from '@neo-one/client-common'; -import { CallFlags, TriggerType } from '@neo-one/csharp-core'; -import path from 'path'; -import { constants } from './constants'; -import { convertEngineOptions } from './converters'; -import { createCSharpDispatchInvoke, DefaultMethods, DispatchMethod } from './dispatcher'; -import { StackItemReturn } from './StackItems'; -import { ExecutionContext } from './types'; - -interface LoadScriptArgs { - readonly script: Buffer; - readonly callFlags: CallFlags; -} - -interface ExecutionEngineMethods extends DefaultMethods { - // constructor - readonly create: DispatchMethod>; - // getters - readonly gettrigger: DispatchMethod; - readonly getgasconsumed: DispatchMethod; - readonly getgasleft: DispatchMethod; - readonly getcurrentscripthash: DispatchMethod; - readonly getcallingscripthash: DispatchMethod; - readonly getentryscripthash: DispatchMethod; - readonly getnotifications: DispatchMethod; - readonly getvmstate: DispatchMethod; - readonly getresultstack: DispatchMethod; - // methods - readonly execute: DispatchMethod; - readonly loadclonedcontext: DispatchMethod; - readonly loadscript: DispatchMethod; - // misc - readonly peek: DispatchMethod; - readonly pop: DispatchMethod; - readonly dispose: DispatchMethod; -} - -const engineAssemblyOptions = { - assemblyFile: path.join(constants.CSHARP_APP_ROOT, 'EngineDispatcher.dll'), - methodName: 'Invoke', - typeName: 'NEOONE.EngineDispatcher', -}; - -export const createEngineDispatcher = () => createCSharpDispatchInvoke(engineAssemblyOptions); diff --git a/packages/neo-one-csharp-vm/src/dispatcher.ts b/packages/neo-one-csharp-vm/src/dispatcher.ts index 2bbf825186..bf667f73aa 100644 --- a/packages/neo-one-csharp-vm/src/dispatcher.ts +++ b/packages/neo-one-csharp-vm/src/dispatcher.ts @@ -1,22 +1,76 @@ -import { func, Params, Source, TSQL } from '@neo-one/edge'; +import path from 'path'; +import { ApplicationEngine, CreateOptions } from './ApplicationEngine'; +import { BaseMethods, EngineMethods, SnapshotMethods } from './Methods'; +import { SnapshotHandler } from './SnapshotHandler'; +import { DispatcherFunc } from './types'; +import { constants, createCSharpDispatchInvoke } from './utils'; -type EdgeOptions = (() => void) | string | Params | Source | TSQL; +export interface DispatcherMethods extends BaseMethods, SnapshotMethods, EngineMethods {} -// tslint:disable-next-line: no-any -export interface DispatchMethod { - readonly returnType: Return; - readonly args: Args; -} +const engineAssemblyOptions = { + assemblyFile: path.join(constants.CSHARP_APP_ROOT, 'Dispatcher.dll'), + methodName: 'Invoke', + typeName: 'NEOONE.Dispatcher', +}; -export interface DefaultMethods { - // tslint:disable-next-line: no-any - readonly [k: string]: DispatchMethod; -} +export const createDispatcher = () => createCSharpDispatchInvoke(engineAssemblyOptions); -export const createCSharpDispatchInvoke = (options: EdgeOptions) => { - const invokeFunction = func(options); +export class Dispatcher { + public readonly init: boolean; + public readonly dispatch: DispatcherFunc; - return ( - input: Methods[T]['args'] extends undefined ? { method: T } : { method: T; args: Methods[T]['args'] }, - ) => invokeFunction(input, true) as Methods[T]['returnType']; -}; + public constructor() { + this.dispatch = createDispatcher(); + this.init = this.initialize(); + } + + public withSnapshots( + func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, + ) { + const main = new SnapshotHandler(this, 'main'); + const clone = new SnapshotHandler(this, 'clone'); + + const result = func({ main, clone }); + this.resetSnapshots(); + + return result; + } + + public withApplicationEngine(options: CreateOptions, func: (engine: Omit) => T) { + const engine = new ApplicationEngine(this); + engine.create(options); + const result = func(engine); + this.disposeEngine(); + + return result; + } + + public disposeEngine(): void { + this.dispatch({ + method: 'dispose_engine', + }); + } + + public resetSnapshots(): void { + this.dispatch({ + method: 'snapshot_reset', + }); + } + + public dispose(): void { + this.dispatch({ + method: 'dispose', + }); + } + + public reset(): void { + this.dispose(); + this.initialize(); + } + + private initialize(): boolean { + return this.dispatch({ + method: 'init', + }); + } +} diff --git a/packages/neo-one-csharp-vm/src/index.ts b/packages/neo-one-csharp-vm/src/index.ts index f595f3d5c2..91a11ff1f1 100644 --- a/packages/neo-one-csharp-vm/src/index.ts +++ b/packages/neo-one-csharp-vm/src/index.ts @@ -1 +1,2 @@ export * from './ApplicationEngine'; +export * from './Dispatcher'; diff --git a/packages/neo-one-csharp-vm/src/run.ts b/packages/neo-one-csharp-vm/src/run.ts deleted file mode 100644 index cb3235004e..0000000000 --- a/packages/neo-one-csharp-vm/src/run.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { TriggerType } from '@neo-one/node-core'; -import { ApplicationEngine } from './ApplicationEngine'; -import { ScriptBuilder, common } from '@neo-one/client-common'; -import { Block } from '@neo-one/node-core'; - -const run = () => { - const script = new ScriptBuilder(); - const engine = new ApplicationEngine({ trigger: TriggerType.Application, snapshot: true, gas: 0, testMode: true }); - const block = new Block(); - script.emitPush(Buffer.from(common.ZERO_UINT256)); - script.emitSysCall('System.Blockchain.GetBlock'); - - engine.loadScript(script.build()); - const state = engine.execute(); - console.log(state); - - const stack = engine.resultStack; - console.log(stack[0]); -}; - -run(); diff --git a/packages/neo-one-csharp-vm/src/types.ts b/packages/neo-one-csharp-vm/src/types.ts index 52d46579e9..2b9919f818 100644 --- a/packages/neo-one-csharp-vm/src/types.ts +++ b/packages/neo-one-csharp-vm/src/types.ts @@ -5,3 +5,28 @@ export type ExecutionContext = any; // TODO: not implemented export type Notifications = any; + +export type SnapshotName = 'main' | 'clone'; +export type SnapshotPartial = 'blocks' | 'transactions'; + +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-csharp-vm/src/utils.ts b/packages/neo-one-csharp-vm/src/utils.ts new file mode 100644 index 0000000000..ff4792893c --- /dev/null +++ b/packages/neo-one-csharp-vm/src/utils.ts @@ -0,0 +1,21 @@ +import { func, Params, Source, TSQL } from '@neo-one/edge'; +import path from 'path'; +import { DefaultMethods, DispatcherFunc } from './types'; + +const APP_ROOT = 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 => { + const invokeFunction = func(options); + + return (input) => invokeFunction(input, true); +}; From 6ca37caffd34b8cde5489f2b1d349a4cd6a6c9af Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 31 Aug 2020 12:07:36 -0700 Subject: [PATCH 095/141] feat(vm/blockchain): Add/Update more core types for the blockchain package (#2147) * chore(vm): update node models for contracts / storage items * feat(blockchain): add storage / blockchain types --- packages/neo-one-client-common/src/crypto.ts | 2 +- .../src/models/Serializable.ts | 2 +- .../src/models/SignerModel.ts | 2 +- .../src/models/WitnessModel.ts | 2 +- .../models/transaction/TransactionModel.ts | 2 +- .../transaction/TransactionStateModel.ts | 30 + .../attribute/AttributeBaseModel.ts | 2 +- .../src/models/transaction/index.ts | 1 + .../neo-one-client-common/src/models/types.ts | 16 +- packages/neo-one-client-common/src/types.ts | 2 +- ...ContractModel.ts => ContractStateModel.ts} | 10 +- .../src/models/contract/abi/index.ts | 4 - .../src/models/contract/index.ts | 4 - .../src/models/index.ts | 4 +- .../abi => manifest}/ContractABIModel.ts | 4 +- .../ContractEventDescriptorModel.ts | 0 .../ContractFeaturesModel.ts | 0 .../ContractGroupModel.ts | 10 +- .../ContractManifestModel.ts | 31 +- .../ContractMethodDescriptorModel.ts | 7 +- .../ContractParameterDefinitionModel.ts | 0 .../ContractPermissionDescriptorModel.ts | 2 +- .../ContractPermissionModel.ts | 0 .../src/models/manifest/index.ts | 9 + .../src/models/permissions/index.ts | 3 - .../neo-one-csharp-blockchain/package.json | 1 + .../src/Blockchain.ts | 70 +- .../src/WriteBatchBlockchain.ts | 1013 +++++++++++++++++ .../neo-one-csharp-blockchain/src/errors.ts | 22 + .../neo-one-csharp-blockchain/src/verify.ts | 21 +- packages/neo-one-csharp-core/package.json | 3 +- packages/neo-one-csharp-core/src/Block.ts | 6 +- packages/neo-one-csharp-core/src/BlockBase.ts | 10 +- .../neo-one-csharp-core/src/Blockchain.ts | 37 + .../neo-one-csharp-core/src/ConsensusData.ts | 2 +- .../src/ContractIDState.ts | 45 + .../neo-one-csharp-core/src/ContractState.ts | 58 + .../neo-one-csharp-core/src/HashIndexState.ts | 53 + packages/neo-one-csharp-core/src/Header.ts | 2 +- .../neo-one-csharp-core/src/HeaderHashList.ts | 42 + .../neo-one-csharp-core/src/Serializable.ts | 10 +- packages/neo-one-csharp-core/src/Settings.ts | 32 + packages/neo-one-csharp-core/src/Storage.ts | 124 ++ .../neo-one-csharp-core/src/StorageItem.ts | 100 ++ .../neo-one-csharp-core/src/StorageKey.ts | 60 + .../neo-one-csharp-core/src/TrimmedBlock.ts | 19 +- .../neo-one-csharp-core/src/Verifiable.ts | 17 +- packages/neo-one-csharp-core/src/index.ts | 7 + .../src/manifest/ContractABI.ts | 31 + .../src/manifest/ContractEventDescriptor.ts | 15 + .../src/manifest/ContractGroup.ts | 22 + .../src/manifest/ContractManifest.ts | 68 ++ .../src/manifest/ContractMethodDescriptor.ts | 19 + .../manifest/ContractParameterDefinition.ts | 14 + .../src/manifest/ContractPermission.ts | 37 + .../manifest/ContractPermissionDescriptor.ts | 18 + .../neo-one-csharp-core/src/manifest/index.ts | 8 + .../src/transaction/Transaction.ts | 2 +- .../src/transaction/TransactionState.ts | 36 + .../src/transaction/index.ts | 1 + .../neo-one-csharp-core/src/utils/utils.ts | 19 +- packages/neo-one-node-protocol/src/Message.ts | 2 +- .../src/payload/AddrPayload.ts | 2 +- .../src/payload/FilterAddPayload.ts | 2 +- .../src/payload/FilterLoadPayload.ts | 2 +- .../src/payload/GetBlocksPayload.ts | 2 +- .../src/payload/HeadersPayload.ts | 2 +- .../src/payload/InvPayload.ts | 2 +- .../src/payload/MerkleBlockPayload.ts | 2 +- .../src/payload/NetworkAddress.ts | 2 +- .../src/payload/VersionPayload.ts | 2 +- 71 files changed, 2087 insertions(+), 126 deletions(-) create mode 100644 packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts rename packages/neo-one-client-full-common/src/models/{contract/ContractModel.ts => ContractStateModel.ts} (67%) delete mode 100644 packages/neo-one-client-full-common/src/models/contract/abi/index.ts delete mode 100644 packages/neo-one-client-full-common/src/models/contract/index.ts rename packages/neo-one-client-full-common/src/models/{contract/abi => manifest}/ContractABIModel.ts (89%) rename packages/neo-one-client-full-common/src/models/{contract/abi => manifest}/ContractEventDescriptorModel.ts (100%) rename packages/neo-one-client-full-common/src/models/{contract => manifest}/ContractFeaturesModel.ts (100%) rename packages/neo-one-client-full-common/src/models/{permissions => manifest}/ContractGroupModel.ts (58%) rename packages/neo-one-client-full-common/src/models/{contract => manifest}/ContractManifestModel.ts (86%) rename packages/neo-one-client-full-common/src/models/{contract/abi => manifest}/ContractMethodDescriptorModel.ts (85%) rename packages/neo-one-client-full-common/src/models/{contract/abi => manifest}/ContractParameterDefinitionModel.ts (100%) rename packages/neo-one-client-full-common/src/models/{permissions => manifest}/ContractPermissionDescriptorModel.ts (98%) rename packages/neo-one-client-full-common/src/models/{permissions => manifest}/ContractPermissionModel.ts (100%) create mode 100644 packages/neo-one-client-full-common/src/models/manifest/index.ts delete mode 100644 packages/neo-one-client-full-common/src/models/permissions/index.ts create mode 100644 packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts create mode 100644 packages/neo-one-csharp-blockchain/src/errors.ts create mode 100644 packages/neo-one-csharp-core/src/Blockchain.ts create mode 100644 packages/neo-one-csharp-core/src/ContractIDState.ts create mode 100644 packages/neo-one-csharp-core/src/ContractState.ts create mode 100644 packages/neo-one-csharp-core/src/HashIndexState.ts create mode 100644 packages/neo-one-csharp-core/src/HeaderHashList.ts create mode 100644 packages/neo-one-csharp-core/src/Settings.ts create mode 100644 packages/neo-one-csharp-core/src/Storage.ts create mode 100644 packages/neo-one-csharp-core/src/StorageItem.ts create mode 100644 packages/neo-one-csharp-core/src/StorageKey.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractABI.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractEventDescriptor.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractGroup.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractManifest.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractMethodDescriptor.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractParameterDefinition.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractPermission.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/ContractPermissionDescriptor.ts create mode 100644 packages/neo-one-csharp-core/src/manifest/index.ts create mode 100644 packages/neo-one-csharp-core/src/transaction/TransactionState.ts diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 751d9b214c..c5feec55f0 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -100,7 +100,7 @@ const verify = ({ readonly message: Buffer; readonly signature: Buffer; readonly publicKey: ECPoint; -}) => { +}): boolean => { if (signatureIn.length !== 64) { throw new InvalidSignatureError(signatureIn.length); } diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 6687ebd328..114cac96fd 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; } diff --git a/packages/neo-one-client-common/src/models/SignerModel.ts b/packages/neo-one-client-common/src/models/SignerModel.ts index 00a186aecf..b775317187 100644 --- a/packages/neo-one-client-common/src/models/SignerModel.ts +++ b/packages/neo-one-client-common/src/models/SignerModel.ts @@ -13,7 +13,7 @@ export interface SignerAdd { // Limits the number of AllowedContracts or AllowedGroups for deserialize export const MAX_SUB_ITEMS = 16; -export class SignerModel implements SerializableWire { +export class SignerModel implements SerializableWire { public static readonly maxSubItems = MAX_SUB_ITEMS; public readonly account: UInt160; public readonly scopes: WitnessScopeModel; 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/transaction/TransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts index abd960ca6f..fa33164fe3 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -35,7 +35,7 @@ export class TransactionModel< TAttribute extends AttributeModel = AttributeModel, TWitness extends WitnessModel = WitnessModel, TSigner extends SignerModel = SignerModel -> implements SerializableWire { +> implements SerializableWire { public static readonly VERSION: number = 0; public static readonly maxTransactionSize = MAX_TRANSACTION_SIZE; public static readonly maxValidBlockIncrement = MAX_VALID_UNTIL_BLOCK_INCREMENT; 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..611e108780 --- /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); + + 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/attribute/AttributeBaseModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeBaseModel.ts index 65bbcc70de..f900ad368e 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 @@ -3,7 +3,7 @@ import { createSerializeWire, SerializableWire, SerializeWire } from '../../Seri import { AttributeModel } from './AttributeModel'; import { AttributeTypeModel } from './AttributeTypeModel'; -export abstract class AttributeBaseModel implements SerializableWire { +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)); 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 e4eeb0abdf..17c59281c2 100644 --- a/packages/neo-one-client-common/src/models/transaction/index.ts +++ b/packages/neo-one-client-common/src/models/transaction/index.ts @@ -1,2 +1,3 @@ export * from './attribute'; export * from './TransactionModel'; +export * from './TransactionStateModel'; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 89d01197ab..6e2bf8f072 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,3 +1,4 @@ +import { SignatureString } from '../types'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; @@ -233,7 +234,7 @@ export interface TransactionReceiptJSON { export interface ConfirmedTransactionJSON extends TransactionJSON, TransactionReceiptJSON {} export type Wildcard = '*'; -export type WildcardContainerJSON = readonly T[] | Wildcard; +export type WildcardContainerJSON = readonly string[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; @@ -255,24 +256,27 @@ export interface ContractABIJSON { export interface ContractGroupJSON { readonly publicKey: string; - readonly signature: string; + readonly signature: SignatureString; } export type ContractPermissionDescriptorJSON = string; export interface ContractPermissionJSON { readonly contract: ContractPermissionDescriptorJSON; - readonly methods: WildcardContainerJSON; + readonly methods: WildcardContainerJSON; } -export type Extra = JSON; +type ExtraValue = string | number | boolean | readonly ExtraValue[]; +export interface Extra { + readonly [k: string]: ExtraValue | Extra; +} export interface ContractManifestJSON { readonly abi: ContractABIJSON; readonly groups: readonly ContractGroupJSON[]; readonly permissions: readonly ContractPermissionJSON[]; - readonly trusts: WildcardContainerJSON; - readonly safeMethods: WildcardContainerJSON; + readonly trusts: WildcardContainerJSON; + readonly safeMethods: WildcardContainerJSON; readonly features: { readonly storage: boolean; readonly payable: boolean; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index af597bd488..94992bf22c 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1472,7 +1472,7 @@ export enum ContractFeatures { HasStoragePayable = 0x05, } -export type WildcardContainer = readonly T[] | Wildcard; +export type WildcardContainer = T extends undefined ? Wildcard : readonly T[] | Wildcard; /** * Describes the contract to be invoked. Can be a contract hash, the public key of a group, or a wildcard. diff --git a/packages/neo-one-client-full-common/src/models/contract/ContractModel.ts b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts similarity index 67% rename from packages/neo-one-client-full-common/src/models/contract/ContractModel.ts rename to packages/neo-one-client-full-common/src/models/ContractStateModel.ts index 53e3ced2a4..7b2a75726c 100644 --- a/packages/neo-one-client-full-common/src/models/contract/ContractModel.ts +++ b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts @@ -1,14 +1,14 @@ import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire } from '@neo-one/client-common'; -import { ContractManifestModel } from './ContractManifestModel'; +import { ContractManifestModel } from './manifest'; -export interface ContractModelAdd { +export interface ContractStateModelAdd { readonly id: number; readonly script: Buffer; readonly manifest: TContractManifest; } -export class ContractModel - implements SerializableWire { +export class ContractStateModel + implements SerializableWire { public readonly id: number; public readonly script: Buffer; public readonly manifest: TContractManifest; @@ -16,7 +16,7 @@ export class ContractModel) { + public constructor({ script, manifest, id }: ContractStateModelAdd) { this.id = id; this.script = script; this.manifest = manifest; diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/index.ts b/packages/neo-one-client-full-common/src/models/contract/abi/index.ts deleted file mode 100644 index 3eeb5c14bf..0000000000 --- a/packages/neo-one-client-full-common/src/models/contract/abi/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './ContractABIModel'; -export * from './ContractEventDescriptorModel'; -export * from './ContractMethodDescriptorModel'; -export * from './ContractParameterDefinitionModel'; diff --git a/packages/neo-one-client-full-common/src/models/contract/index.ts b/packages/neo-one-client-full-common/src/models/contract/index.ts deleted file mode 100644 index 65c8a004ba..0000000000 --- a/packages/neo-one-client-full-common/src/models/contract/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './ContractFeaturesModel'; -export * from './ContractManifestModel'; -export * from './ContractModel'; -export * from './abi'; 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 aade65cb56..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,3 +1,3 @@ export * from './BaseState'; -export * from './contract'; -export * from './permissions'; +export * from './ContractStateModel'; +export * from './manifest'; diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts similarity index 89% rename from packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts index 1126069eee..2bf5dfe20a 100644 --- a/packages/neo-one-client-full-common/src/models/contract/abi/ContractABIModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts @@ -1,4 +1,4 @@ -import { common, ContractABIJSON, SerializableJSON, UInt160 } from '@neo-one/client-common'; +import { ContractABIJSON, JSONHelper, SerializableJSON, UInt160 } from '@neo-one/client-common'; import { ContractEventDescriptorModel } from './ContractEventDescriptorModel'; import { ContractMethodDescriptorModel } from './ContractMethodDescriptorModel'; @@ -27,7 +27,7 @@ export class ContractABIModel< public serializeJSON(): ContractABIJSON { return { - hash: common.uInt160ToString(this.hash), + 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/contract/abi/ContractEventDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractEventDescriptorModel.ts similarity index 100% rename from packages/neo-one-client-full-common/src/models/contract/abi/ContractEventDescriptorModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractEventDescriptorModel.ts diff --git a/packages/neo-one-client-full-common/src/models/contract/ContractFeaturesModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts similarity index 100% rename from packages/neo-one-client-full-common/src/models/contract/ContractFeaturesModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts diff --git a/packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts similarity index 58% rename from packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts index 4f9de18693..89d1fe82e2 100644 --- a/packages/neo-one-client-full-common/src/models/permissions/ContractGroupModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts @@ -1,13 +1,13 @@ -import { common, ContractGroupJSON, ECPoint, SerializableJSON, SignatureString } from '@neo-one/client-common'; +import { ContractGroupJSON, ECPoint, JSONHelper, SerializableJSON } from '@neo-one/client-common'; export interface ContractGroupModelAdd { readonly publicKey: ECPoint; - readonly signature: SignatureString; + readonly signature: Buffer; } export class ContractGroupModel implements SerializableJSON { public readonly publicKey: ECPoint; - public readonly signature: SignatureString; + public readonly signature: Buffer; public constructor({ publicKey, signature }: ContractGroupModelAdd) { this.publicKey = publicKey; @@ -16,8 +16,8 @@ export class ContractGroupModel implements SerializableJSON { public serializeJSON(): ContractGroupJSON { return { - publicKey: common.ecPointToString(this.publicKey), - signature: this.signature, + publicKey: JSONHelper.writeECPoint(this.publicKey), + signature: JSONHelper.writeBuffer(this.signature), }; } } diff --git a/packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts similarity index 86% rename from packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts index 842fb92083..a0e6f9e3e5 100644 --- a/packages/neo-one-client-full-common/src/models/contract/ContractManifestModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -4,6 +4,7 @@ import { ContractManifestJSON, createSerializeWire, Extra, + JSONHelper, SerializableJSON, SerializableWire, SerializeWire, @@ -12,9 +13,10 @@ import { utils, WildcardContainer, } from '@neo-one/client-common'; -import { ContractGroupModel, ContractPermissionModel } from '../permissions'; -import { ContractABIModel } from './abi'; +import { ContractABIModel } from './ContractABIModel'; import { ContractFeaturesModel, HasPayable, HasStorage } from './ContractFeaturesModel'; +import { ContractGroupModel } from './ContractGroupModel'; +import { ContractPermissionModel } from './ContractPermissionModel'; export interface ContractManifestModelAdd< TContractABI extends ContractABIModel = ContractABIModel, @@ -26,8 +28,8 @@ export interface ContractManifestModelAdd< readonly supportedStandards: readonly string[]; readonly abi: TContractABI; readonly permissions: readonly TContractPermission[]; - readonly trusts: readonly UInt160[]; - readonly safeMethods: readonly string[]; + readonly trusts: WildcardContainer; + readonly safeMethods: WildcardContainer; readonly extra?: Extra; } @@ -35,15 +37,8 @@ export class ContractManifestModel< TContractABI extends ContractABIModel = ContractABIModel, TContractGroup extends ContractGroupModel = ContractGroupModel, TContractPermission extends ContractPermissionModel = ContractPermissionModel -> implements SerializableWire, SerializableJSON { - public get hash(): UInt160 { - return this.hashInternal(); - } - - public get hashHex(): UInt160Hex { - return this.hashHexInternal(); - } - public readonly maxLength = common.MAX_MANIFEST_LENGTH; +> implements SerializableWire, SerializableJSON { + public static readonly maxLength = common.MAX_MANIFEST_LENGTH; public readonly groups: readonly TContractGroup[]; public readonly features: ContractFeaturesModel; public readonly supportedStandards: readonly string[]; @@ -80,6 +75,14 @@ export class ContractManifestModel< 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()), @@ -90,7 +93,7 @@ export class ContractManifestModel< 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) => common.uInt160ToString(trust)), + trusts: common.isWildcard(this.trusts) ? this.trusts : this.trusts.map((trust) => JSONHelper.writeUInt160(trust)), safeMethods: this.safeMethods, extra: this.extra, }; diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts similarity index 85% rename from packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts index b69170acb1..0522453555 100644 --- a/packages/neo-one-client-full-common/src/models/contract/abi/ContractMethodDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts @@ -15,11 +15,12 @@ export interface ContractMethodDescriptorModelAdd< } export class ContractMethodDescriptorModel< - TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel -> extends ContractEventDescriptorModel + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel + > + extends ContractEventDescriptorModel implements SerializableJSON { public readonly returnType: ContractParameterTypeModel; - private readonly offset?: number; + public readonly offset?: number; public constructor(options: ContractMethodDescriptorModelAdd) { super(options); diff --git a/packages/neo-one-client-full-common/src/models/contract/abi/ContractParameterDefinitionModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractParameterDefinitionModel.ts similarity index 100% rename from packages/neo-one-client-full-common/src/models/contract/abi/ContractParameterDefinitionModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractParameterDefinitionModel.ts diff --git a/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts similarity index 98% rename from packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts index 2e9f36ca19..055b1e4c33 100644 --- a/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts @@ -14,7 +14,7 @@ export interface ContractPermissionDescriptorModelAdd { export class ContractPermissionDescriptorModel implements SerializableJSON { public readonly hashOrGroup: UInt160 | ECPoint | Wildcard; - public constructor({ hashOrGroup }: ContractPermissionDescriptorModelAdd) { + public constructor({ hashOrGroup }: ContractPermissionDescriptorModelAdd = {}) { this.hashOrGroup = hashOrGroup === undefined ? '*' : hashOrGroup; } diff --git a/packages/neo-one-client-full-common/src/models/permissions/ContractPermissionModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionModel.ts similarity index 100% rename from packages/neo-one-client-full-common/src/models/permissions/ContractPermissionModel.ts rename to packages/neo-one-client-full-common/src/models/manifest/ContractPermissionModel.ts 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..5377d49665 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/index.ts @@ -0,0 +1,9 @@ +export * from './ContractABIModel'; +export * from './ContractEventDescriptorModel'; +export * from './ContractFeaturesModel'; +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/permissions/index.ts b/packages/neo-one-client-full-common/src/models/permissions/index.ts deleted file mode 100644 index 9724d918e2..0000000000 --- a/packages/neo-one-client-full-common/src/models/permissions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './ContractGroupModel'; -export * from './ContractPermissionDescriptorModel'; -export * from './ContractPermissionModel'; diff --git a/packages/neo-one-csharp-blockchain/package.json b/packages/neo-one-csharp-blockchain/package.json index 94c90f23df..1c4a007db5 100644 --- a/packages/neo-one-csharp-blockchain/package.json +++ b/packages/neo-one-csharp-blockchain/package.json @@ -16,6 +16,7 @@ "@neo-one/csharp-core": "^2.7.0", "@neo-one/csharp-vm": "^2.7.0", "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^2.6.1", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", diff --git a/packages/neo-one-csharp-blockchain/src/Blockchain.ts b/packages/neo-one-csharp-blockchain/src/Blockchain.ts index 85a684c87a..16a1252078 100644 --- a/packages/neo-one-csharp-blockchain/src/Blockchain.ts +++ b/packages/neo-one-csharp-blockchain/src/Blockchain.ts @@ -1,12 +1,25 @@ -import { Block, VM } from '@neo-one/csharp-core'; +import { Block, Blockchain as BlockchainType, BlockchainSettings, Header, Storage, VM } from '@neo-one/csharp-core'; import PriorityQueue from 'js-priority-queue'; +import { Subject } from 'rxjs'; +import { GenesisBlockNotRegisteredError } from './errors'; import { verifyWitnesses } from './verify'; +import { WriteBatchBlockchain } from './WriteBatchBlockchain'; -export interface BlockchainOptions { +// TODO: bring logger over when its time; +const logger = console; + +export interface CreateBlockchainOptions { + readonly settings: BlockchainSettings; readonly storage: Storage; readonly vm: VM; } +export interface BlockchainOptions extends CreateBlockchainOptions { + readonly currentBlock: Block | undefined; + readonly previousBlock: Block | undefined; + readonly currentHeader: Header | undefined; +} + interface Entry { readonly block: Block; readonly resolve: () => void; @@ -15,18 +28,27 @@ interface Entry { } export class Blockchain { + public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { + throw new Error('not implemented'); + } + private readonly settings: BlockchainSettings; private readonly storage: Storage; private readonly vm: VM; - private readonly mutableBlockQueue: PriorityQueue = new PriorityQueue({ + + private mutableBlockQueue: PriorityQueue = new PriorityQueue({ comparator: (a, b) => a.block.index - b.block.index, }); private mutableCurrentBlock: Block | undefined; - private readonly mutableInQueue: Set = new Set(); - private readonly mutableRunning = false; + private mutablePreviousBlock: Block | undefined; + private mutableCurrentHeader: Header | undefined; + private mutablePersistingBlocks = false; + private mutableInQueue: Set = new Set(); + private mutableRunning = false; private mutableDoneRunningResolve: (() => void) | undefined; - private readonly mutableBlock$: Subject = new Subject(); + private mutableBlock$: Subject = new Subject(); public constructor(options: BlockchainOptions) { + this.settings = options.settings; this.storage = options.storage; this.vm = options.vm; } @@ -44,7 +66,7 @@ export class Blockchain { } // TODO: make sure all of this storage is implemented - public get snapshotMethods() { + public get storageMethods() { return { tryGetBlock: this.storage.block.tryGet, tryGetHeader: this.storage.header.tryGet, @@ -54,7 +76,7 @@ export class Blockchain { } public async verifyBlock(block: Block): Promise { - const verification = await block.verify(this.snapshotMethods, verifyWitnesses); + const verification = await block.verify(this.storageMethods, verifyWitnesses); if (!verification) { // TODO: implement a makeError throw new Error('Block Verification Failed'); @@ -103,7 +125,7 @@ export class Blockchain { while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { const entryNonNull = entry; const logData = { - [Labels.NEO_BLOCK_INDEX]: entry.block.index, + // [Labels.NEO_BLOCK_INDEX]: entry.block.index, // TODO: bring Label over name: 'neo_blockchain_persist_block_top_level', }; try { @@ -137,17 +159,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(); } @@ -155,6 +177,19 @@ export class Blockchain { return undefined; } + private start(): void { + this.mutableBlock$ = new Subject(); + this.mutablePersistingBlocks = false; + this.mutableBlockQueue = new PriorityQueue({ + comparator: (a, b) => a.block.index - b.block.index, + }); + + this.mutableInQueue = new Set(); + this.mutableDoneRunningResolve = undefined; + this.mutableRunning = true; + logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); + } + private async persistBlockInternal(block: Block, verify?: boolean): Promise { if (verify) { await this.verifyBlock(block); @@ -169,4 +204,15 @@ export class Blockchain { this.mutableCurrentBlock = block; this.mutableCurrentHeader = block.header; } + + private createWriteBlockchain(): WriteBatchBlockchain { + return new WriteBatchBlockchain({ + settings: this.settings, + currentBlock: this.mutableCurrentBlock, + currentHeader: this.mutableCurrentHeader, + storage: this.storage, + vm: this.vm, + getValidators: this.getValidators, + }); + } } diff --git a/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts new file mode 100644 index 0000000000..21ebd1f065 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts @@ -0,0 +1,1013 @@ +// 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, + Contract, + ContractKey, + Header, + Input, + InvocationData, + InvocationDataKey, + InvocationResultSuccess, + LogAction, + NotificationAction, + Output, + ScriptContainerType, + StorageChangeAdd, + StorageChangeDelete, + StorageChangeModify, + StorageItem, + StorageItemKey, + StorageItemsKey, + StorageItemUpdate, + Transaction, + TransactionData, + TransactionDataKey, + TransactionDataUpdate, + TransactionKey, + TransactionType, + TriggerType, + Validator, + ValidatorKey, + ValidatorsCount, + ValidatorsCountUpdate, + ValidatorUpdate, + VM, + WriteBlockchain, +} from '@neo-one/csharp-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]); + }, + onSetVotes: ({ address, votes }) => { + voteUpdates.push([address, votes]); + }, + }, + + 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]), + 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-csharp-blockchain/src/errors.ts b/packages/neo-one-csharp-blockchain/src/errors.ts new file mode 100644 index 0000000000..029038c2e3 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/errors.ts @@ -0,0 +1,22 @@ +import { makeErrorWithCode } from '@neo-one/utils'; + +export const GenesisBlockNotRegisteredError = makeErrorWithCode( + 'GENESIS_BLOCK_NOT_REGISTERED', + () => 'Genesis block was not registered with storage.', +); +export const ScriptVerifyError = makeErrorWithCode('SCRIPT_VERIFY', (message: string) => message); +export const WitnessVerifyError = makeErrorWithCode('WITNESS_VERIFY', () => 'Witness verification failed.'); +export const UnknownVerifyError = makeErrorWithCode('UNKNOWN_VERIFY', (message: string) => message); +export const InvalidClaimError = makeErrorWithCode( + 'INVALID_CLAIM', + (asset: string, governingHash: string) => + `Invalid Claim. Coin with asset: ${asset} does not match governing hash: ${governingHash}`, +); +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.`, +); diff --git a/packages/neo-one-csharp-blockchain/src/verify.ts b/packages/neo-one-csharp-blockchain/src/verify.ts index ca1ea96e05..540371d7db 100644 --- a/packages/neo-one-csharp-blockchain/src/verify.ts +++ b/packages/neo-one-csharp-blockchain/src/verify.ts @@ -2,7 +2,8 @@ import { UInt160 } from '@neo-one/client-common'; import { BooleanStackItem, CallFlags, - SnapshotMethods, + ContractMethodDescriptor, + StorageMethods, TriggerType, Verifiable, VerifyResult, @@ -19,12 +20,12 @@ interface ApplicationEngineVerifyOptions { const getApplicationEngineVerifyOptions = async ( verification: Buffer, - snapshot: SnapshotMethods, + storage: StorageMethods, hash: UInt160, scriptHash: UInt160, ): Promise => { if (verification.length === 0) { - const contractState = await snapshot.tryGetContract(hash); + const contractState = await storage.tryGetContract(hash); if (contractState === undefined) { // TODO: implement an error throw new Error('Failed to fetch contract from storage'); @@ -61,7 +62,7 @@ export const verifyWithApplicationEngine = ( offset: number, init?: ContractMethodDescriptor, ): VerifyResult => - withApplicationEngine({ trigger: TriggerType.Verification, container: verifiable, snapshot: true, gas }, (engine) => { + withApplicationEngine({ trigger: TriggerType.Verification, container: verifiable, storage: true, gas }, (engine) => { engine.loadScript(verification); engine.loadClonedContext(offset); if (init !== undefined) { @@ -85,7 +86,7 @@ export const verifyWithApplicationEngine = ( export const tryVerifyHash = async ( hash: UInt160, index: number, - snapshot: SnapshotMethods, + storage: StorageMethods, verifiable: Verifiable, gas: number, ): Promise => { @@ -93,7 +94,7 @@ export const tryVerifyHash = async ( try { const { verification, offset, init } = await getApplicationEngineVerifyOptions( verificationScript, - snapshot, + storage, hash, scriptHash, ); @@ -106,7 +107,7 @@ export const tryVerifyHash = async ( export const verifyWitnesses = async ( verifiable: Verifiable, - snapshot: SnapshotMethods, + storage: StorageMethods, gasIn: number, ): Promise => { if (gasIn < 0) { @@ -117,7 +118,7 @@ export const verifyWitnesses = async ( let hashes: readonly UInt160[]; try { - hashes = await verifiable.getScriptHashesForVerifying(snapshot); + hashes = await verifiable.getScriptHashesForVerifying(storage); } catch { return false; } @@ -139,10 +140,10 @@ export const verifyWitnesses = async ( } return { - next: tryVerifyHash(hash, index, snapshot, verifiable, newGas), + next: tryVerifyHash(hash, index, storage, verifiable, newGas), previous: accPrevious && result, }; - }, Promise.resolve({ next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true })); + }, Promise.resolve({ next: tryVerifyHash(hashes[0], 0, storage, verifiable, gas), previous: true })); const { result: finalResult } = await next; diff --git a/packages/neo-one-csharp-core/package.json b/packages/neo-one-csharp-core/package.json index dac8c8c7f3..f57e6989bb 100644 --- a/packages/neo-one-csharp-core/package.json +++ b/packages/neo-one-csharp-core/package.json @@ -17,7 +17,8 @@ "@neo-one/utils": "^2.6.1", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", - "lodash": "^4.17.15" + "lodash": "^4.17.15", + "rxjs": "^6.5.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-csharp-core/src/Block.ts b/packages/neo-one-csharp-core/src/Block.ts index cc55b7b4a1..2cb619f85a 100644 --- a/packages/neo-one-csharp-core/src/Block.ts +++ b/packages/neo-one-csharp-core/src/Block.ts @@ -30,10 +30,6 @@ export interface BlockAdd extends Omit { readonly transactions: readonly Transaction[]; } -export interface BlockKey { - readonly hashOrIndex: UInt256 | number; -} - // export interface BlockVerifyOptions { // readonly genesisBlock: Block; // readonly tryGetBlock: (block: BlockKey) => Promise; @@ -65,7 +61,7 @@ const getCombinedModels = ( return init.concat(transactions); }; -export class Block extends BlockBase implements SerializableWire, SerializableJSON { +export class Block extends BlockBase implements SerializableWire, 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 { diff --git a/packages/neo-one-csharp-core/src/BlockBase.ts b/packages/neo-one-csharp-core/src/BlockBase.ts index 50666b4cd4..34d1c739fe 100644 --- a/packages/neo-one-csharp-core/src/BlockBase.ts +++ b/packages/neo-one-csharp-core/src/BlockBase.ts @@ -16,7 +16,7 @@ import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; import { utils } from './utils'; -import { SnapshotMethods, VerifyWitnesses } from './Verifiable'; +import { StorageMethods, VerifyWitnesses } from './Verifiable'; import { Witness } from './Witness'; export interface BlockBaseAdd { @@ -78,7 +78,7 @@ export abstract class BlockBase implements EquatableKey { public readonly timestamp: BN; public readonly index: number; public readonly nextConsensus: UInt160; - public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: SnapshotMethods) => { + public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: StorageMethods) => { if (this.previousHash === common.ZERO_UINT256) { return [this.witness.scriptHash]; } @@ -198,8 +198,8 @@ export abstract class BlockBase implements EquatableKey { }; } - public async verify(snapshot: SnapshotMethods, verifyWitnesses: VerifyWitnesses) { - const prevHeader = await snapshot.tryGetHeader(this.previousHash); + public async verify(storage: StorageMethods, verifyWitnesses: VerifyWitnesses) { + const prevHeader = await storage.tryGetHeader(this.previousHash); if (prevHeader === undefined) { return false; } @@ -212,7 +212,7 @@ export abstract class BlockBase implements EquatableKey { return false; } - return verifyWitnesses(this, snapshot, 1); + return verifyWitnesses(this, storage, 1); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-csharp-core/src/Blockchain.ts b/packages/neo-one-csharp-core/src/Blockchain.ts new file mode 100644 index 0000000000..70083e734b --- /dev/null +++ b/packages/neo-one-csharp-core/src/Blockchain.ts @@ -0,0 +1,37 @@ +import { Observable } from 'rxjs'; +import { Block } from './Block'; +import { Header } from './Header'; +import { DeserializeWireContext, SerializeJSONContext } from './Serializable'; +import { BlockchainSettings } from './Settings'; +import { BlockchainStorage } from './Storage'; +import { Transaction } from './transaction'; +import { VerifyWitnesses } from './Verifiable'; + +// tslint:disable-next-line: no-any TODO: implement something here +type CallReceipt = any; + +export interface Blockchain extends BlockchainStorage { + readonly settings: BlockchainSettings; + readonly deserializeWireContext: DeserializeWireContext; + readonly serializeJSONContext: SerializeJSONContext; + // readonly feeContext: FeeContext; + + readonly currentBlock: Block; + readonly previousBlock: Block | undefined; + readonly currentHeader: Header; + readonly currentBlockIndex: number; + readonly block$: Observable; + readonly isPersistingBlock: boolean; + + readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; + readonly persistHeaders: (headers: readonly Header[]) => Promise; + + readonly verifyWitnesses: VerifyWitnesses; + + readonly invokeScript: (script: Buffer) => Promise; + readonly invokeTransaction: (transaction: Transaction) => Promise; + + readonly updateSettings: (settings: BlockchainSettings) => void; + readonly stop: () => Promise; + readonly reset: () => Promise; +} diff --git a/packages/neo-one-csharp-core/src/ConsensusData.ts b/packages/neo-one-csharp-core/src/ConsensusData.ts index 2891674eb7..33dcfc903f 100644 --- a/packages/neo-one-csharp-core/src/ConsensusData.ts +++ b/packages/neo-one-csharp-core/src/ConsensusData.ts @@ -15,7 +15,7 @@ export interface ConsensusDataAdd { readonly nonce: BN; } -export class ConsensusData implements SerializableWire, SerializableJSON { +export class ConsensusData implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusData { const { reader } = options; const primaryIndex = reader.readVarUIntLE(DEFAULT_VALIDATORS_COUNT.subn(1)).toNumber(); diff --git a/packages/neo-one-csharp-core/src/ContractIDState.ts b/packages/neo-one-csharp-core/src/ContractIDState.ts new file mode 100644 index 0000000000..0743d5ef2c --- /dev/null +++ b/packages/neo-one-csharp-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); + + public constructor({ nextId }: ContractIDStateAdd) { + this.nextId = nextId; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.nextId); + } +} diff --git a/packages/neo-one-csharp-core/src/ContractState.ts b/packages/neo-one-csharp-core/src/ContractState.ts new file mode 100644 index 0000000000..d3d44e13a1 --- /dev/null +++ b/packages/neo-one-csharp-core/src/ContractState.ts @@ -0,0 +1,58 @@ +import { common, createSerializeWire, crypto, IOHelper, UInt160 } from '@neo-one/client-common'; +import { ContractStateModel } from '@neo-one/client-full-common'; +import { ContractManifest } from './manifest'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface ContractStateAdd { + readonly id: number; + readonly script: Buffer; + readonly manifest: ContractManifest; +} + +export type ContractKey = UInt160; + +export class ContractState extends ContractStateModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractState { + const { reader } = options; + const id = reader.readUInt32LE(); + const script = reader.readVarBytesLE(); + const manifest = ContractManifest.deserializeWireBase(options); + + return new this({ + id, + script, + manifest, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): ContractState { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + private readonly scriptHashInternal = utils.lazy(() => common.asUInt160(crypto.hash160(this.script))); + private readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfVarBytesLE(this.script) + this.manifest.size, + ); + + public get scriptHash() { + return this.scriptHashInternal(); + } + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new ContractState({ + id: this.id, + script: this.script, + manifest: this.manifest, + }); + } +} diff --git a/packages/neo-one-csharp-core/src/HashIndexState.ts b/packages/neo-one-csharp-core/src/HashIndexState.ts new file mode 100644 index 0000000000..7031c9b284 --- /dev/null +++ b/packages/neo-one-csharp-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); + + 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-csharp-core/src/Header.ts b/packages/neo-one-csharp-core/src/Header.ts index d67b1aa27d..67af61e079 100644 --- a/packages/neo-one-csharp-core/src/Header.ts +++ b/packages/neo-one-csharp-core/src/Header.ts @@ -12,7 +12,7 @@ import { BinaryReader, utils } from './utils'; export type HeaderAdd = BlockBaseAdd; -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.deserializeWireBase(options); diff --git a/packages/neo-one-csharp-core/src/HeaderHashList.ts b/packages/neo-one-csharp-core/src/HeaderHashList.ts new file mode 100644 index 0000000000..1e8aacd4e4 --- /dev/null +++ b/packages/neo-one-csharp-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); + public constructor({ hashes }: HeaderHashListAdd) { + this.hashes = hashes; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeArray(this.hashes, writer.writeUInt256); + } +} diff --git a/packages/neo-one-csharp-core/src/Serializable.ts b/packages/neo-one-csharp-core/src/Serializable.ts index 5b0fd0e2a5..5b5aa30056 100644 --- a/packages/neo-one-csharp-core/src/Serializable.ts +++ b/packages/neo-one-csharp-core/src/Serializable.ts @@ -1,9 +1,9 @@ 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 { Action } from './action'; +// import { Asset } from './Asset'; +// import { Contract } from './Contract'; +// import { InvocationResult } from './invocationResult'; +// import { StorageChange } from './storageChange'; import { BinaryReader } from './utils'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; diff --git a/packages/neo-one-csharp-core/src/Settings.ts b/packages/neo-one-csharp-core/src/Settings.ts new file mode 100644 index 0000000000..76ea62d9e9 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Settings.ts @@ -0,0 +1,32 @@ +import { ECPoint } from '@neo-one/client-common'; +import { Block } from './Block'; +import { BlockchainStorage } from './Storage'; + +export interface BlockchainSettings extends ProtocolSettings { + readonly genesisBlock: Block; + readonly decrementInterval: number; + readonly generationAmount: readonly number[]; + readonly privateKeyVersion: number; + readonly standbyValidators: readonly ECPoint[]; + readonly memPoolSize: number; +} +export interface ProtocolSettings { + readonly messageMagic: number; + readonly addressVersion: number; + readonly standbyCommittee: readonly string[]; + readonly committeeMembersCount: number; + readonly validatorsCount: number; + readonly millisecondsPerBlock: number; + readonly memoryPoolMaxTransactions: number; +} + +export interface PolicySettings { + readonly getMaxBlockSize: (storages: BlockchainStorage['storages']) => Promise; + readonly getMaxTransactionsPerBlock: (storages: BlockchainStorage['storages']) => Promise; + readonly getMaxBlockSystemFee: (storages: BlockchainStorage['storages']) => Promise; + readonly getValidators: (storages: BlockchainStorage['storages']) => Promise; +} + +export interface NetworkSettings { + readonly seeds: readonly string[]; +} diff --git a/packages/neo-one-csharp-core/src/Storage.ts b/packages/neo-one-csharp-core/src/Storage.ts new file mode 100644 index 0000000000..faf0f8f266 --- /dev/null +++ b/packages/neo-one-csharp-core/src/Storage.ts @@ -0,0 +1,124 @@ +import { Observable } from 'rxjs'; +import { ContractIDState } from './ContractIDState'; +import { ContractKey, ContractState } from './ContractState'; +import { HashIndexState } from './HashIndexState'; +import { HeaderHashList, HeaderKey } from './HeaderHashList'; +import { StorageItem } from './StorageItem'; +import { StorageKey } from './StorageKey'; +import { TransactionKey, TransactionState } from './transaction'; +import { BlockKey, TrimmedBlock } from './TrimmedBlock'; + +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 {} + +/* 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 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 type AddChange = + | { readonly type: 'block'; readonly value: TrimmedBlock } + | { readonly type: 'transaction'; readonly value: TransactionState } + | { readonly type: 'contract'; readonly value: ContractState } + | { readonly type: 'storage'; readonly value: StorageItem } + | { readonly type: 'headerHashList'; readonly value: HeaderHashList } + | { readonly type: 'blockHashIndex'; readonly value: HashIndexState } + | { readonly type: 'headerHashIndex'; readonly value: HashIndexState } + | { readonly type: 'contractID'; readonly value: ContractIDState }; + +export type DeleteChange = + | { readonly type: 'contract'; readonly value: ContractKey } + | { readonly type: 'storage'; readonly value: StorageKey }; + +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 transactions: ReadStorage; + readonly contracts: ReadStorage; + readonly storages: ReadGetAllStorage, StorageItem>; + readonly headerHashList: ReadStorage; + readonly blockHashIndex: ReadMetadataStorage; + readonly headerHashIndex: ReadMetadataStorage; + readonly contractID: ReadMetadataStorage; +} + +export interface Storage extends BlockchainStorage { + readonly block: LatestReadStorage; + readonly headerHashList: LatestReadStorage; + readonly commit: (changeSet: ChangeSet) => Promise; + readonly close: () => Promise; + readonly reset: () => Promise; +} diff --git a/packages/neo-one-csharp-core/src/StorageItem.ts b/packages/neo-one-csharp-core/src/StorageItem.ts new file mode 100644 index 0000000000..17e9cb670c --- /dev/null +++ b/packages/neo-one-csharp-core/src/StorageItem.ts @@ -0,0 +1,100 @@ +import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from './Serializable'; +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 StorageItemValueAdd { + readonly value: Buffer; + readonly isConstant: boolean; +} + +// tslint:disable-next-line: no-any +const isStorageItemCacheAdd = (value: any): value is StorageItemCacheAdd => + value?.cache !== undefined && BN.isBN(value.cache); + +type StorageItemAdd = StorageItemCacheAdd | StorageItemValueAdd; + +export class StorageItem implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageItem { + const { reader } = options; + const value = reader.readVarBytesLE(); + const isConstant = reader.readBoolean(); + + return new this({ + value, + isConstant, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): StorageItem { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + 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 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 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) { + writer.writeVarBytesLE(this.value); + writer.writeBoolean(this.isConstant); + } + + public clone() { + return new StorageItem({ + value: this.value, + isConstant: this.isConstant, + }); + } +} diff --git a/packages/neo-one-csharp-core/src/StorageKey.ts b/packages/neo-one-csharp-core/src/StorageKey.ts new file mode 100644 index 0000000000..56d2de7b72 --- /dev/null +++ b/packages/neo-one-csharp-core/src/StorageKey.ts @@ -0,0 +1,60 @@ +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.readUInt32LE(); + 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), + }); + } + + // TODO: Verify this + public static createSearchPrefix(id: number, prefix: Buffer) { + return Buffer.concat([Buffer.from([id]), 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.writeUInt32LE(this.id); + writer.writeBytes(this.key); + } +} diff --git a/packages/neo-one-csharp-core/src/TrimmedBlock.ts b/packages/neo-one-csharp-core/src/TrimmedBlock.ts index e51e16d606..ec7f6d0cd5 100644 --- a/packages/neo-one-csharp-core/src/TrimmedBlock.ts +++ b/packages/neo-one-csharp-core/src/TrimmedBlock.ts @@ -4,7 +4,6 @@ import { IOHelper, JSONHelper, SerializableWire, - Transaction, TrimmedBlockJSON, UInt256, } from '@neo-one/client-common'; @@ -13,6 +12,8 @@ import { BlockBase, BlockBaseAdd } from './BlockBase'; import { ConsensusData } from './ConsensusData'; import { Header } from './Header'; import { DeserializeWireBaseOptions, SerializeJSONContext } from './Serializable'; +import { ReadStorage } from './Storage'; +import { TransactionKey, TransactionState } from './transaction'; import { utils } from './utils'; export interface TrimmedBlockAdd extends BlockBaseAdd { @@ -20,7 +21,9 @@ export interface TrimmedBlockAdd extends BlockBaseAdd { readonly hashes: readonly UInt256[]; } -export class TrimmedBlock extends BlockBase implements SerializableWire { +export type BlockKey = UInt256; + +export class TrimmedBlock extends BlockBase implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { const { version, @@ -30,7 +33,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire>(cache: Cache) { + public async getBlock(storage: ReadStorage) { return new Block({ version: this.version, previousHash: this.previousHash, @@ -91,7 +94,13 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { + const state = await storage.get(hash); + + return state.transaction; + }), + ), }); } diff --git a/packages/neo-one-csharp-core/src/Verifiable.ts b/packages/neo-one-csharp-core/src/Verifiable.ts index 2b686c1040..d735c1ebac 100644 --- a/packages/neo-one-csharp-core/src/Verifiable.ts +++ b/packages/neo-one-csharp-core/src/Verifiable.ts @@ -1,18 +1,9 @@ -import { UInt160, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Header } from './Header'; -import { TrimmedBlock } from './TrimmedBlock'; +import { UInt160 } from '@neo-one/client-common'; +import { BlockchainStorage } from './Storage'; import { Witness } from './Witness'; -export interface SnapshotMethods { - readonly tryGetBlock: (hash: UInt256) => Promise; - readonly tryGetHeader: (hash: UInt256) => Promise
; - readonly tryGetContract: (hash: UInt160) => Promise; - readonly tryGetStorage: (key: StorageKey) => Promise; -} - export interface Verifiable { - readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; + readonly getScriptHashesForVerifying: (storage: BlockchainStorage) => Promise; readonly witnesses: readonly Witness[]; } @@ -21,4 +12,4 @@ export interface VerifyResult { readonly result: boolean; } -export type VerifyWitnesses = (verifiable: Verifiable, snapshot: SnapshotMethods, gasIn: number) => Promise; +export type VerifyWitnesses = (verifiable: Verifiable, storage: BlockchainStorage, gasIn: number) => Promise; diff --git a/packages/neo-one-csharp-core/src/index.ts b/packages/neo-one-csharp-core/src/index.ts index af800b6ac9..435de06a9d 100644 --- a/packages/neo-one-csharp-core/src/index.ts +++ b/packages/neo-one-csharp-core/src/index.ts @@ -1,12 +1,19 @@ export * from './Block'; export * from './BlockBase'; +export * from './Blockchain'; export * from './ConsensusData'; +export * from './manifest'; +export * from './ContractState'; export * from './constants'; export * from './crypto'; export * from './Equatable'; +export * from './HashIndexState'; export * from './Header'; +export * from './HeaderHashList'; export * from './Serializable'; +export * from './Settings'; export * from './Signer'; +export * from './Storage'; export * from './StackItems'; export * from './transaction'; export * from './TrimmedBlock'; diff --git a/packages/neo-one-csharp-core/src/manifest/ContractABI.ts b/packages/neo-one-csharp-core/src/manifest/ContractABI.ts new file mode 100644 index 0000000000..1f72a2b304 --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/manifest/ContractEventDescriptor.ts b/packages/neo-one-csharp-core/src/manifest/ContractEventDescriptor.ts new file mode 100644 index 0000000000..d5afd9b948 --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/manifest/ContractGroup.ts b/packages/neo-one-csharp-core/src/manifest/ContractGroup.ts new file mode 100644 index 0000000000..7ee64e17b1 --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/manifest/ContractManifest.ts b/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts new file mode 100644 index 0000000000..8fd7620ff9 --- /dev/null +++ b/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts @@ -0,0 +1,68 @@ +import { ContractManifestJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; +import { ContractManifestModel, getContractProperties } from '@neo-one/client-full-common'; +import { ContractABI } from './ContractABI'; +import { ContractGroup } from './ContractGroup'; +import { ContractPermission } from './ContractPermission'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export class ContractManifest extends ContractManifestModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractManifest { + const { reader } = options; + const json = JSON.parse(reader.readVarString(this.maxLength)); + + return this.deserializeJSON(json); + } + + public static deserializeWire(options: DeserializeWireOptions): ContractManifest { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + private static deserializeJSON(json: ContractManifestJSON) { + const groups = json.groups.map((group) => ContractGroup.deserializeJSON(group)); + const { payable, storage: hasStorage } = json.features; + const features = getContractProperties({ payable, hasStorage }); + 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 safeMethods = utils.wildCardFromJSON(json.safeMethods, (input) => input); + const extra = json.extra; + + return new this({ + groups, + features, + supportedStandards, + abi, + permissions, + trusts, + safeMethods, + 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-csharp-core/src/manifest/ContractMethodDescriptor.ts b/packages/neo-one-csharp-core/src/manifest/ContractMethodDescriptor.ts new file mode 100644 index 0000000000..e34aeac261 --- /dev/null +++ b/packages/neo-one-csharp-core/src/manifest/ContractMethodDescriptor.ts @@ -0,0 +1,19 @@ +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); + + return new this({ + name, + parameters, + offset, + returnType, + }); + } +} diff --git a/packages/neo-one-csharp-core/src/manifest/ContractParameterDefinition.ts b/packages/neo-one-csharp-core/src/manifest/ContractParameterDefinition.ts new file mode 100644 index 0000000000..9d1bcfe72d --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/manifest/ContractPermission.ts b/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts new file mode 100644 index 0000000000..f3a8df1263 --- /dev/null +++ b/packages/neo-one-csharp-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 { ContractManifest } from './ContractManifest'; +import { ContractPermissionDescriptor } from './ContractPermissionDescriptor'; +import { utils } from './utils'; + +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-csharp-core/src/manifest/ContractPermissionDescriptor.ts b/packages/neo-one-csharp-core/src/manifest/ContractPermissionDescriptor.ts new file mode 100644 index 0000000000..393f2506cb --- /dev/null +++ b/packages/neo-one-csharp-core/src/manifest/ContractPermissionDescriptor.ts @@ -0,0 +1,18 @@ +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 { + if (json.length === 42) { + return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readUInt160(json) }); + } + if (json.length === 66) { + return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readECPoint(json) }); + } + if (json === '*') { + return new ContractPermissionDescriptor(); + } + + throw new InvalidFormatError(); + } +} diff --git a/packages/neo-one-csharp-core/src/manifest/index.ts b/packages/neo-one-csharp-core/src/manifest/index.ts new file mode 100644 index 0000000000..34e15e5d5a --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts index 98708937c9..d63fa0bd30 100644 --- a/packages/neo-one-csharp-core/src/transaction/Transaction.ts +++ b/packages/neo-one-csharp-core/src/transaction/Transaction.ts @@ -30,7 +30,7 @@ export type TransactionAdd = TransactionModelAdd; export class Transaction extends TransactionModel - implements SerializableWire, SerializableJSON { + implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { version, diff --git a/packages/neo-one-csharp-core/src/transaction/TransactionState.ts b/packages/neo-one-csharp-core/src/transaction/TransactionState.ts new file mode 100644 index 0000000000..690af6a51d --- /dev/null +++ b/packages/neo-one-csharp-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-csharp-core/src/transaction/index.ts b/packages/neo-one-csharp-core/src/transaction/index.ts index 348a5f9ebb..63ed6df62a 100644 --- a/packages/neo-one-csharp-core/src/transaction/index.ts +++ b/packages/neo-one-csharp-core/src/transaction/index.ts @@ -1,2 +1,3 @@ export * from './Transaction'; +export * from './TransactionState'; export * from './attributes'; diff --git a/packages/neo-one-csharp-core/src/utils/utils.ts b/packages/neo-one-csharp-core/src/utils/utils.ts index 91a2449845..35808e0d92 100644 --- a/packages/neo-one-csharp-core/src/utils/utils.ts +++ b/packages/neo-one-csharp-core/src/utils/utils.ts @@ -1,4 +1,4 @@ -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'; @@ -183,6 +183,22 @@ 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 !== '*') { + // TODO: more descriptive; + throw new InvalidFormatError(); + } + + return '*'; + } + if (Array.isArray(json)) { + return json.map(selector); + } + + throw new InvalidFormatError(); +}; + export const utils = { ...clientUtils, toASCII, @@ -195,4 +211,5 @@ export const utils = { lazyOrValue, weightedAverage, weightedFilter, + wildCardFromJSON, }; diff --git a/packages/neo-one-node-protocol/src/Message.ts b/packages/neo-one-node-protocol/src/Message.ts index dfacbd13ac..add1ff93b8 100644 --- a/packages/neo-one-node-protocol/src/Message.ts +++ b/packages/neo-one-node-protocol/src/Message.ts @@ -89,7 +89,7 @@ const deserializeMessageHeader = ({ return { command, length, checksum }; }; -export class Message implements SerializableWire { +export class Message implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): Message { const { reader, context } = options; const { command, length, checksum } = deserializeMessageHeader(options); diff --git a/packages/neo-one-node-protocol/src/payload/AddrPayload.ts b/packages/neo-one-node-protocol/src/payload/AddrPayload.ts index 32ee061a65..a5537afca8 100644 --- a/packages/neo-one-node-protocol/src/payload/AddrPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/AddrPayload.ts @@ -5,7 +5,7 @@ export interface AddrPayloadAdd { readonly addresses: readonly NetworkAddress[]; } -export class AddrPayload implements SerializableWire { +export class AddrPayload implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): AddrPayload { const { reader } = options; const addresses = reader.readArray(() => NetworkAddress.deserializeWireBase(options)); 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/GetBlocksPayload.ts b/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts index 5c22e41248..c4f38e6b07 100644 --- a/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts @@ -12,7 +12,7 @@ export interface GetBlocksPayloadAdd { readonly hashStop?: UInt256; } -export class GetBlocksPayload implements SerializableWire { +export class GetBlocksPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): GetBlocksPayload { const hashStart = reader.readArray(() => reader.readUInt256()); const hashStop = reader.readUInt256(); diff --git a/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts b/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts index 866217e0a4..3b1124a2cc 100644 --- a/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts @@ -4,7 +4,7 @@ export interface HeadersPayloadAdd { readonly headers: readonly Header[]; } -export class HeadersPayload implements SerializableWire { +export class HeadersPayload implements SerializableWire { 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..a09a328a20 100644 --- a/packages/neo-one-node-protocol/src/payload/InvPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/InvPayload.ts @@ -6,7 +6,7 @@ export interface InvPayloadAdd { readonly hashes: readonly UInt256[]; } -export class InvPayload implements SerializableWire { +export class InvPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): InvPayload { const type = assertInventoryType(reader.readUInt8()); const hashes = reader.readArray(() => reader.readUInt256()); diff --git a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts index 46524eccf6..8fcbf30434 100644 --- a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts @@ -13,7 +13,7 @@ export interface MerkleBlockPayloadAdd extends BlockBaseAdd { readonly flags: Buffer; } -export class MerkleBlockPayload extends BlockBase implements SerializableWire { +export class MerkleBlockPayload extends BlockBase implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): MerkleBlockPayload { const { reader } = options; const blockBase = super.deserializeBlockBaseWireBase(options); diff --git a/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts b/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts index f5c9074057..f1282c95f7 100644 --- a/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts +++ b/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts @@ -18,7 +18,7 @@ export interface NetworkAddressAdd { const BYTE_LENGTH = 16; -export class NetworkAddress implements SerializableWire { +export class NetworkAddress implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): NetworkAddress { const timestamp = reader.readUInt32LE(); const services = reader.readUInt64LE(); diff --git a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts index a010427a44..ea7952498c 100644 --- a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts @@ -16,7 +16,7 @@ export interface VersionPayloadAdd { readonly relay: boolean; } -export class VersionPayload implements SerializableWire { +export class VersionPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): VersionPayload { const protocolVersion = reader.readUInt32LE(); const services = reader.readUInt64LE(); From 2e7c38d283353ebdaba94054ac7158c1c7d4c70f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 3 Sep 2020 12:33:28 -0700 Subject: [PATCH 096/141] feat(blockchain): more blockchain / storage groundwork (#2163) --- .../src/Blockchain.ts | 135 ++- .../src/PersistingBlockchain.ts | 208 ++++ .../src/StorageCache.ts | 263 +++++ .../src/WriteBatchBlockchain.ts | 1013 ----------------- .../neo-one-csharp-blockchain/src/utils.ts | 46 + .../neo-one-csharp-core/src/Blockchain.ts | 2 +- packages/neo-one-csharp-core/src/Storage.ts | 69 +- .../neo-one-csharp-core/src/TrimmedBlock.ts | 15 +- .../neo-one-csharp-core/src/Verifiable.ts | 4 +- packages/neo-one-csharp-core/src/index.ts | 2 + .../src/manifest/ContractManifest.ts | 4 +- .../src/manifest/ContractPermission.ts | 2 +- .../src/transaction/Transaction.ts | 4 + packages/neo-one-csharp-core/src/vm.ts | 34 +- packages/neo-one-csharp-vm/lib/Blockchain.cs | 22 - .../lib/Dispatcher.Snapshot.cs | 79 +- packages/neo-one-csharp-vm/lib/Dispatcher.cs | 45 +- .../neo-one-csharp-vm/lib/SnapshotHelpers.cs | 55 + .../neo-one-csharp-vm/lib/Storage/Level/DB.cs | 90 ++ .../lib/Storage/Level/Helper.cs | 70 ++ .../lib/Storage/Level/Iterator.cs | 75 ++ .../lib/Storage/Level/LevelDBException.cs | 12 + .../lib/Storage/Level/Native.cs | 251 ++++ .../lib/Storage/Level/Options.cs | 87 ++ .../lib/Storage/Level/ReadOptions.cs | 39 + .../lib/Storage/Level/Snapshot.cs | 24 + .../lib/Storage/Level/WriteBatch.cs | 29 + .../lib/Storage/LevelDBStore.cs | 26 + .../neo-one-csharp-vm/lib/Storage/Snapshot.cs | 56 + .../neo-one-csharp-vm/lib/Storage/Store.cs | 55 + .../src/ApplicationEngine.ts | 14 +- .../src/{dispatcher.ts => Dispatcher.ts} | 23 +- .../src/Methods/BaseMethods.ts | 6 +- .../src/Methods/EngineMethods.ts | 4 +- .../src/Methods/SnapshotMethods.ts | 15 +- .../neo-one-csharp-vm/src/SnapshotHandler.ts | 43 +- .../src/__tests__/storage.test.ts | 122 +- packages/neo-one-csharp-vm/src/types.ts | 3 - 38 files changed, 1837 insertions(+), 1209 deletions(-) create mode 100644 packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts create mode 100644 packages/neo-one-csharp-blockchain/src/StorageCache.ts delete mode 100644 packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts create mode 100644 packages/neo-one-csharp-blockchain/src/utils.ts delete mode 100644 packages/neo-one-csharp-vm/lib/Blockchain.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/DB.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs create mode 100644 packages/neo-one-csharp-vm/lib/Storage/Store.cs rename packages/neo-one-csharp-vm/src/{dispatcher.ts => Dispatcher.ts} (78%) diff --git a/packages/neo-one-csharp-blockchain/src/Blockchain.ts b/packages/neo-one-csharp-blockchain/src/Blockchain.ts index 16a1252078..f111ce2b22 100644 --- a/packages/neo-one-csharp-blockchain/src/Blockchain.ts +++ b/packages/neo-one-csharp-blockchain/src/Blockchain.ts @@ -1,23 +1,28 @@ +import { UInt256 } from '@neo-one/client-common'; import { Block, Blockchain as BlockchainType, BlockchainSettings, Header, Storage, VM } from '@neo-one/csharp-core'; import PriorityQueue from 'js-priority-queue'; import { Subject } from 'rxjs'; +import { flatMap, map, toArray } from 'rxjs/operators'; import { GenesisBlockNotRegisteredError } from './errors'; +import { PersistingBlockchain } from './PersistingBlockchain'; +import { utils } from './utils'; import { verifyWitnesses } from './verify'; -import { WriteBatchBlockchain } from './WriteBatchBlockchain'; // TODO: bring logger over when its time; const logger = console; export interface CreateBlockchainOptions { + readonly onPersistNativeContractScript?: Buffer; readonly settings: BlockchainSettings; readonly storage: Storage; readonly vm: VM; } export interface BlockchainOptions extends CreateBlockchainOptions { - readonly currentBlock: Block | undefined; - readonly previousBlock: Block | undefined; - readonly currentHeader: Header | undefined; + // readonly currentBlock: Block | undefined; + // readonly previousBlockIndex: HashIndexState | undefined; + // tslint:disable-next-line: readonly-array + readonly headerIndex: UInt256[]; } interface Entry { @@ -27,14 +32,74 @@ interface Entry { readonly verify: boolean; } +// TODO: revisit this with more context into how the headerIndex is being used. +export const recoverHeaderIndex = async (storage: Storage) => { + const initHeaderIndex = await storage.headerHashList + .getAll$() + .pipe( + flatMap((value) => value.hashes), + toArray(), + ) + .toPromise(); + + const storedHeaderCount = initHeaderIndex.length; + + if (storedHeaderCount !== 0) { + const hashIndex = await storage.headerHashIndex.get(); + let extraHashes: readonly UInt256[] = []; + if (hashIndex.index >= storedHeaderCount) { + let hash = hashIndex.hash; + // tslint:disable-next-line + while (hash !== initHeaderIndex[storedHeaderCount - 1]) { + // tslint:disable-next-line: no-array-mutation + extraHashes = [hash].concat(extraHashes); + const { previousHash } = await storage.blocks.get({ hashOrIndex: hash }); + hash = previousHash; + } + + return initHeaderIndex.concat(extraHashes); + } + } + + return storage.blocks + .getAll$() + .pipe( + map((block) => block.header.hash), + toArray(), + ) + .toPromise(); +}; + export class Blockchain { public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { - throw new Error('not implemented'); + const headerIndex = await recoverHeaderIndex(storage); + const blockchain = new Blockchain({ + headerIndex, + settings, + storage, + vm, + }); + + if (headerIndex.length === 0) { + await blockchain.persistBlock({ block: settings.genesisBlock }); + + return blockchain; + } + + // TODO: see if we need something similar and how we'll implement it. + blockchain.loadMempoolPolicy(storage); + + return blockchain; } + + // tslint:disable-next-line: readonly-array + private readonly headerIndex: UInt256[]; + private readonly onPersistNativeContractScript: Buffer; private readonly settings: BlockchainSettings; private readonly storage: Storage; private readonly vm: VM; + private mutableStoredHeaderCount: number; private mutableBlockQueue: PriorityQueue = new PriorityQueue({ comparator: (a, b) => a.block.index - b.block.index, }); @@ -48,9 +113,13 @@ export class Blockchain { private mutableBlock$: Subject = new Subject(); public constructor(options: BlockchainOptions) { + this.headerIndex = options.headerIndex; + this.mutableStoredHeaderCount = this.headerIndex.length; this.settings = options.settings; this.storage = options.storage; this.vm = options.vm; + this.onPersistNativeContractScript = + options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); } public get currentBlock(): Block { @@ -61,22 +130,16 @@ export class Blockchain { return this.mutableCurrentBlock; } - public get currentBlockIndex(): number { - return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; + public get storedHeaderCount(): number { + return this.mutableStoredHeaderCount; } - // TODO: make sure all of this storage is implemented - public get storageMethods() { - return { - tryGetBlock: this.storage.block.tryGet, - tryGetHeader: this.storage.header.tryGet, - tryGetContract: this.storage.contract.tryGet, - tryGetStorage: this.storage.item.tryGet, - }; + public get currentBlockIndex(): number { + return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; } public async verifyBlock(block: Block): Promise { - const verification = await block.verify(this.storageMethods, verifyWitnesses); + const verification = await block.verify(this.storage, verifyWitnesses); if (!verification) { // TODO: implement a makeError throw new Error('Block Verification Failed'); @@ -190,29 +253,51 @@ export class Blockchain { logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); } + private async saveHeaderHashList(): Promise { + if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { + return; + } + + const blockchain = this.createPersistingBlockchain(); + const { changeSet, countIncrement } = await blockchain.getHeaderHashListChanges( + this.headerIndex, + this.storedHeaderCount, + ); + await this.storage.commit(changeSet); + this.mutableStoredHeaderCount += countIncrement; + } + private async persistBlockInternal(block: Block, verify?: boolean): Promise { if (verify) { await this.verifyBlock(block); } - const blockchain = this.createWriteBlockchain(); + const blockchain = this.createPersistingBlockchain(); + const currentHeaderCount = this.headerIndex.length; + + if (block.index === currentHeaderCount) { + this.headerIndex.push(block.hash); + } - await blockchain.persistBlock(block); - await this.storage.commit(blockchain.getChangeSet()); + /** + * TODO: this changeSet is NOT the `ChangeSet` type we expect for a `.commit(...)` like in `saveHeaderHashList` + * it is the already serialized changeSet coming from the C# VM Snapshot. There won't need to be as much storage + * change conversion with this changeSet so will probably make 2 different `commit` methods, 1 for each. + */ + const { changeSet, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); + await this.storage.commit(changeSet); + await this.saveHeaderHashList(); this.mutablePreviousBlock = this.mutableCurrentBlock; this.mutableCurrentBlock = block; this.mutableCurrentHeader = block.header; } - private createWriteBlockchain(): WriteBatchBlockchain { - return new WriteBatchBlockchain({ - settings: this.settings, - currentBlock: this.mutableCurrentBlock, - currentHeader: this.mutableCurrentHeader, + private createPersistingBlockchain(): PersistingBlockchain { + return new PersistingBlockchain({ + onPersistNativeContractScript: this.onPersistNativeContractScript, storage: this.storage, vm: this.vm, - getValidators: this.getValidators, }); } } diff --git a/packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts new file mode 100644 index 0000000000..fd958930c2 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts @@ -0,0 +1,208 @@ +// tslint:disable no-array-mutation no-object-mutation +import { common, UInt256, VMState } from '@neo-one/client-common'; +import { + // Action, + // ActionKey, + // ActionsKey, + ApplicationExecuted, + Block, + // BlockData, + // BlockDataKey, + // InvocationData, + // InvocationDataKey, + // InvocationResultSuccess, + // LogAction, + // NotificationAction, + // ScriptContainerType, + ChangeSet, + HeaderHashList, + // TransactionData, + // TransactionDataKey, + // TransactionDataUpdate, + HeaderKey, + SnapshotHandler, + Storage, + Transaction, + TriggerType, + VM, +} from '@neo-one/csharp-core'; +import { ReadAddStorageCache } from './StorageCache'; +import { utils, utils as blockchainUtils } from './utils'; + +interface PersistingBlockchainOptions { + readonly vm: VM; + readonly storage: Storage; + readonly onPersistNativeContractScript: Buffer; +} + +interface GetHeaderHashListChangesResult { + readonly countIncrement: number; + readonly changeSet: ChangeSet; +} + +interface Caches { + readonly headerHashList: ReadAddStorageCache; +} + +// TODO: instead of an array for ApplicationExecuted we should push it to an observable +export class PersistingBlockchain { + private readonly vm: VM; + private readonly storage: Storage; + private readonly onPersistNativeContractScript: Buffer; + private readonly caches: Caches; + + public constructor(options: PersistingBlockchainOptions) { + this.vm = options.vm; + this.storage = options.storage; + this.onPersistNativeContractScript = options.onPersistNativeContractScript; + this.caches = { + headerHashList: new ReadAddStorageCache({ + name: 'headerHashList', + readStorage: () => this.storage.headerHashList, + getKeyString: (key) => key.toString(), + createAddChange: (key, value) => ({ type: 'headerHashList', key, value }), + }), + }; + } + + public persistBlock( + block: Block, + currentHeaderIndexCount: number, + ): { readonly changeSet: readonly 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); + if (block.index > 0) { + const executed = this.vm.withApplicationEngine( + { + trigger: TriggerType.System, + snapshot: 'main', + gas: 0, + testMode: true, + }, + (engine) => { + engine.loadScript(this.onPersistNativeContractScript); + const result = engine.execute(); + if (result !== 'HALT') { + // TODO: Implement a real error; + throw new Error('Failed to persist native contract changes'); + } + + return blockchainUtils.getApplicationExecuted(engine); + }, + ); + + appsExecuted.push(executed); + } + + main.addBlock(block); + main.clone(); + + const { changeSet: transactionsChangeSet, executed: executedTransactions } = this.persistTransactions( + block, + main, + clone, + ); + + main.changeBlockHashIndex(block.index, block.hash); + const finalChangeSet = new Set([...transactionsChangeSet, ...main.getChangeSet()]); + const finalApplicationsExecuted = appsExecuted.concat(executedTransactions); + + return { changeSet: [...finalChangeSet], applicationsExecuted: finalApplicationsExecuted }; + }); + } + + // TODO: (not critical) almost all of this logic can be expressed in an observable setup, busy work for later. + public async getHeaderHashListChanges( + headerIndex: readonly UInt256[], + storedCount: number, + ): Promise { + let increment = 0; + // tslint:disable-next-line: no-loop-statement + while (headerIndex.length - (storedCount + increment) >= utils.hashListBatchSize) { + const index = storedCount + increment; + await this.caches.headerHashList.add( + index, + new HeaderHashList({ + hashes: headerIndex.slice(index, index + utils.hashListBatchSize), + }), + ); + + increment += utils.hashListBatchSize; + } + + return { + countIncrement: increment, + changeSet: this.caches.headerHashList.getChangeSet(), + }; + } + + private persistTransactions( + block: Block, + main: SnapshotHandler, + clone: Omit, + ): { readonly changeSet: readonly any[]; readonly executed: readonly ApplicationExecuted[] } { + return block.transactions.reduce<{ + readonly changeSet: any[]; + readonly executed: readonly ApplicationExecuted[]; + }>( + (acc, transaction) => { + const { changeSet: nextChangeSet, appExecuted } = this.persistTransaction( + transaction, + block.index, + main, + clone, + ); + + return { + changeSet: acc.changeSet.concat(nextChangeSet), + executed: acc.executed.concat(appExecuted), + }; + }, + { changeSet: [], executed: [] }, + ); + } + + private persistTransaction( + transaction: Transaction, + index: number, + main: SnapshotHandler, + clone: Omit, + ): { readonly appExecuted: ApplicationExecuted; readonly changeSet: readonly any[] } { + clone.addTransaction(transaction, index); + let changeSet = clone.getChangeSet(); + clone.commit('transactions'); + + return this.vm.withApplicationEngine( + { + trigger: TriggerType.Application, + container: transaction, + snapshot: 'clone', + gas: common.fixed8ToDecimal(transaction.systemFee).toNumber(), + testMode: false, + }, + (engine) => { + engine.loadScript(transaction.script); + const state = engine.execute(); + if (state === 'HALT') { + clone.deleteTransaction(transaction.hash); + clone.addTransaction(transaction, index, VMState.HALT); + changeSet = changeSet.concat(clone.getChangeSet()); + clone.commit(); + } else { + main.clone(); + } + + return { + changeSet, + appExecuted: blockchainUtils.getApplicationExecuted(engine), + }; + }, + ); + } +} diff --git a/packages/neo-one-csharp-blockchain/src/StorageCache.ts b/packages/neo-one-csharp-blockchain/src/StorageCache.ts new file mode 100644 index 0000000000..c2224e6bb0 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/StorageCache.ts @@ -0,0 +1,263 @@ +import { AddChange, Change, ChangeSet, DeleteChange, ReadStorage } from '@neo-one/csharp-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: DeleteTrackedChange; +} + +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; + readonly readStorage: () => ReadStorage; +}): GetFunc { + return async (key: Key): Promise => { + const trackedChange = tryGetTracked(key); + if (trackedChange !== undefined) { + if (trackedChange.type === 'delete') { + throw new Error('Not found'); + } + + return trackedChange.value; + } + + return readStorage().get(key); + }; +} + +function createTryGet({ + tryGetTracked, + readStorage, +}: { + // tslint:disable-next-line: no-any + readonly tryGetTracked: (key: Key) => TrackedChange | undefined; + readonly readStorage: () => ReadStorage; +}): TryGetFunc { + return async (key: Key): Promise => { + const trackedChange = tryGetTracked(key); + if (trackedChange !== undefined) { + if (trackedChange.type === 'delete') { + return undefined; + } + + return trackedChange.value; + } + + return readStorage().tryGet(key); + }; +} + +interface BaseReadStorageCacheOptions { + readonly readStorage: () => ReadStorage; + readonly name: string; + readonly createAddChange: CreateAddChange; + readonly createDeleteChange?: (key: Key) => DeleteChange; + readonly onAdd?: (value: Value) => Promise; +} + +class BaseReadStorageCache { + public readonly get: GetFunc; + public readonly tryGet: TryGetFunc; + public readonly tryGetValue: TryGetFunc; + public readonly onAdd: ((value: Value) => Promise) | undefined; + public readonly name: string; + // tslint:disable-next-line readonly-keyword + public readonly mutableValues: { [key: string]: TrackedChange }; + protected readonly readStorage: () => ReadStorage; + protected readonly createAddChange: CreateAddChange; + protected readonly createDeleteChange: ((key: Key) => DeleteChange) | undefined; + + public constructor(options: BaseReadStorageCacheOptions) { + this.readStorage = options.readStorage; + this.name = options.name; + this.createAddChange = options.createAddChange; + this.createDeleteChange = options.createDeleteChange; + this.onAdd = options.onAdd; + this.mutableValues = {}; + + this.get = createGet({ + readStorage: this.readStorage, + tryGetTracked: this.tryGetTracked.bind(this), + }); + + this.tryGet = createTryGet({ + readStorage: this.readStorage, + tryGetTracked: this.tryGetTracked.bind(this), + }); + this.tryGetValue = (key) => this.readStorage().tryGet(key); + } + + public getChangeSet(): ChangeSet { + const createDeleteChange = this.createDeleteChange; + + return Object.values(this.mutableValues).map((tracked) => { + if (isDeleteTrackedChange(tracked)) { + if (createDeleteChange === undefined) { + throw new Error('Invalid delete'); + } + + return { type: 'delete', change: createDeleteChange(tracked.key) }; + } + + return { type: 'add', change: this.createAddChange(tracked.key, tracked.value), subType: tracked.subType }; + }); + } + + public getTrackedChangeSet(): TrackedChangeSet { + const createDeleteChange = this.createDeleteChange; + + return Object.entries(this.mutableValues).map(([key, tracked]) => { + if (isDeleteTrackedChange(tracked)) { + if (createDeleteChange === undefined) { + throw new Error('Invalid delete'); + } + + return { type: createDeleteChange(tracked.key).type, key, value: tracked }; + } + + return { type: this.createAddChange(tracked.key, tracked.value).type, key, value: tracked }; + }); + } + + public tryGetTracked(_key: Key): TrackedChange | undefined { + throw new Error('Not Implemented'); + } +} + +interface ReadStorageCacheOptions extends BaseReadStorageCacheOptions { + readonly getKeyString: (key: Key) => string; +} + +class ReadStorageCache extends BaseReadStorageCache { + public readonly getKeyString: (key: Key) => string; + + public constructor(options: ReadStorageCacheOptions) { + super({ + readStorage: options.readStorage, + name: options.name, + createAddChange: options.createAddChange, + createDeleteChange: options.createDeleteChange, + onAdd: options.onAdd, + }); + + this.getKeyString = options.getKeyString; + } + + public tryGetTracked(key: Key): TrackedChange | undefined { + return this.mutableValues[this.getKeyString(key)]; + } + + public addTrackedChange(key: string, value: TrackedChange): void { + this.mutableValues[key] = value; + } +} + +type AddFunc = (key: Key, value: Value) => Promise; + +function createAdd({ + cache, + getKeyString, + allowDupes, +}: { + readonly cache: ReadStorageCache; + readonly getKeyString: (key: Key) => string; + readonly allowDupes?: boolean; +}): AddFunc { + return async (key: Key, value: Value): Promise => { + if (!allowDupes) { + const currentValue = await cache.tryGet(key); + if (currentValue !== undefined) { + throw new Error(`Attempted to add an already existing object for key ` + `${cache.name}:${getKeyString(key)}.`); + } + } + + if (cache.onAdd !== undefined) { + await cache.onAdd(value); + } + + const trackedChange = cache.tryGetTracked(key); + // tslint:disable-next-line: no-object-mutation + cache.mutableValues[cache.getKeyString(key)] = { + type: 'add', + 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 + subType: trackedChange === undefined ? 'add' : 'update', + }; + }; +} + +interface ReadAddStorageCacheOptions extends ReadStorageCacheOptions { + readonly allowDupes?: boolean; +} + +export class ReadAddStorageCache extends ReadStorageCache { + public readonly add: AddFunc; + + public constructor(options: ReadAddStorageCacheOptions) { + super({ + readStorage: options.readStorage, + name: options.name, + getKeyString: options.getKeyString, + createAddChange: options.createAddChange, + createDeleteChange: options.createDeleteChange, + onAdd: options.onAdd, + }); + + this.add = createAdd({ + cache: this, + getKeyString: options.getKeyString, + allowDupes: options.allowDupes, + }); + } +} diff --git a/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts deleted file mode 100644 index 21ebd1f065..0000000000 --- a/packages/neo-one-csharp-blockchain/src/WriteBatchBlockchain.ts +++ /dev/null @@ -1,1013 +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, - Contract, - ContractKey, - Header, - Input, - InvocationData, - InvocationDataKey, - InvocationResultSuccess, - LogAction, - NotificationAction, - Output, - ScriptContainerType, - StorageChangeAdd, - StorageChangeDelete, - StorageChangeModify, - StorageItem, - StorageItemKey, - StorageItemsKey, - StorageItemUpdate, - Transaction, - TransactionData, - TransactionDataKey, - TransactionDataUpdate, - TransactionKey, - TransactionType, - TriggerType, - Validator, - ValidatorKey, - ValidatorsCount, - ValidatorsCountUpdate, - ValidatorUpdate, - VM, - WriteBlockchain, -} from '@neo-one/csharp-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]); - }, - onSetVotes: ({ address, votes }) => { - voteUpdates.push([address, votes]); - }, - }, - - 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]), - 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-csharp-blockchain/src/utils.ts b/packages/neo-one-csharp-blockchain/src/utils.ts new file mode 100644 index 0000000000..3aa1858df2 --- /dev/null +++ b/packages/neo-one-csharp-blockchain/src/utils.ts @@ -0,0 +1,46 @@ +import { ScriptBuilder, UInt160 } from '@neo-one/client-common'; +import { ApplicationEngine, Transaction, utils as coreUtils } from '@neo-one/csharp-core'; + +interface BaseNativeContract { + readonly hash: UInt160; +} + +// TODO: Implement +class NativeContract implements BaseNativeContract { + public static readonly GAS: BaseNativeContract; + public static readonly NEO: BaseNativeContract; + public readonly hash: UInt160; + + public constructor(hash: UInt160) { + this.hash = hash; + } +} + +export const getOnPersistNativeContractScript = coreUtils.lazy(() => { + const contracts = [NativeContract.GAS, NativeContract.NEO]; + const script = new ScriptBuilder(); + contracts.forEach((contract) => { + script.emitAppCall(contract.hash, 'onPersist'); + script.emitOp('DROP'); + }); + + return script.build(); +}); + +const hashListBatchSize = 2000; + +const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transaction) => ({ + transaction, + trigger: engine.trigger, + state: engine.state, + gasConsumed: engine.gasConsumed, + stack: engine.resultStack, + notifications: [] /* engine.notifications TODO: implement this */, +}); + +export const utils = { + ...coreUtils, + hashListBatchSize, + getApplicationExecuted, + getOnPersistNativeContractScript, +}; diff --git a/packages/neo-one-csharp-core/src/Blockchain.ts b/packages/neo-one-csharp-core/src/Blockchain.ts index 70083e734b..a617f2497a 100644 --- a/packages/neo-one-csharp-core/src/Blockchain.ts +++ b/packages/neo-one-csharp-core/src/Blockchain.ts @@ -18,7 +18,7 @@ export interface Blockchain extends BlockchainStorage { readonly currentBlock: Block; readonly previousBlock: Block | undefined; - readonly currentHeader: Header; + readonly currentHeaderIndex: Header; readonly currentBlockIndex: number; readonly block$: Observable; readonly isPersistingBlock: boolean; diff --git a/packages/neo-one-csharp-core/src/Storage.ts b/packages/neo-one-csharp-core/src/Storage.ts index faf0f8f266..0b31fa8dcf 100644 --- a/packages/neo-one-csharp-core/src/Storage.ts +++ b/packages/neo-one-csharp-core/src/Storage.ts @@ -22,24 +22,24 @@ export interface ReadAllStorage extends ReadStorage { readonly all$: Observable; } -export interface ReadGetAllStorage extends ReadStorage { - readonly getAll$: (key: PartialKey) => Observable; +export interface ReadGetAllStorage extends ReadStorage { + readonly getAll$: (key?: Partial) => Observable; } export interface AddMetadataStorage { readonly add: (add: Value) => Promise; } -export interface AddStorage { - 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: (value: Value, update: Update) => Promise; +export interface AddUpdateStorage extends AddStorage { + readonly update: (key: Key, update: Update) => Promise; } export interface DeleteMetadataStorage { @@ -53,46 +53,51 @@ export interface DeleteStorage { export interface AddUpdateDeleteMetadataStorage extends AddUpdateMetadataStorage, DeleteMetadataStorage {} -export interface AddDeleteStorage extends AddStorage, DeleteStorage {} +export interface AddDeleteStorage extends AddStorage, DeleteStorage {} export interface AddUpdateDeleteStorage - extends AddUpdateStorage, + 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 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 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, +interface ReadGetAllAddStorage extends ReadGetAllStorage, AddStorage {} +interface ReadGetAllAddUpdateDeleteStorage + extends ReadGetAllStorage, AddUpdateDeleteStorage {} +interface LatestReadStorage extends ReadStorage { + readonly tryGetLatest: () => Promise; +} + export type AddChange = - | { readonly type: 'block'; readonly value: TrimmedBlock } - | { readonly type: 'transaction'; readonly value: TransactionState } - | { readonly type: 'contract'; readonly value: ContractState } - | { readonly type: 'storage'; readonly value: StorageItem } - | { readonly type: 'headerHashList'; readonly value: HeaderHashList } + | { 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 }; export type DeleteChange = - | { readonly type: 'contract'; readonly value: ContractKey } - | { readonly type: 'storage'; readonly value: StorageKey }; + | { readonly type: 'contract'; readonly key: ContractKey } + | { readonly type: 'storage'; readonly key: StorageKey }; export type Change = | { readonly type: 'add'; readonly change: AddChange; readonly subType: 'add' | 'update' } @@ -100,15 +105,11 @@ export type Change = export type ChangeSet = readonly Change[]; -interface LatestReadStorage extends ReadStorage { - readonly tryGetLatest: () => Promise; -} - export interface BlockchainStorage { readonly blocks: ReadStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; - readonly storages: ReadGetAllStorage, StorageItem>; + readonly storages: ReadStorage; readonly headerHashList: ReadStorage; readonly blockHashIndex: ReadMetadataStorage; readonly headerHashIndex: ReadMetadataStorage; @@ -116,8 +117,8 @@ export interface BlockchainStorage { } export interface Storage extends BlockchainStorage { - readonly block: LatestReadStorage; - readonly headerHashList: LatestReadStorage; + readonly blocks: ReadGetAllStorage; + readonly headerHashList: ReadGetAllStorage; readonly commit: (changeSet: ChangeSet) => Promise; readonly close: () => Promise; readonly reset: () => Promise; diff --git a/packages/neo-one-csharp-core/src/TrimmedBlock.ts b/packages/neo-one-csharp-core/src/TrimmedBlock.ts index ec7f6d0cd5..ab75c19cbc 100644 --- a/packages/neo-one-csharp-core/src/TrimmedBlock.ts +++ b/packages/neo-one-csharp-core/src/TrimmedBlock.ts @@ -11,17 +11,19 @@ import { Block } from './Block'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { ConsensusData } from './ConsensusData'; import { Header } from './Header'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from './Serializable'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializeJSONContext } from './Serializable'; import { ReadStorage } from './Storage'; import { TransactionKey, TransactionState } from './transaction'; -import { utils } from './utils'; +import { BinaryReader, utils } from './utils'; export interface TrimmedBlockAdd extends BlockBaseAdd { readonly consensusData?: ConsensusData; readonly hashes: readonly UInt256[]; } -export type BlockKey = UInt256; +export interface BlockKey { + readonly hashOrIndex: UInt256 | number; +} export class TrimmedBlock extends BlockBase implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { @@ -52,6 +54,13 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { }); } + public static deserializeWire(options: DeserializeWireOptions) { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + public readonly consensusData?: ConsensusData; public readonly hashes: readonly UInt256[]; public readonly isBlock: boolean; diff --git a/packages/neo-one-csharp-core/src/Verifiable.ts b/packages/neo-one-csharp-core/src/Verifiable.ts index d735c1ebac..920f34fa33 100644 --- a/packages/neo-one-csharp-core/src/Verifiable.ts +++ b/packages/neo-one-csharp-core/src/Verifiable.ts @@ -3,7 +3,9 @@ import { BlockchainStorage } from './Storage'; import { Witness } from './Witness'; export interface Verifiable { - readonly getScriptHashesForVerifying: (storage: BlockchainStorage) => Promise; + readonly getScriptHashesForVerifying: ( + storage: BlockchainStorage, + ) => Promise | readonly UInt160[]; readonly witnesses: readonly Witness[]; } diff --git a/packages/neo-one-csharp-core/src/index.ts b/packages/neo-one-csharp-core/src/index.ts index 435de06a9d..67ce78732c 100644 --- a/packages/neo-one-csharp-core/src/index.ts +++ b/packages/neo-one-csharp-core/src/index.ts @@ -14,6 +14,8 @@ export * from './Serializable'; export * from './Settings'; export * from './Signer'; export * from './Storage'; +export * from './StorageItem'; +export * from './StorageKey'; export * from './StackItems'; export * from './transaction'; export * from './TrimmedBlock'; diff --git a/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts b/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts index 8fd7620ff9..259f492d3c 100644 --- a/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts +++ b/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts @@ -1,10 +1,10 @@ import { ContractManifestJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; import { ContractManifestModel, getContractProperties } from '@neo-one/client-full-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader, utils } from '../utils'; import { ContractABI } from './ContractABI'; import { ContractGroup } from './ContractGroup'; import { ContractPermission } from './ContractPermission'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; -import { BinaryReader, utils } from './utils'; export class ContractManifest extends ContractManifestModel { public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractManifest { diff --git a/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts b/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts index f3a8df1263..8ca3bddf25 100644 --- a/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts +++ b/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts @@ -1,8 +1,8 @@ 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'; -import { utils } from './utils'; export class ContractPermission extends ContractPermissionModel { public static readonly defaultPermission = new ContractPermission({ diff --git a/packages/neo-one-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts index d63fa0bd30..75da776311 100644 --- a/packages/neo-one-csharp-core/src/transaction/Transaction.ts +++ b/packages/neo-one-csharp-core/src/transaction/Transaction.ts @@ -173,6 +173,10 @@ export class Transaction return this.sizeInternal(); } + public getScriptHashesForVerifying(): readonly UInt160[] { + return this.signers.map((signer) => signer.account); + } + public serializeJSON(options: SerializeJSONContext): TransactionJSON { return { hash: JSONHelper.writeUInt256(this.hash), diff --git a/packages/neo-one-csharp-core/src/vm.ts b/packages/neo-one-csharp-core/src/vm.ts index 0ec7b77691..bfaba7d64c 100644 --- a/packages/neo-one-csharp-core/src/vm.ts +++ b/packages/neo-one-csharp-core/src/vm.ts @@ -1,17 +1,22 @@ -import { VMState } from '@neo-one/client-common'; +import { SerializableWire, UInt256, VMState } from '@neo-one/client-common'; +import { Block } from './Block'; import { StackItem } from './StackItems'; +import { ChangeSet } from './Storage'; import { Transaction } from './transaction'; import { Verifiable } from './Verifiable'; export enum TriggerType { Verification = 0x00, + System = 0x01, Application = 0x10, } +export type SnapshotName = 'main' | 'clone'; + export interface ApplicationEngineOptions { readonly trigger: TriggerType; - readonly container?: Verifiable; - readonly snapshot?: boolean; + readonly container?: Verifiable & SerializableWire; + readonly snapshot?: SnapshotName; readonly gas: number; readonly testMode?: boolean; } @@ -20,10 +25,27 @@ export interface ApplicationEngine { readonly trigger: TriggerType; readonly gasConsumed: number; readonly resultStack: readonly StackItem[]; + readonly state: VMState; + readonly loadScript: (script: Buffer) => boolean; readonly execute: () => keyof typeof VMState; readonly loadClonedContext: (position: number) => boolean; } +export type SnapshotPartial = 'blocks' | 'transactions'; + +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 getChangeSet: () => any; + readonly clone: () => void; +} + // tslint:disable-next-line no-any TODO: implement export type Notification = any; @@ -33,7 +55,7 @@ export interface ApplicationExecuted { readonly state: VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; - readonly notification: readonly Notification[]; + readonly notifications: readonly Notification[]; } export interface VM { @@ -41,4 +63,8 @@ export interface VM { options: ApplicationEngineOptions, func: (engine: ApplicationEngine) => T, ) => T; + + readonly withSnapshots: ( + func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, + ) => T; } diff --git a/packages/neo-one-csharp-vm/lib/Blockchain.cs b/packages/neo-one-csharp-vm/lib/Blockchain.cs deleted file mode 100644 index b3770243c6..0000000000 --- a/packages/neo-one-csharp-vm/lib/Blockchain.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Neo.Ledger; - -// this just mimics the TestBlockchain used in Neo Unit Tests -namespace NEOONE -{ - public class NeoOneBlockchain - { - - private static readonly Neo.NeoSystem system; - - static NeoOneBlockchain() - { - system = new Neo.NeoSystem(); - var _ = Blockchain.Singleton; - } - - public static bool InitializeNeoOneSystem() - { - return true; - } - } -} diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs index ede00aaff1..91e4d5184e 100644 --- a/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs @@ -1,10 +1,12 @@ using System; using System.IO; +using System.Linq; using Neo; using Neo.Ledger; using Neo.Network.P2P.Payloads; using Neo.Persistence; using Neo.VM; +using NEOONE.Storage; namespace NEOONE { @@ -19,9 +21,12 @@ enum SnapshotMethod snapshot_blocks_add, snapshot_transactions_add, snapshot_clone, - snapshot_set_height, snapshot_commit, snapshot_reset, + snapshot_change_block_hash_index, + snapshot_change_header_hash_index, + snapshot_set_persisting_block, + snapshot_get_change_set, } private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) @@ -56,18 +61,44 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) case SnapshotMethod.snapshot_clone: return this._snapshotClone(); - case SnapshotMethod.snapshot_set_height: - uint index = (uint)args.index; - return this._snapshotSetHeight(this.selectSnapshot(args.snapshot), index); + 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.selectCommitStore( - this.selectSnapshot(args.snapshot, false), + this._snapshotCommit( + this.selectSnapshot(args.snapshot), args.partial - ).Commit(); + ); 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_reset: this.resetSnapshots(); @@ -81,7 +112,7 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) private void resetSnapshots() { - this.snapshot = Blockchain.Singleton.GetSnapshot(); + this.snapshot = new SnapshotView(this.store); this.clonedSnapshot = this.snapshot.Clone(); } @@ -99,16 +130,19 @@ private StoreView selectSnapshot(string snapshot, bool required = true) } } - private CommitStore selectCommitStore(StoreView snapshot, string partial) + private void _snapshotCommit(SnapshotView snapshot, string partial) { switch (partial) { case "blocks": - return (CommitStore)snapshot.Blocks; + snapshot.Blocks.Commit(); + break; case "transactions": - return (CommitStore)snapshot.Transactions; + snapshot.Transactions.Commit(); + break; default: - return (CommitStore)snapshot; + snapshot.Commit(); + break; } } @@ -127,14 +161,29 @@ private bool _snapshotTransactionsAdd(StoreView snapshot, Transaction tx, uint i return true; } - private bool _snapshotSetHeight(StoreView snapshot, uint index) + private bool _snapshotChangeBlockHashIndex(StoreView snapshot, uint index, UInt256 hash) + { + var hashIndex = snapshot.BlockHashIndex.GetAndChange(); + hashIndex.Index = index; + hashIndex.Hash = hash; + + return true; + } + + private bool _snapshotChangeHeaderHashIndex(StoreView snapshot, uint index, UInt256 hash) { - var height = snapshot.BlockHashIndex.GetAndChange(); - height.Index = index; + var hashIndex = snapshot.HeaderHashIndex.GetAndChange(); + hashIndex.Index = index; + hashIndex.Hash = hash; return true; } + private dynamic _snapshotGetChangeSet(SnapshotView snapshot) + { + return new ChangeSet(snapshot).set.ToArray(); + } + private bool _snapshotClone() { this.clonedSnapshot = this.snapshot.Clone(); diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.cs b/packages/neo-one-csharp-vm/lib/Dispatcher.cs index 74a6a03491..34c6877cf9 100644 --- a/packages/neo-one-csharp-vm/lib/Dispatcher.cs +++ b/packages/neo-one-csharp-vm/lib/Dispatcher.cs @@ -3,6 +3,8 @@ using Neo.SmartContract; using System.Dynamic; using System.Collections.Generic; +using NEOONE.Storage; +using Neo.Persistence; namespace NEOONE { @@ -10,51 +12,68 @@ public partial class Dispatcher { private ApplicationEngine engine; + private IStore store; private bool init = false; private enum BaseMethod { init, dispose, - test, } - private dynamic dispatchBaseMethod(BaseMethod method) + private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) { switch (method) { case BaseMethod.init: - return this._init(); + if (args.path == null) + { + return this._init(); + } + + return this._init((string)args.path); case BaseMethod.dispose: return this._dispose(); - case BaseMethod.test: - return this._test(); - default: throw new InvalidOperationException(); } } - private bool _init() + private bool _init(string path) { - this.init = this.init ? true : NeoOneBlockchain.InitializeNeoOneSystem(); - this.resetSnapshots(); + if (!this.init) + { + this.store = new LevelDBStore(path).GetStore(); + this.resetSnapshots(); - return true; + this.init = true; + } + + return this.init; } - private dynamic _test() + private bool _init() { - return true; + if (!this.init) + { + this.store = new MemoryStore(); + 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; @@ -75,7 +94,7 @@ public async Task Invoke(dynamic input) BaseMethod baseMethod; if (Enum.TryParse(method, out baseMethod)) { - return this.dispatchBaseMethod(baseMethod); + return this.dispatchBaseMethod(baseMethod, args); } EngineMethod engineMethod; diff --git a/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs b/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs index 94d61b72d6..d5fa682fc8 100644 --- a/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs +++ b/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs @@ -1,7 +1,62 @@ +using Neo.Persistence; +using Neo; +using Neo.Ledger; +using System.Collections.Generic; +using System.IO; +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.Contracts.GetChangeSet()) + { + set.Add(new Change("contract", 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-csharp-vm/lib/Storage/Level/DB.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/DB.cs new file mode 100644 index 0000000000..47a078c10a --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/DB.cs @@ -0,0 +1,90 @@ +using System; +using System.IO; + +namespace NEOONE.Storage.LevelDB +{ + public class DB : IDisposable + { + private IntPtr handle; + + /// + /// Return true if haven't got valid handle + /// + public bool IsDisposed => handle == IntPtr.Zero; + + private DB(IntPtr handle) + { + this.handle = handle; + } + + public void Dispose() + { + if (handle != IntPtr.Zero) + { + Native.leveldb_close(handle); + handle = IntPtr.Zero; + } + } + + public void Delete(object options, byte[] key) + { + throw new InvalidOperationException(); + } + + public byte[] Get(ReadOptions options, byte[] key) + { + IntPtr value = Native.leveldb_get(handle, options.handle, key, (UIntPtr)key.Length, out UIntPtr length, out IntPtr error); + try + { + if (error != IntPtr.Zero) + { + Native.leveldb_free(error); + return null; + } + return value.ToByteArray(length); + } + finally + { + if (value != IntPtr.Zero) Native.leveldb_free(value); + } + } + + public Snapshot GetSnapshot() + { + return new Snapshot(handle); + } + + public Iterator NewIterator(ReadOptions options) + { + return new Iterator(Native.leveldb_create_iterator(handle, options.handle)); + } + + public static DB Open(string name) + { + return Open(name, Options.Default); + } + + public static DB Open(string name, Options options) + { + IntPtr handle = Native.leveldb_open(options.handle, Path.GetFullPath(name), out IntPtr error); + NativeHelper.CheckError(error); + return new DB(handle); + } + + public void Put(object options, byte[] key, byte[] value) + { + throw new InvalidOperationException("C# LevelDB Storage is readonly"); + } + + public static void Repair(string name, Options options) + { + Native.leveldb_repair_db(options.handle, Path.GetFullPath(name), out IntPtr error); + NativeHelper.CheckError(error); + } + + public void Write(object options, WriteBatch write_batch) + { + throw new InvalidOperationException("C# LevelDB Storage is readonly"); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs new file mode 100644 index 0000000000..f94591409f --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs @@ -0,0 +1,70 @@ +using Neo.IO.Caching; +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace NEOONE.Storage.LevelDB +{ + public static class Helper + { + public static IEnumerable Seek(this DB db, ReadOptions options, byte table, byte[] prefix, SeekDirection direction, Func resultSelector) + { + using Iterator it = db.NewIterator(options); + byte[] target = CreateKey(table, prefix); + if (direction == SeekDirection.Forward) + { + for (it.Seek(target); it.Valid(); it.Next()) + { + var key = it.Key(); + if (key.Length < 1 || key[0] != table) break; + yield return resultSelector(it.Key(), it.Value()); + } + } + else + { + // SeekForPrev + + it.Seek(target); + if (!it.Valid()) + it.SeekToLast(); + else if (it.Key().AsSpan().SequenceCompareTo(target) > 0) + it.Prev(); + + for (; it.Valid(); it.Prev()) + { + var key = it.Key(); + if (key.Length < 1 || key[0] != table) break; + yield return resultSelector(it.Key(), it.Value()); + } + } + } + + public static IEnumerable FindRange(this DB db, ReadOptions options, byte[] startKey, byte[] endKey, Func resultSelector) + { + using Iterator it = db.NewIterator(options); + for (it.Seek(startKey); it.Valid(); it.Next()) + { + byte[] key = it.Key(); + if (key.AsSpan().SequenceCompareTo(endKey) > 0) break; + yield return resultSelector(key, it.Value()); + } + } + + internal static byte[] ToByteArray(this IntPtr data, UIntPtr length) + { + if (data == IntPtr.Zero) return null; + byte[] buffer = new byte[(int)length]; + Marshal.Copy(data, buffer, 0, (int)length); + return buffer; + } + + public static byte[] CreateKey(byte table, byte[] key = null) + { + if (key is null || key.Length == 0) return new[] { table }; + byte[] buffer = new byte[1 + key.Length]; + buffer[0] = table; + Buffer.BlockCopy(key, 0, buffer, 1, key.Length); + return buffer; + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs new file mode 100644 index 0000000000..8fdc7a4fe0 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs @@ -0,0 +1,75 @@ +using System; + +namespace NEOONE.Storage.LevelDB +{ + public class Iterator : IDisposable + { + private IntPtr handle; + + internal Iterator(IntPtr handle) + { + this.handle = handle; + } + + private void CheckError() + { + Native.leveldb_iter_get_error(handle, out IntPtr error); + NativeHelper.CheckError(error); + } + + public void Dispose() + { + if (handle != IntPtr.Zero) + { + Native.leveldb_iter_destroy(handle); + handle = IntPtr.Zero; + } + } + + public byte[] Key() + { + IntPtr key = Native.leveldb_iter_key(handle, out UIntPtr length); + CheckError(); + return key.ToByteArray(length); + } + + public void Next() + { + Native.leveldb_iter_next(handle); + CheckError(); + } + + public void Prev() + { + Native.leveldb_iter_prev(handle); + CheckError(); + } + + public void Seek(byte[] target) + { + Native.leveldb_iter_seek(handle, target, (UIntPtr)target.Length); + } + + public void SeekToFirst() + { + Native.leveldb_iter_seek_to_first(handle); + } + + public void SeekToLast() + { + Native.leveldb_iter_seek_to_last(handle); + } + + public bool Valid() + { + return Native.leveldb_iter_valid(handle); + } + + public byte[] Value() + { + IntPtr value = Native.leveldb_iter_value(handle, out UIntPtr length); + CheckError(); + return value.ToByteArray(length); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs new file mode 100644 index 0000000000..bdad85aa01 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs @@ -0,0 +1,12 @@ +using System.Data.Common; + +namespace NEOONE.Storage.LevelDB +{ + public class LevelDBException : DbException + { + internal LevelDBException(string message) + : base(message) + { + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs new file mode 100644 index 0000000000..6276f35b87 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs @@ -0,0 +1,251 @@ +using System; +using System.Runtime.InteropServices; + +namespace NEOONE.Storage.LevelDB +{ + public enum CompressionType : byte + { + kNoCompression = 0x0, + kSnappyCompression = 0x1 + } + + public static class Native + { + #region Logger + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_logger_create(IntPtr /* Action */ logger); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_logger_destroy(IntPtr /* logger*/ option); + #endregion + + #region DB + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_open(IntPtr /* Options*/ options, string name, out IntPtr error); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_close(IntPtr /*DB */ db); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_put(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, byte[] key, UIntPtr keylen, byte[] val, UIntPtr vallen, out IntPtr errptr); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_delete(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, byte[] key, UIntPtr keylen, out IntPtr errptr); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_write(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, IntPtr /* WriteBatch */ batch, out IntPtr errptr); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_get(IntPtr /* DB */ db, IntPtr /* ReadOptions*/ options, byte[] key, UIntPtr keylen, out UIntPtr vallen, out IntPtr errptr); + + //[DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + //static extern void leveldb_approximate_sizes(IntPtr /* DB */ db, int num_ranges, byte[] range_start_key, long range_start_key_len, byte[] range_limit_key, long range_limit_key_len, out long sizes); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_create_iterator(IntPtr /* DB */ db, IntPtr /* ReadOption */ options); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_create_snapshot(IntPtr /* DB */ db); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_release_snapshot(IntPtr /* DB */ db, IntPtr /* SnapShot*/ snapshot); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_property_value(IntPtr /* DB */ db, string propname); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_repair_db(IntPtr /* Options*/ options, string name, out IntPtr error); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_destroy_db(IntPtr /* Options*/ options, string name, out IntPtr error); + + #region extensions + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_free(IntPtr /* void */ ptr); + + #endregion + + + #endregion + + #region Env + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_create_default_env(); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_env_destroy(IntPtr /*Env*/ cache); + #endregion + + #region Iterator + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_destroy(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool leveldb_iter_valid(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_seek_to_first(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_seek_to_last(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_seek(IntPtr /*Iterator*/ iterator, byte[] key, UIntPtr length); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_next(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_prev(IntPtr /*Iterator*/ iterator); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_iter_key(IntPtr /*Iterator*/ iterator, out UIntPtr length); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_iter_value(IntPtr /*Iterator*/ iterator, out UIntPtr length); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_iter_get_error(IntPtr /*Iterator*/ iterator, out IntPtr error); + #endregion + + #region Options + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_options_create(); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_destroy(IntPtr /*Options*/ options); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_create_if_missing(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_error_if_exists(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_info_log(IntPtr /*Options*/ options, IntPtr /* Logger */ logger); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_paranoid_checks(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_env(IntPtr /*Options*/ options, IntPtr /*Env*/ env); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_write_buffer_size(IntPtr /*Options*/ options, UIntPtr size); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_max_open_files(IntPtr /*Options*/ options, int max); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_cache(IntPtr /*Options*/ options, IntPtr /*Cache*/ cache); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_block_size(IntPtr /*Options*/ options, UIntPtr size); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_block_restart_interval(IntPtr /*Options*/ options, int interval); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_compression(IntPtr /*Options*/ options, CompressionType level); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_comparator(IntPtr /*Options*/ options, IntPtr /*Comparator*/ comparer); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_options_set_filter_policy(IntPtr /*Options*/ options, IntPtr /*FilterPolicy*/ policy); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_filterpolicy_create_bloom(int bits_per_key); + #endregion + + #region ReadOptions + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_readoptions_create(); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_readoptions_destroy(IntPtr /*ReadOptions*/ options); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_readoptions_set_verify_checksums(IntPtr /*ReadOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_readoptions_set_fill_cache(IntPtr /*ReadOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_readoptions_set_snapshot(IntPtr /*ReadOptions*/ options, IntPtr /*SnapShot*/ snapshot); + #endregion + + #region WriteBatch + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_writebatch_create(); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writebatch_destroy(IntPtr /* WriteBatch */ batch); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writebatch_clear(IntPtr /* WriteBatch */ batch); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writebatch_put(IntPtr /* WriteBatch */ batch, byte[] key, UIntPtr keylen, byte[] val, UIntPtr vallen); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writebatch_delete(IntPtr /* WriteBatch */ batch, byte[] key, UIntPtr keylen); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writebatch_iterate(IntPtr /* WriteBatch */ batch, object state, Action put, Action deleted); + #endregion + + #region WriteOptions + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_writeoptions_create(); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writeoptions_destroy(IntPtr /*WriteOptions*/ options); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_writeoptions_set_sync(IntPtr /*WriteOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); + #endregion + + #region Cache + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr leveldb_cache_create_lru(int capacity); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_cache_destroy(IntPtr /*Cache*/ cache); + #endregion + + #region Comparator + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr /* leveldb_comparator_t* */ + leveldb_comparator_create( + IntPtr /* void* */ state, + IntPtr /* void (*)(void*) */ destructor, + IntPtr + /* int (*compare)(void*, + const char* a, size_t alen, + const char* b, size_t blen) */ + compare, + IntPtr /* const char* (*)(void*) */ name); + + [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] + public static extern void leveldb_comparator_destroy(IntPtr /* leveldb_comparator_t* */ cmp); + + #endregion + } + + internal static class NativeHelper + { + public static void CheckError(IntPtr error) + { + if (error != IntPtr.Zero) + { + string message = Marshal.PtrToStringAnsi(error); + Native.leveldb_free(error); + throw new LevelDBException(message); + } + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs new file mode 100644 index 0000000000..bfe4f4c3a0 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs @@ -0,0 +1,87 @@ +using System; + +namespace NEOONE.Storage.LevelDB +{ + public class Options + { + public static readonly Options Default = new Options(); + internal readonly IntPtr handle = Native.leveldb_options_create(); + + public bool CreateIfMissing + { + set + { + Native.leveldb_options_set_create_if_missing(handle, value); + } + } + + public bool ErrorIfExists + { + set + { + Native.leveldb_options_set_error_if_exists(handle, value); + } + } + + public bool ParanoidChecks + { + set + { + Native.leveldb_options_set_paranoid_checks(handle, value); + } + } + + public int WriteBufferSize + { + set + { + Native.leveldb_options_set_write_buffer_size(handle, (UIntPtr)value); + } + } + + public int MaxOpenFiles + { + set + { + Native.leveldb_options_set_max_open_files(handle, value); + } + } + + public int BlockSize + { + set + { + Native.leveldb_options_set_block_size(handle, (UIntPtr)value); + } + } + + public int BlockRestartInterval + { + set + { + Native.leveldb_options_set_block_restart_interval(handle, value); + } + } + + public CompressionType Compression + { + set + { + Native.leveldb_options_set_compression(handle, value); + } + } + + public IntPtr FilterPolicy + { + set + { + Native.leveldb_options_set_filter_policy(handle, value); + } + } + + ~Options() + { + Native.leveldb_options_destroy(handle); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs new file mode 100644 index 0000000000..c4a26cfae3 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs @@ -0,0 +1,39 @@ +using System; + +namespace NEOONE.Storage.LevelDB +{ + public class ReadOptions + { + public static readonly ReadOptions Default = new ReadOptions(); + internal readonly IntPtr handle = Native.leveldb_readoptions_create(); + + public bool VerifyChecksums + { + set + { + Native.leveldb_readoptions_set_verify_checksums(handle, value); + } + } + + public bool FillCache + { + set + { + Native.leveldb_readoptions_set_fill_cache(handle, value); + } + } + + public Snapshot Snapshot + { + set + { + Native.leveldb_readoptions_set_snapshot(handle, value.handle); + } + } + + ~ReadOptions() + { + Native.leveldb_readoptions_destroy(handle); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs new file mode 100644 index 0000000000..202b9039be --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs @@ -0,0 +1,24 @@ +using System; + +namespace NEOONE.Storage.LevelDB +{ + public class Snapshot : IDisposable + { + internal IntPtr db, handle; + + internal Snapshot(IntPtr db) + { + this.db = db; + this.handle = Native.leveldb_create_snapshot(db); + } + + public void Dispose() + { + if (handle != IntPtr.Zero) + { + Native.leveldb_release_snapshot(db, handle); + handle = IntPtr.Zero; + } + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs b/packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs new file mode 100644 index 0000000000..d2437e46fe --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs @@ -0,0 +1,29 @@ +using System; + +namespace NEOONE.Storage.LevelDB +{ + public class WriteBatch + { + internal readonly IntPtr handle = Native.leveldb_writebatch_create(); + + ~WriteBatch() + { + Native.leveldb_writebatch_destroy(handle); + } + + public void Clear() + { + Native.leveldb_writebatch_clear(handle); + } + + public void Delete(byte[] key) + { + Native.leveldb_writebatch_delete(handle, key, (UIntPtr)key.Length); + } + + public void Put(byte[] key, byte[] value) + { + Native.leveldb_writebatch_put(handle, key, (UIntPtr)key.Length, value, (UIntPtr)value.Length); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs b/packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs new file mode 100644 index 0000000000..2bdc8768b5 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs @@ -0,0 +1,26 @@ +using Neo.Persistence; +using NEOONE.Storage.LevelDB; + +namespace NEOONE.Storage +{ + public class LevelDBStore + { + private string path; + + public LevelDBStore(string path) + { + this.path = path; + } + + public void Repar() + { + DB.Repair(path, Options.Default); + } + + public IStore GetStore() + { + return new Store(path); + } + } + +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs b/packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs new file mode 100644 index 0000000000..77422b6e12 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs @@ -0,0 +1,56 @@ +using System; +using Neo.Persistence; +using NEOONE.Storage.LevelDB; +using System.Collections.Generic; +using Neo.IO.Caching; +using LevelSnapshot = NEOONE.Storage.LevelDB.Snapshot; +using LevelHelper = NEOONE.Storage.LevelDB.Helper; + +namespace NEOONE.Storage +{ + internal class Snapshot : ISnapshot + { + private readonly DB db; + private readonly LevelSnapshot snapshot; + private readonly ReadOptions options; + private readonly WriteBatch changeSet; + + public Snapshot(DB db) + { + this.db = db; + this.snapshot = db.GetSnapshot(); + this.options = new ReadOptions { FillCache = false, Snapshot = snapshot }; + this.changeSet = new WriteBatch(); + } + + public void Commit() + { + return; + } + + public void Delete(byte table, byte[] key) + { + return; + } + + public void Dispose() + { + snapshot.Dispose(); + } + + public IEnumerable<(byte[] Key, byte[] Value)> Seek(byte table, byte[] prefix, SeekDirection direction = SeekDirection.Forward) + { + return db.Seek(options, table, prefix, direction, (k, v) => (k[1..], v)); + } + + public void Put(byte table, byte[] key, byte[] value) + { + return; + } + + public byte[] TryGet(byte table, byte[] key) + { + return db.Get(options, LevelHelper.CreateKey(table, key)); + } + } +} diff --git a/packages/neo-one-csharp-vm/lib/Storage/Store.cs b/packages/neo-one-csharp-vm/lib/Storage/Store.cs new file mode 100644 index 0000000000..0a639a0686 --- /dev/null +++ b/packages/neo-one-csharp-vm/lib/Storage/Store.cs @@ -0,0 +1,55 @@ +using Neo.IO.Caching; +using NEOONE.Storage.LevelDB; +using Neo.Persistence; +using System; +using System.Collections.Generic; +using LevelHelper = NEOONE.Storage.LevelDB.Helper; + +namespace NEOONE.Storage +{ + internal class Store : IStore + { + private const byte SYS_Version = 0xf0; + private readonly DB db; + + public Store(string path) + { + this.db = DB.Open(path, new Options { CreateIfMissing = true, FilterPolicy = Native.leveldb_filterpolicy_create_bloom(15) }); + } + + public void Delete(byte table, byte[] key) + { + throw new InvalidOperationException("C# LevelDB Storage is readonly"); + } + + public void Dispose() + { + db.Dispose(); + } + + public IEnumerable<(byte[], byte[])> Seek(byte table, byte[] prefix, SeekDirection direction = SeekDirection.Forward) + { + return db.Seek(ReadOptions.Default, table, prefix, direction, (k, v) => (k[1..], v)); + } + + public ISnapshot GetSnapshot() + { + return new Snapshot(db); + } + + public void Put(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException("C# LevelDB Storage is readonly"); + } + + public void PutSync(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException("C# LevelDB Storage is readonly"); + } + + public byte[] TryGet(byte table, byte[] key) + { + return db.Get(ReadOptions.Default, LevelHelper.CreateKey(table, key)); + } + } +} diff --git a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts index aec2a85697..fcfea8fd85 100644 --- a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-csharp-vm/src/ApplicationEngine.ts @@ -1,10 +1,10 @@ -import { common } from '@neo-one/client-common'; -import { TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { common, VMState } from '@neo-one/client-common'; +import { SnapshotName, TriggerType, Verifiable } from '@neo-one/csharp-core'; import { BN } from 'bn.js'; import _ from 'lodash'; import { EngineMethods } from './Methods'; import { parse as parseStackItems } from './StackItems'; -import { DispatcherFunc, SnapshotName } from './types'; +import { DispatcherFunc } from './types'; export interface CreateOptions { readonly trigger: TriggerType; @@ -44,9 +44,11 @@ export class ApplicationEngine { } public get state() { - return this.dispatch({ - method: 'getvmstate', - }); + return VMState[ + this.dispatch({ + method: 'getvmstate', + }) + ]; } public get resultStack() { diff --git a/packages/neo-one-csharp-vm/src/dispatcher.ts b/packages/neo-one-csharp-vm/src/Dispatcher.ts similarity index 78% rename from packages/neo-one-csharp-vm/src/dispatcher.ts rename to packages/neo-one-csharp-vm/src/Dispatcher.ts index bf667f73aa..a482b0a8a6 100644 --- a/packages/neo-one-csharp-vm/src/dispatcher.ts +++ b/packages/neo-one-csharp-vm/src/Dispatcher.ts @@ -1,4 +1,4 @@ -import path from 'path'; +import * as nodePath from 'path'; import { ApplicationEngine, CreateOptions } from './ApplicationEngine'; import { BaseMethods, EngineMethods, SnapshotMethods } from './Methods'; import { SnapshotHandler } from './SnapshotHandler'; @@ -8,30 +8,36 @@ import { constants, createCSharpDispatchInvoke } from './utils'; export interface DispatcherMethods extends BaseMethods, SnapshotMethods, EngineMethods {} const engineAssemblyOptions = { - assemblyFile: path.join(constants.CSHARP_APP_ROOT, 'Dispatcher.dll'), + 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; +} + export class Dispatcher { public readonly init: boolean; public readonly dispatch: DispatcherFunc; + public readonly options: DispatcherOptions; - public constructor() { + public constructor(options: DispatcherOptions = {}) { + this.options = options; this.dispatch = createDispatcher(); - this.init = this.initialize(); + this.init = this.initialize(this.options.levelDBPath); } public withSnapshots( func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, ) { + this.resetSnapshots(); const main = new SnapshotHandler(this, 'main'); const clone = new SnapshotHandler(this, 'clone'); const result = func({ main, clone }); - this.resetSnapshots(); return result; } @@ -65,12 +71,15 @@ export class Dispatcher { public reset(): void { this.dispose(); - this.initialize(); + this.initialize(this.options.levelDBPath); } - private initialize(): boolean { + private initialize(path?: string): boolean { return this.dispatch({ method: 'init', + args: { + path, + }, }); } } diff --git a/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts b/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts index 83859ec535..c933d7cf8d 100644 --- a/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts +++ b/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts @@ -1,7 +1,11 @@ import { DefaultMethods, DispatchMethod } from '../types'; +interface InitArgs { + readonly path?: string; +} + export interface BaseMethods extends DefaultMethods { - readonly init: DispatchMethod; + readonly init: DispatchMethod; readonly dispose_engine: DispatchMethod; readonly snapshot_reset: DispatchMethod; readonly dispose: DispatchMethod; diff --git a/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts b/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts index 15cbd6fd43..fad0d65cdd 100644 --- a/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts @@ -1,7 +1,7 @@ import { VMState } from '@neo-one/client-common'; -import { TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { SnapshotName, TriggerType, Verifiable } from '@neo-one/csharp-core'; import { StackItemReturn } from '../StackItems'; -import { DefaultMethods, DispatchMethod, SnapshotName } from '../types'; +import { DefaultMethods, DispatchMethod } from '../types'; interface CreateEngineArgs { readonly trigger: TriggerType; diff --git a/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts b/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts index 1ec5ee0f5a..409e85ad46 100644 --- a/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts +++ b/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts @@ -1,5 +1,6 @@ import { UInt256, VMState } from '@neo-one/client-common'; -import { DefaultMethods, DispatchMethod, SnapshotName, SnapshotPartial } from '../types'; +import { SnapshotName, SnapshotPartial } from '@neo-one/csharp-core'; +import { DefaultMethods, DispatchMethod } from '../types'; interface SnapshotChoice { readonly snapshot: SnapshotName; @@ -19,8 +20,13 @@ interface CommitArgs extends Partial { readonly partial?: SnapshotPartial; } -interface SetHeightArgs extends SnapshotChoice { +interface ChangeHashIndexArgs extends SnapshotChoice { readonly index: number; + readonly hash: UInt256; +} + +interface SetPersistingBlockArgs extends SnapshotChoice { + readonly block: Buffer; } export interface SnapshotMethods extends DefaultMethods { @@ -28,5 +34,8 @@ export interface SnapshotMethods extends DefaultMethods { readonly snapshot_transactions_add: DispatchMethod; readonly snapshot_commit: DispatchMethod; readonly snapshot_clone: DispatchMethod; - readonly snapshot_set_height: DispatchMethod; + readonly snapshot_change_block_hash_index: DispatchMethod; + readonly snapshot_change_header_hash_index: DispatchMethod; + readonly snapshot_set_persisting_block: DispatchMethod; + readonly snapshot_get_change_set: DispatchMethod; } diff --git a/packages/neo-one-csharp-vm/src/SnapshotHandler.ts b/packages/neo-one-csharp-vm/src/SnapshotHandler.ts index e096599ff3..e76ef0f4c5 100644 --- a/packages/neo-one-csharp-vm/src/SnapshotHandler.ts +++ b/packages/neo-one-csharp-vm/src/SnapshotHandler.ts @@ -1,7 +1,7 @@ -import { VMState } from '@neo-one/client-common'; -import { Block, Transaction } from '@neo-one/csharp-core'; +import { UInt256, VMState } from '@neo-one/client-common'; +import { Block, SnapshotName, SnapshotPartial, Transaction } from '@neo-one/csharp-core'; import { SnapshotMethods } from './Methods'; -import { DispatcherFunc, SnapshotName, SnapshotPartial } from './types'; +import { DispatcherFunc } from './types'; interface SnapshotDispatcher { readonly dispatch: DispatcherFunc; @@ -51,16 +51,40 @@ export class SnapshotHandler { }); } - public setHeight(index: number) { + public changeBlockHashIndex(index: number, hash: UInt256) { return this.dispatch({ - method: 'snapshot_set_height', + 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 commit(partial?: SnapshotPartial) { return this.dispatch({ method: 'snapshot_commit', @@ -71,6 +95,15 @@ export class SnapshotHandler { }); } + public getChangeSet() { + return this.dispatch({ + method: 'snapshot_get_change_set', + args: { + snapshot: this.snapshot, + }, + }); + } + public clone() { this.cloneInternal(); } diff --git a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts index c67843c24d..b5f6aca858 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts @@ -1,16 +1,6 @@ import { common, ScriptBuilder, UInt256, WitnessScopeModel } from '@neo-one/client-common'; -import { - ArrayStackItem, - Block, - ByteStringStackItem, - ConsensusData, - Signer, - Transaction, - TriggerType, - Witness, -} from '@neo-one/csharp-core'; +import { ArrayStackItem, Block, ConsensusData, Signer, Transaction, TriggerType, Witness } from '@neo-one/csharp-core'; import { BN } from 'bn.js'; -import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; const createGetBlockScript = (hash: UInt256) => { @@ -21,36 +11,69 @@ const createGetBlockScript = (hash: UInt256) => { return script.build(); }; -const genesisHash = common.hexToUInt256('0xecaee33262f1bc7c7c28f2b25b54a5d61d50670871f45c0c6fe755a40cbde4a8'); - describe('TS <--> C# Storage Test', () => { - const dispatcher = new Dispatcher(); - const engine = new ApplicationEngine(dispatcher); - beforeEach(() => { - dispatcher.reset(); - }); + 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([]), + }), + ], + }); - test('genesis block -- returns hash', () => { - engine.create({ - trigger: TriggerType.Application, - snapshot: 'main', - gas: 0, - testMode: true, + 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], }); - const script = createGetBlockScript(genesisHash); - engine.loadScript(script); - const state = engine.execute(); - expect(state).toEqual('HALT'); + const script = createGetBlockScript(block.hash); + dispatcher.withSnapshots(({ main }) => { + main.addBlock(block); + main.addTransaction(tx, block.index); + main.changeBlockHashIndex(block.index, block.hash); - const stack = engine.resultStack; - const result = stack[0] as ArrayStackItem; + dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + snapshot: 'main', + gas: 0, + testMode: true, + }, + (engine) => { + engine.loadScript(script); + const newState = engine.execute(); + expect(newState).toEqual('HALT'); - const hashStackItem = result.value[0] as ByteStringStackItem; - expect(hashStackItem.value).toEqual(genesisHash); + const resultStack = engine.resultStack; + const arr = resultStack[0] as ArrayStackItem; + const hashFromStackItem = common.asUInt256(arr.value[0].value); + expect(hashFromStackItem).toEqual(block.hash); + }, + ); + }); }); - test('add a block to the snapshot -- returns Block StackItems', () => { + 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: [], @@ -86,23 +109,26 @@ describe('TS <--> C# Storage Test', () => { dispatcher.withSnapshots(({ main }) => { main.addBlock(block); main.addTransaction(tx, block.index); - main.setHeight(block.index); - - engine.create({ - trigger: TriggerType.Application, - snapshot: 'main', - gas: 0, - testMode: true, - }); + main.changeBlockHashIndex(block.index, block.hash); - engine.loadScript(script); - const newState = engine.execute(); - expect(newState).toEqual('HALT'); + dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + snapshot: 'main', + gas: 0, + testMode: true, + }, + (engine) => { + engine.loadScript(script); + const newState = engine.execute(); + expect(newState).toEqual('HALT'); - const resultStack = engine.resultStack; - const arr = resultStack[0] as ArrayStackItem; - const hashFromStackItem = common.asUInt256(arr.value[0].value); - expect(hashFromStackItem).toEqual(block.hash); + const resultStack = engine.resultStack; + const arr = resultStack[0] as ArrayStackItem; + const hashFromStackItem = common.asUInt256(arr.value[0].value); + expect(hashFromStackItem).toEqual(block.hash); + }, + ); }); }); }); diff --git a/packages/neo-one-csharp-vm/src/types.ts b/packages/neo-one-csharp-vm/src/types.ts index 2b9919f818..8dd1fdfd58 100644 --- a/packages/neo-one-csharp-vm/src/types.ts +++ b/packages/neo-one-csharp-vm/src/types.ts @@ -6,9 +6,6 @@ export type ExecutionContext = any; // TODO: not implemented export type Notifications = any; -export type SnapshotName = 'main' | 'clone'; -export type SnapshotPartial = 'blocks' | 'transactions'; - export interface DispatchMethodNoArgs { readonly returnType: Return; } From 285c0f72656697224ece11c007d4661884d7439e Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 9 Sep 2020 10:59:54 -0700 Subject: [PATCH 097/141] chore(vm): migrate `csharp-*` back to `node-*` (#2164) --- .../neo-one-client-common/src/models/types.ts | 2 +- .../manifest/ContractMethodDescriptorModel.ts | 4 +- .../neo-one-csharp-blockchain/gulpfile.js | 5 - .../neo-one-csharp-blockchain/package.json | 33 - .../src/Blockchain.ts | 303 - .../src/StorageCache.ts | 263 - .../neo-one-csharp-blockchain/src/errors.ts | 22 - .../neo-one-csharp-blockchain/tsconfig.json | 3 - packages/neo-one-csharp-core/gulpfile.js | 5 - packages/neo-one-csharp-core/package.json | 30 - packages/neo-one-csharp-core/src/Block.ts | 223 - packages/neo-one-csharp-core/src/BlockBase.ts | 219 - .../neo-one-csharp-core/src/Blockchain.ts | 37 - .../neo-one-csharp-core/src/ConsensusData.ts | 62 - packages/neo-one-csharp-core/src/Equatable.ts | 9 - packages/neo-one-csharp-core/src/Header.ts | 66 - packages/neo-one-csharp-core/src/Node.ts | 36 - .../neo-one-csharp-core/src/Serializable.ts | 63 - packages/neo-one-csharp-core/src/Settings.ts | 32 - packages/neo-one-csharp-core/src/Signer.ts | 66 - packages/neo-one-csharp-core/src/Storage.ts | 125 - .../neo-one-csharp-core/src/StorageItem.ts | 100 - .../src/TransactionData.ts | 148 - .../neo-one-csharp-core/src/TrimmedBlock.ts | 154 - .../neo-one-csharp-core/src/Verifiable.ts | 17 - packages/neo-one-csharp-core/src/Witness.ts | 54 - packages/neo-one-csharp-core/src/constants.ts | 6 - .../src/crypto/MerkleTree.ts | 158 - .../neo-one-csharp-core/src/crypto/index.ts | 1 - packages/neo-one-csharp-core/src/errors.ts | 31 - packages/neo-one-csharp-core/src/index.ts | 28 - .../src/transaction/Transaction.ts | 203 - .../src/transaction/attributes/Attribute.ts | 18 - .../transaction/attributes/AttributeBase.ts | 35 - .../attributes/HighPriorityAttribute.ts | 7 - .../src/transaction/attributes/index.ts | 2 - .../src/transaction/index.ts | 3 - .../src/utils/BinaryReader.ts | 204 - .../neo-one-csharp-core/src/utils/index.ts | 2 - .../neo-one-csharp-core/src/utils/utils.ts | 215 - packages/neo-one-csharp-core/src/vm.ts | 70 - packages/neo-one-csharp-core/tsconfig.json | 3 - packages/neo-one-csharp-vm/gulpfile.js | 5 - packages/neo-one-csharp-vm/package.json | 28 - .../src/__tests__/syscalls.test.ts | 213 - packages/neo-one-csharp-vm/src/index.ts | 2 - packages/neo-one-csharp-vm/tsconfig.json | 3 - packages/neo-one-node-blockchain/package.json | 14 +- .../neo-one-node-blockchain/src/Blockchain.ts | 645 +- .../src/PersistingBlockchain.ts | 2 +- .../src/StorageCache.ts | 837 +- .../src/ValidatorCache.ts | 169 - .../neo-one-node-blockchain/src/Verifiable.ts | 126 - .../src/WriteBatchBlockchain.ts | 1022 - .../src/__tests__/Blockchain.test.ts | 2 +- .../src/__tests__/StorageCache.test.ts | 2 +- .../neo-one-node-blockchain/src/errors.ts | 4 - .../src/getValidators.ts | 359 - packages/neo-one-node-blockchain/src/index.ts | 2 - .../src/utils.ts | 2 +- .../src/verify.ts | 67 +- .../src/wrapExecuteScripts.ts | 34 - packages/neo-one-node-core/gulpfile.js | 4 - packages/neo-one-node-core/package.json | 12 +- packages/neo-one-node-core/src/Account.ts | 165 - .../neo-one-node-core/src/AccountInput.ts | 72 - .../neo-one-node-core/src/AccountUnclaimed.ts | 7 - .../neo-one-node-core/src/AccountUnspent.ts | 7 - packages/neo-one-node-core/src/Asset.ts | 290 - packages/neo-one-node-core/src/AssetType.ts | 1 - packages/neo-one-node-core/src/Block.ts | 37 +- packages/neo-one-node-core/src/BlockBase.ts | 27 +- packages/neo-one-node-core/src/Blockchain.ts | 179 +- .../src/CallFlags.ts | 0 packages/neo-one-node-core/src/CallReceipt.ts | 7 - .../neo-one-node-core/src/ConsensusData.ts | 8 +- packages/neo-one-node-core/src/Contract.ts | 154 - .../src/ContractIDState.ts | 0 .../src/ContractPropertyState.ts | 1 - .../src/ContractState.ts | 0 .../src/HashIndexState.ts | 0 packages/neo-one-node-core/src/Header.ts | 2 +- .../src/HeaderHashList.ts | 0 .../neo-one-node-core/src/InvocationData.ts | 174 - packages/neo-one-node-core/src/Node.ts | 7 +- .../neo-one-node-core/src/ScriptContainer.ts | 36 - .../neo-one-node-core/src/Serializable.ts | 10 +- packages/neo-one-node-core/src/Settings.ts | 42 +- .../src/StackItems/StackItem.ts | 0 .../src/StackItems/StackItemType.ts | 0 .../src/StackItems/index.ts | 0 packages/neo-one-node-core/src/Storage.ts | 171 +- .../neo-one-node-core/src/StorageFlags.ts | 6 - packages/neo-one-node-core/src/StorageItem.ts | 161 +- .../src/StorageKey.ts | 0 .../neo-one-node-core/src/TrimmedBlock.ts | 32 +- packages/neo-one-node-core/src/Validator.ts | 98 - .../neo-one-node-core/src/ValidatorsCount.ts | 69 - packages/neo-one-node-core/src/Verifiable.ts | 128 +- packages/neo-one-node-core/src/Witness.ts | 9 +- .../src/__tests__/newBlock.ts | 33 - .../storageChange/StorageChangeAdd.test.ts | 23 - .../storageChange/StorageChangeDelete.test.ts | 21 - .../storageChange/StorageChangeModify.test.ts | 23 - .../neo-one-node-core/src/action/Action.ts | 33 - .../src/action/ActionBase.ts | 80 - .../src/action/ActionType.ts | 18 - .../neo-one-node-core/src/action/LogAction.ts | 55 - .../src/action/NotificationAction.ts | 57 - .../neo-one-node-core/src/action/index.ts | 5 - packages/neo-one-node-core/src/constants.ts | 6 +- .../ArrayContractParameter.ts | 43 - .../BooleanContractParameter.ts | 54 - .../ByteArrayContractParameter.ts | 48 - .../contractParameter/ContractParameter.ts | 115 - .../ContractParameterBase.ts | 54 - .../ContractParameterType.ts | 1 - .../Hash160ContractParameter.ts | 56 - .../Hash256ContractParameter.ts | 56 - .../IntegerContractParameter.ts | 53 - .../InteropInterfaceContractParameter.ts | 25 - .../contractParameter/MapContractParameter.ts | 48 - .../PublicKeyContractParameter.ts | 56 - .../SignatureContractParameter.ts | 54 - .../StringContractParameter.ts | 48 - .../VoidContractParameter.ts | 29 - .../src/contractParameter/index.ts | 15 - .../src/disassembleByteCode.ts | 92 - packages/neo-one-node-core/src/index.ts | 41 +- .../src/invocationResult/InvocationResult.ts | 21 - .../invocationResult/InvocationResultBase.ts | 89 - .../invocationResult/InvocationResultError.ts | 60 - .../InvocationResultSuccess.ts | 36 - .../src/invocationResult/index.ts | 4 - .../src/manifest/ContractABI.ts | 0 .../src/manifest/ContractEventDescriptor.ts | 0 .../src/manifest/ContractGroup.ts | 0 .../src/manifest/ContractManifest.ts | 0 .../src/manifest/ContractMethodDescriptor.ts | 0 .../manifest/ContractParameterDefinition.ts | 0 .../src/manifest/ContractPermission.ts | 0 .../manifest/ContractPermissionDescriptor.ts | 0 .../src/manifest/index.ts | 0 .../src/net/ConnectedPeer.ts | 36 - packages/neo-one-node-core/src/net/Network.ts | 40 - packages/neo-one-node-core/src/net/Peer.ts | 163 - packages/neo-one-node-core/src/net/event.ts | 14 - packages/neo-one-node-core/src/net/index.ts | 5 - packages/neo-one-node-core/src/net/types.ts | 21 - .../src/payload/ConsensusPayload.ts | 188 - .../src/payload/UnsignedConsensusPayload.ts | 89 - .../neo-one-node-core/src/payload/index.ts | 3 - .../message/ChangeViewConsensusMessage.ts | 45 - .../src/payload/message/ConsensusMessage.ts | 29 - .../payload/message/ConsensusMessageBase.ts | 58 - .../payload/message/ConsensusMessageType.ts | 18 - .../message/PrepareRequestConsensusMessage.ts | 89 - .../PrepareResponseConsensusMessage.ts | 42 - .../src/payload/message/index.ts | 6 - .../src/storageChange/StorageChange.ts | 24 - .../src/storageChange/StorageChangeAdd.ts | 35 - .../StorageChangeAddModifyBase.ts | 39 - .../src/storageChange/StorageChangeBase.ts | 77 - .../src/storageChange/StorageChangeDelete.ts | 33 - .../src/storageChange/StorageChangeModify.ts | 35 - .../src/storageChange/StorageChangeType.ts | 18 - .../src/storageChange/index.ts | 6 - .../src/transaction/Transaction.ts | 16 +- .../src/transaction/TransactionState.ts | 0 .../src/transaction/index.ts | 1 + packages/neo-one-node-core/src/utils/utils.ts | 19 +- packages/neo-one-node-core/src/vm.ts | 113 +- .../lib/Dispatcher.Engine.cs | 7 +- .../lib/Dispatcher.Snapshot.cs | 0 .../lib/Dispatcher.cs | 0 .../lib/Dispatcher.csproj | 0 .../lib/ReturnHelpers.cs | 0 .../lib/SnapshotHelpers.cs | 0 .../lib/Storage/Level/DB.cs | 0 .../lib/Storage/Level/Helper.cs | 0 .../lib/Storage/Level/Iterator.cs | 0 .../lib/Storage/Level/LevelDBException.cs | 0 .../lib/Storage/Level/Native.cs | 0 .../lib/Storage/Level/Options.cs | 0 .../lib/Storage/Level/ReadOptions.cs | 0 .../lib/Storage/Level/Snapshot.cs | 0 .../lib/Storage/Level/WriteBatch.cs | 0 .../lib/Storage/LevelDBStore.cs | 0 .../lib/Storage/Snapshot.cs | 0 .../lib/Storage/Store.cs | 0 packages/neo-one-node-vm/package.json | 21 +- .../src/ApplicationEngine.ts | 5 +- .../src/Dispatcher.ts | 4 +- .../src/Methods/BaseMethods.ts | 0 .../src/Methods/EngineMethods.ts | 4 +- .../src/Methods/SnapshotMethods.ts | 2 +- .../src/Methods/common.ts | 0 .../src/Methods/index.ts | 0 .../src/SnapshotHandler.ts | 2 +- .../src/StackItems/StackItemReturn.ts | 2 +- .../src/StackItems/index.ts | 0 .../src/StackItems/parse.ts | 2 +- .../neo-one-node-vm/src/__data__/assets.ts | 55 - .../src/__data__/createBlockchain.ts | 87 - .../neo-one-node-vm/src/__data__/factory.ts | 310 - .../neo-one-node-vm/src/__data__/index.ts | 9 - packages/neo-one-node-vm/src/__data__/keys.ts | 85 - .../src/__data__/transactions.ts | 460 - .../neo-one-node-vm/src/__data__/utils.ts | 31 - .../src/__tests__/ApplicationEngine.test.ts | 2 +- .../src/__tests__/Dispatcher.test.ts | 2 +- .../__snapshots__/execute.test.ts.snap | 69535 ---------------- .../__snapshots__/syscalls.test.ts.snap | 2585 - .../src/__tests__/execute.test.ts | 1849 - .../src/__tests__/opcodes.test.ts | 1833 - .../stackItem/ArrayLikeStackItem.test.ts | 79 - .../stackItem/EnumIterStackItems.test.ts | 73 - .../stackItem/EquatableStackItem.test.ts | 25 - .../__tests__/stackItem/MapStackItem.test.ts | 44 - .../stackItem/ObjectStackItem.test.ts | 23 - .../src/__tests__/stackItem/Stack.test.ts | 281 - .../src/__tests__/stackItem/StackItem.test.ts | 231 - .../__tests__/stackItem/StackItemBase.test.ts | 114 - .../ArrayLikeStackItem.test.ts.snap | 12 - .../EnumIterStackItems.test.ts.snap | 3 - .../EquatableStackItem.test.ts.snap | 3 - .../__snapshots__/MapStackItem.test.ts.snap | 31 - .../ObjectStackItem.test.ts.snap | 9 - .../__snapshots__/StackItem.test.ts.snap | 89 - .../src/__tests__/storage.test.ts | 2 +- .../src/__tests__/syscalls.test.ts | 3559 +- packages/neo-one-node-vm/src/constants.ts | 115 - packages/neo-one-node-vm/src/errors.ts | 201 - packages/neo-one-node-vm/src/execute.ts | 354 - packages/neo-one-node-vm/src/index.ts | 11 +- packages/neo-one-node-vm/src/opcodes.ts | 2018 - .../src/stackItem/AccountStackItem.ts | 8 - .../src/stackItem/ArrayLikeStackItem.ts | 71 - .../src/stackItem/ArrayStackItem.ts | 16 - .../src/stackItem/AssetStackItem.ts | 8 - .../src/stackItem/AttributeStackItem.ts | 56 - .../src/stackItem/BlockStackItem.ts | 16 - .../src/stackItem/BooleanStackItem.ts | 40 - .../src/stackItem/BufferStackItem.ts | 19 - .../stackItem/ConsensusPayloadStackItem.ts | 8 - .../src/stackItem/ContractStackItem.ts | 8 - .../src/stackItem/ECPointStackItem.ts | 24 - .../src/stackItem/EnumeratorStackItem.ts | 23 - .../src/stackItem/EquatableKeyStackItem.ts | 20 - .../src/stackItem/HeaderStackItem.ts | 12 - .../src/stackItem/InputStackItem.ts | 8 - .../src/stackItem/IntegerStackItem.ts | 77 - .../src/stackItem/IteratorStackItem.ts | 12 - .../src/stackItem/MapStackItem.ts | 148 - .../src/stackItem/ObjectStackItem.ts | 34 - .../src/stackItem/OutputStackItem.ts | 8 - .../src/stackItem/StackItem.ts | 50 - .../src/stackItem/StackItemBase.ts | 341 - .../src/stackItem/StackItemEnumerator.ts | 60 - .../src/stackItem/StackItemIterator.ts | 48 - .../src/stackItem/StackItemType.ts | 28 - .../src/stackItem/StorageContextStackItem.ts | 38 - .../src/stackItem/StructStackItem.ts | 38 - .../src/stackItem/TransactionStackItem.ts | 8 - .../src/stackItem/UInt160StackItem.ts | 24 - .../src/stackItem/UInt256StackItem.ts | 24 - .../src/stackItem/ValidatorStackItem.ts | 8 - .../src/stackItem/WitnessStackItem.ts | 8 - .../src/stackItem/deserializeStackItem.ts | 57 - .../neo-one-node-vm/src/stackItem/errors.ts | 89 - .../neo-one-node-vm/src/stackItem/index.ts | 31 - .../src/stackItem/referenceCounter.ts | 12 - packages/neo-one-node-vm/src/syscalls.ts | 878 - .../src/types.ts | 0 .../src/utils.ts | 0 packages/neo-one-node-vm/src/vmUtils.ts | 99 - packages/neo-one-node-vm/tsconfig-output.json | 7 - rush.json | 18 - 278 files changed, 859 insertions(+), 97027 deletions(-) delete mode 100644 packages/neo-one-csharp-blockchain/gulpfile.js delete mode 100644 packages/neo-one-csharp-blockchain/package.json delete mode 100644 packages/neo-one-csharp-blockchain/src/Blockchain.ts delete mode 100644 packages/neo-one-csharp-blockchain/src/StorageCache.ts delete mode 100644 packages/neo-one-csharp-blockchain/src/errors.ts delete mode 100644 packages/neo-one-csharp-blockchain/tsconfig.json delete mode 100644 packages/neo-one-csharp-core/gulpfile.js delete mode 100644 packages/neo-one-csharp-core/package.json delete mode 100644 packages/neo-one-csharp-core/src/Block.ts delete mode 100644 packages/neo-one-csharp-core/src/BlockBase.ts delete mode 100644 packages/neo-one-csharp-core/src/Blockchain.ts delete mode 100644 packages/neo-one-csharp-core/src/ConsensusData.ts delete mode 100644 packages/neo-one-csharp-core/src/Equatable.ts delete mode 100644 packages/neo-one-csharp-core/src/Header.ts delete mode 100644 packages/neo-one-csharp-core/src/Node.ts delete mode 100644 packages/neo-one-csharp-core/src/Serializable.ts delete mode 100644 packages/neo-one-csharp-core/src/Settings.ts delete mode 100644 packages/neo-one-csharp-core/src/Signer.ts delete mode 100644 packages/neo-one-csharp-core/src/Storage.ts delete mode 100644 packages/neo-one-csharp-core/src/StorageItem.ts delete mode 100644 packages/neo-one-csharp-core/src/TransactionData.ts delete mode 100644 packages/neo-one-csharp-core/src/TrimmedBlock.ts delete mode 100644 packages/neo-one-csharp-core/src/Verifiable.ts delete mode 100644 packages/neo-one-csharp-core/src/Witness.ts delete mode 100644 packages/neo-one-csharp-core/src/constants.ts delete mode 100644 packages/neo-one-csharp-core/src/crypto/MerkleTree.ts delete mode 100644 packages/neo-one-csharp-core/src/crypto/index.ts delete mode 100644 packages/neo-one-csharp-core/src/errors.ts delete mode 100644 packages/neo-one-csharp-core/src/index.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/Transaction.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/attributes/index.ts delete mode 100644 packages/neo-one-csharp-core/src/transaction/index.ts delete mode 100644 packages/neo-one-csharp-core/src/utils/BinaryReader.ts delete mode 100644 packages/neo-one-csharp-core/src/utils/index.ts delete mode 100644 packages/neo-one-csharp-core/src/utils/utils.ts delete mode 100644 packages/neo-one-csharp-core/src/vm.ts delete mode 100644 packages/neo-one-csharp-core/tsconfig.json delete mode 100644 packages/neo-one-csharp-vm/gulpfile.js delete mode 100644 packages/neo-one-csharp-vm/package.json delete mode 100644 packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts delete mode 100644 packages/neo-one-csharp-vm/src/index.ts delete mode 100644 packages/neo-one-csharp-vm/tsconfig.json rename packages/{neo-one-csharp-blockchain => neo-one-node-blockchain}/src/PersistingBlockchain.ts (99%) delete mode 100644 packages/neo-one-node-blockchain/src/ValidatorCache.ts delete mode 100644 packages/neo-one-node-blockchain/src/Verifiable.ts delete mode 100644 packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts delete mode 100644 packages/neo-one-node-blockchain/src/getValidators.ts delete mode 100644 packages/neo-one-node-blockchain/src/index.ts rename packages/{neo-one-csharp-blockchain => neo-one-node-blockchain}/src/utils.ts (97%) rename packages/{neo-one-csharp-blockchain => neo-one-node-blockchain}/src/verify.ts (67%) delete mode 100644 packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts delete mode 100644 packages/neo-one-node-core/src/Account.ts delete mode 100644 packages/neo-one-node-core/src/AccountInput.ts delete mode 100644 packages/neo-one-node-core/src/AccountUnclaimed.ts delete mode 100644 packages/neo-one-node-core/src/AccountUnspent.ts delete mode 100644 packages/neo-one-node-core/src/Asset.ts delete mode 100644 packages/neo-one-node-core/src/AssetType.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/CallFlags.ts (100%) delete mode 100644 packages/neo-one-node-core/src/CallReceipt.ts delete mode 100644 packages/neo-one-node-core/src/Contract.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/ContractIDState.ts (100%) delete mode 100644 packages/neo-one-node-core/src/ContractPropertyState.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/ContractState.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/HashIndexState.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/HeaderHashList.ts (100%) delete mode 100644 packages/neo-one-node-core/src/InvocationData.ts delete mode 100644 packages/neo-one-node-core/src/ScriptContainer.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/StackItems/StackItem.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/StackItems/StackItemType.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/StackItems/index.ts (100%) delete mode 100644 packages/neo-one-node-core/src/StorageFlags.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/StorageKey.ts (100%) delete mode 100644 packages/neo-one-node-core/src/Validator.ts delete mode 100644 packages/neo-one-node-core/src/ValidatorsCount.ts delete mode 100644 packages/neo-one-node-core/src/__tests__/newBlock.ts delete mode 100644 packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeAdd.test.ts delete mode 100644 packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeDelete.test.ts delete mode 100644 packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeModify.test.ts delete mode 100644 packages/neo-one-node-core/src/action/Action.ts delete mode 100644 packages/neo-one-node-core/src/action/ActionBase.ts delete mode 100644 packages/neo-one-node-core/src/action/ActionType.ts delete mode 100644 packages/neo-one-node-core/src/action/LogAction.ts delete mode 100644 packages/neo-one-node-core/src/action/NotificationAction.ts delete mode 100644 packages/neo-one-node-core/src/action/index.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/ArrayContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/BooleanContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/ByteArrayContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/ContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/ContractParameterBase.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/ContractParameterType.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/Hash160ContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/Hash256ContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/IntegerContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/InteropInterfaceContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/PublicKeyContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/SignatureContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/StringContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/VoidContractParameter.ts delete mode 100644 packages/neo-one-node-core/src/contractParameter/index.ts delete mode 100644 packages/neo-one-node-core/src/disassembleByteCode.ts delete mode 100644 packages/neo-one-node-core/src/invocationResult/InvocationResult.ts delete mode 100644 packages/neo-one-node-core/src/invocationResult/InvocationResultBase.ts delete mode 100644 packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts delete mode 100644 packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts delete mode 100644 packages/neo-one-node-core/src/invocationResult/index.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractABI.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractEventDescriptor.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractGroup.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractManifest.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractMethodDescriptor.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractParameterDefinition.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractPermission.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/ContractPermissionDescriptor.ts (100%) rename packages/{neo-one-csharp-core => neo-one-node-core}/src/manifest/index.ts (100%) delete mode 100644 packages/neo-one-node-core/src/net/ConnectedPeer.ts delete mode 100644 packages/neo-one-node-core/src/net/Network.ts delete mode 100644 packages/neo-one-node-core/src/net/Peer.ts delete mode 100644 packages/neo-one-node-core/src/net/event.ts delete mode 100644 packages/neo-one-node-core/src/net/index.ts delete mode 100644 packages/neo-one-node-core/src/net/types.ts delete mode 100644 packages/neo-one-node-core/src/payload/ConsensusPayload.ts delete mode 100644 packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts delete mode 100644 packages/neo-one-node-core/src/payload/index.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts delete mode 100644 packages/neo-one-node-core/src/payload/message/index.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChange.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeAdd.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeAddModifyBase.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeBase.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeDelete.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeModify.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/StorageChangeType.ts delete mode 100644 packages/neo-one-node-core/src/storageChange/index.ts rename packages/{neo-one-csharp-core => neo-one-node-core}/src/transaction/TransactionState.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Dispatcher.Engine.cs (94%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Dispatcher.Snapshot.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Dispatcher.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Dispatcher.csproj (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/ReturnHelpers.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/SnapshotHelpers.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/DB.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/Helper.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/Iterator.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/LevelDBException.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/Native.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/Options.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/ReadOptions.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/Snapshot.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Level/WriteBatch.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/LevelDBStore.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Snapshot.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/lib/Storage/Store.cs (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/ApplicationEngine.ts (92%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Dispatcher.ts (97%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Methods/BaseMethods.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Methods/EngineMethods.ts (88%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Methods/SnapshotMethods.ts (95%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Methods/common.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/Methods/index.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/SnapshotHandler.ts (98%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/StackItems/StackItemReturn.ts (97%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/StackItems/index.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/StackItems/parse.ts (97%) delete mode 100644 packages/neo-one-node-vm/src/__data__/assets.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/createBlockchain.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/factory.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/index.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/keys.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/transactions.ts delete mode 100644 packages/neo-one-node-vm/src/__data__/utils.ts rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/__tests__/ApplicationEngine.test.ts (90%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/__tests__/Dispatcher.test.ts (95%) delete mode 100644 packages/neo-one-node-vm/src/__tests__/__snapshots__/execute.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/__snapshots__/syscalls.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/execute.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/opcodes.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/ArrayLikeStackItem.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/EnumIterStackItems.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/EquatableStackItem.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/ObjectStackItem.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/Stack.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/StackItem.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/StackItemBase.test.ts delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ArrayLikeStackItem.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EnumIterStackItems.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EquatableStackItem.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/MapStackItem.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ObjectStackItem.test.ts.snap delete mode 100644 packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/StackItem.test.ts.snap rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/__tests__/storage.test.ts (98%) delete mode 100644 packages/neo-one-node-vm/src/constants.ts delete mode 100644 packages/neo-one-node-vm/src/errors.ts delete mode 100644 packages/neo-one-node-vm/src/execute.ts delete mode 100644 packages/neo-one-node-vm/src/opcodes.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/AccountStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ArrayLikeStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ArrayStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/AssetStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/AttributeStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/BlockStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/BooleanStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/BufferStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ConsensusPayloadStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ContractStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ECPointStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/EnumeratorStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/EquatableKeyStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/HeaderStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/InputStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/IntegerStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/IteratorStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/MapStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ObjectStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/OutputStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StackItemBase.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StackItemEnumerator.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StackItemIterator.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StackItemType.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StorageContextStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/StructStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/TransactionStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/UInt160StackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/UInt256StackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/ValidatorStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/WitnessStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/deserializeStackItem.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/errors.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/index.ts delete mode 100644 packages/neo-one-node-vm/src/stackItem/referenceCounter.ts delete mode 100644 packages/neo-one-node-vm/src/syscalls.ts rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/types.ts (100%) rename packages/{neo-one-csharp-vm => neo-one-node-vm}/src/utils.ts (100%) delete mode 100644 packages/neo-one-node-vm/src/vmUtils.ts delete mode 100644 packages/neo-one-node-vm/tsconfig-output.json diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 6e2bf8f072..0c19ca274a 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -239,7 +239,7 @@ export type WildcardContainerJSON = readonly string[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; readonly parameters: readonly ContractParameterDefinitionJSON[]; - readonly offset?: number; + readonly offset: number; readonly returnType: ContractParameterTypeJSON; } 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 index 0522453555..e853e090f6 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts @@ -11,7 +11,7 @@ export interface ContractMethodDescriptorModelAdd< TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel > extends ContractEventDescriptorModelAdd { readonly returnType: ContractParameterTypeModel; - readonly offset?: number; + readonly offset: number; } export class ContractMethodDescriptorModel< @@ -20,7 +20,7 @@ export class ContractMethodDescriptorModel< extends ContractEventDescriptorModel implements SerializableJSON { public readonly returnType: ContractParameterTypeModel; - public readonly offset?: number; + public readonly offset: number; public constructor(options: ContractMethodDescriptorModelAdd) { super(options); diff --git a/packages/neo-one-csharp-blockchain/gulpfile.js b/packages/neo-one-csharp-blockchain/gulpfile.js deleted file mode 100644 index 6267e6b0d6..0000000000 --- a/packages/neo-one-csharp-blockchain/gulpfile.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.initialize(); diff --git a/packages/neo-one-csharp-blockchain/package.json b/packages/neo-one-csharp-blockchain/package.json deleted file mode 100644 index 1c4a007db5..0000000000 --- a/packages/neo-one-csharp-blockchain/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@neo-one/csharp-blockchain", - "version": "2.7.0", - "description": "NEO•ONE 3.x node-blockchain migration", - "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.7.0", - "@neo-one/csharp-core": "^2.7.0", - "@neo-one/csharp-vm": "^2.7.0", - "@neo-one/logger": "^2.6.1", - "@neo-one/utils": "^2.6.1", - "bn.js": "^5.0.0", - "js-priority-queue": "^0.1.5", - "lodash": "^4.17.15", - "rxjs": "^6.5.3" - }, - "devDependencies": { - "@neo-one/build-tools": "^1.0.0", - "@types/jest": "^24.0.18", - "@types/js-priority-queue": "^0.0.5", - "@types/lodash": "^4.14.138", - "gulp": "~4.0.2", - "tslib": "^1.10.0" - } -} diff --git a/packages/neo-one-csharp-blockchain/src/Blockchain.ts b/packages/neo-one-csharp-blockchain/src/Blockchain.ts deleted file mode 100644 index f111ce2b22..0000000000 --- a/packages/neo-one-csharp-blockchain/src/Blockchain.ts +++ /dev/null @@ -1,303 +0,0 @@ -import { UInt256 } from '@neo-one/client-common'; -import { Block, Blockchain as BlockchainType, BlockchainSettings, Header, Storage, VM } from '@neo-one/csharp-core'; -import PriorityQueue from 'js-priority-queue'; -import { Subject } from 'rxjs'; -import { flatMap, map, toArray } from 'rxjs/operators'; -import { GenesisBlockNotRegisteredError } from './errors'; -import { PersistingBlockchain } from './PersistingBlockchain'; -import { utils } from './utils'; -import { verifyWitnesses } from './verify'; - -// TODO: bring logger over when its time; -const logger = console; - -export interface CreateBlockchainOptions { - readonly onPersistNativeContractScript?: Buffer; - readonly settings: BlockchainSettings; - readonly storage: Storage; - readonly vm: VM; -} - -export interface BlockchainOptions extends CreateBlockchainOptions { - // readonly currentBlock: Block | undefined; - // readonly previousBlockIndex: HashIndexState | undefined; - // tslint:disable-next-line: readonly-array - readonly headerIndex: UInt256[]; -} - -interface Entry { - readonly block: Block; - readonly resolve: () => void; - readonly reject: (error: Error) => void; - readonly verify: boolean; -} - -// TODO: revisit this with more context into how the headerIndex is being used. -export const recoverHeaderIndex = async (storage: Storage) => { - const initHeaderIndex = await storage.headerHashList - .getAll$() - .pipe( - flatMap((value) => value.hashes), - toArray(), - ) - .toPromise(); - - const storedHeaderCount = initHeaderIndex.length; - - if (storedHeaderCount !== 0) { - const hashIndex = await storage.headerHashIndex.get(); - let extraHashes: readonly UInt256[] = []; - if (hashIndex.index >= storedHeaderCount) { - let hash = hashIndex.hash; - // tslint:disable-next-line - while (hash !== initHeaderIndex[storedHeaderCount - 1]) { - // tslint:disable-next-line: no-array-mutation - extraHashes = [hash].concat(extraHashes); - const { previousHash } = await storage.blocks.get({ hashOrIndex: hash }); - hash = previousHash; - } - - return initHeaderIndex.concat(extraHashes); - } - } - - return storage.blocks - .getAll$() - .pipe( - map((block) => block.header.hash), - toArray(), - ) - .toPromise(); -}; - -export class Blockchain { - public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { - const headerIndex = await recoverHeaderIndex(storage); - const blockchain = new Blockchain({ - headerIndex, - settings, - storage, - vm, - }); - - if (headerIndex.length === 0) { - await blockchain.persistBlock({ block: settings.genesisBlock }); - - return blockchain; - } - - // TODO: see if we need something similar and how we'll implement it. - blockchain.loadMempoolPolicy(storage); - - return blockchain; - } - - // tslint:disable-next-line: readonly-array - private readonly headerIndex: UInt256[]; - private readonly onPersistNativeContractScript: Buffer; - private readonly settings: BlockchainSettings; - private readonly storage: Storage; - private readonly vm: VM; - - private mutableStoredHeaderCount: number; - 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 mutableRunning = false; - private mutableDoneRunningResolve: (() => void) | undefined; - private mutableBlock$: Subject = new Subject(); - - public constructor(options: BlockchainOptions) { - this.headerIndex = options.headerIndex; - this.mutableStoredHeaderCount = this.headerIndex.length; - this.settings = options.settings; - this.storage = options.storage; - this.vm = options.vm; - this.onPersistNativeContractScript = - options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); - } - - public get currentBlock(): Block { - if (this.mutableCurrentBlock === undefined) { - throw new GenesisBlockNotRegisteredError(); - } - - return this.mutableCurrentBlock; - } - - public get storedHeaderCount(): number { - return this.mutableStoredHeaderCount; - } - - public get currentBlockIndex(): number { - return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; - } - - public async verifyBlock(block: Block): Promise { - const verification = await block.verify(this.storage, verifyWitnesses); - if (!verification) { - // TODO: implement a makeError - throw new Error('Block Verification Failed'); - } - } - - public async persistBlock({ - block, - verify = false, - }: { - readonly block: Block; - readonly verify?: boolean; - }): Promise { - // tslint:disable-next-line promise-must-complete - return new Promise((resolve, reject) => { - if (this.mutableInQueue.has(block.hashHex)) { - resolve(); - - return; - } - this.mutableInQueue.add(block.hashHex); - - this.mutableBlockQueue.queue({ - block, - resolve, - reject, - verify, - }); - - // tslint:disable-next-line no-floating-promises - this.persistBlocksAsync(); - }); - } - - private async persistBlocksAsync(): Promise { - if (this.mutablePersistingBlocks || !this.mutableRunning) { - return; - } - - this.mutablePersistingBlocks = true; - let entry: Entry | undefined; - try { - entry = this.cleanBlockQueue(); - - // tslint:disable-next-line no-loop-statement - while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { - const entryNonNull = entry; - const logData = { - // [Labels.NEO_BLOCK_INDEX]: entry.block.index, // TODO: bring Label over - name: 'neo_blockchain_persist_block_top_level', - }; - try { - await this.persistBlockInternal(entryNonNull.block, entryNonNull.verify); - logger.debug(logData); - } catch (err) { - logger.error({ err, ...logData }); - - throw err; - } - - entry.resolve(); - this.mutableBlock$.next(entry.block); - entry = this.cleanBlockQueue(); - } - - if (entry !== undefined) { - this.mutableBlockQueue.queue(entry); - } - } catch (error) { - if (entry !== undefined) { - entry.reject(error); - } - } finally { - this.mutablePersistingBlocks = false; - if (this.mutableDoneRunningResolve !== undefined) { - this.mutableDoneRunningResolve(); - this.mutableDoneRunningResolve = undefined; - } - } - } - - private cleanBlockQueue(): Entry | undefined { - let entry = this.dequeueBlockQueue(); - // tslint:disable-next-line no-loop-statement - while (entry !== undefined && entry.block.index <= this.currentBlockIndex) { - entry.resolve(); - entry = this.dequeueBlockQueue(); - } - - return entry; - } - - private dequeueBlockQueue(): Entry | undefined { - if (this.mutableBlockQueue.length > 0) { - return this.mutableBlockQueue.dequeue(); - } - - return undefined; - } - - private start(): void { - this.mutableBlock$ = new Subject(); - this.mutablePersistingBlocks = false; - this.mutableBlockQueue = new PriorityQueue({ - comparator: (a, b) => a.block.index - b.block.index, - }); - - this.mutableInQueue = new Set(); - this.mutableDoneRunningResolve = undefined; - this.mutableRunning = true; - logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); - } - - private async saveHeaderHashList(): Promise { - if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { - return; - } - - const blockchain = this.createPersistingBlockchain(); - const { changeSet, countIncrement } = await blockchain.getHeaderHashListChanges( - this.headerIndex, - this.storedHeaderCount, - ); - await this.storage.commit(changeSet); - this.mutableStoredHeaderCount += countIncrement; - } - - private async persistBlockInternal(block: Block, verify?: boolean): Promise { - if (verify) { - await this.verifyBlock(block); - } - - const blockchain = this.createPersistingBlockchain(); - const currentHeaderCount = this.headerIndex.length; - - if (block.index === currentHeaderCount) { - this.headerIndex.push(block.hash); - } - - /** - * TODO: this changeSet is NOT the `ChangeSet` type we expect for a `.commit(...)` like in `saveHeaderHashList` - * it is the already serialized changeSet coming from the C# VM Snapshot. There won't need to be as much storage - * change conversion with this changeSet so will probably make 2 different `commit` methods, 1 for each. - */ - const { changeSet, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); - await this.storage.commit(changeSet); - await this.saveHeaderHashList(); - - this.mutablePreviousBlock = this.mutableCurrentBlock; - this.mutableCurrentBlock = block; - this.mutableCurrentHeader = block.header; - } - - private createPersistingBlockchain(): PersistingBlockchain { - return new PersistingBlockchain({ - onPersistNativeContractScript: this.onPersistNativeContractScript, - storage: this.storage, - vm: this.vm, - }); - } -} diff --git a/packages/neo-one-csharp-blockchain/src/StorageCache.ts b/packages/neo-one-csharp-blockchain/src/StorageCache.ts deleted file mode 100644 index c2224e6bb0..0000000000 --- a/packages/neo-one-csharp-blockchain/src/StorageCache.ts +++ /dev/null @@ -1,263 +0,0 @@ -import { AddChange, Change, ChangeSet, DeleteChange, ReadStorage } from '@neo-one/csharp-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: DeleteTrackedChange; -} - -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; - readonly readStorage: () => ReadStorage; -}): GetFunc { - return async (key: Key): Promise => { - const trackedChange = tryGetTracked(key); - if (trackedChange !== undefined) { - if (trackedChange.type === 'delete') { - throw new Error('Not found'); - } - - return trackedChange.value; - } - - return readStorage().get(key); - }; -} - -function createTryGet({ - tryGetTracked, - readStorage, -}: { - // tslint:disable-next-line: no-any - readonly tryGetTracked: (key: Key) => TrackedChange | undefined; - readonly readStorage: () => ReadStorage; -}): TryGetFunc { - return async (key: Key): Promise => { - const trackedChange = tryGetTracked(key); - if (trackedChange !== undefined) { - if (trackedChange.type === 'delete') { - return undefined; - } - - return trackedChange.value; - } - - return readStorage().tryGet(key); - }; -} - -interface BaseReadStorageCacheOptions { - readonly readStorage: () => ReadStorage; - readonly name: string; - readonly createAddChange: CreateAddChange; - readonly createDeleteChange?: (key: Key) => DeleteChange; - readonly onAdd?: (value: Value) => Promise; -} - -class BaseReadStorageCache { - public readonly get: GetFunc; - public readonly tryGet: TryGetFunc; - public readonly tryGetValue: TryGetFunc; - public readonly onAdd: ((value: Value) => Promise) | undefined; - public readonly name: string; - // tslint:disable-next-line readonly-keyword - public readonly mutableValues: { [key: string]: TrackedChange }; - protected readonly readStorage: () => ReadStorage; - protected readonly createAddChange: CreateAddChange; - protected readonly createDeleteChange: ((key: Key) => DeleteChange) | undefined; - - public constructor(options: BaseReadStorageCacheOptions) { - this.readStorage = options.readStorage; - this.name = options.name; - this.createAddChange = options.createAddChange; - this.createDeleteChange = options.createDeleteChange; - this.onAdd = options.onAdd; - this.mutableValues = {}; - - this.get = createGet({ - readStorage: this.readStorage, - tryGetTracked: this.tryGetTracked.bind(this), - }); - - this.tryGet = createTryGet({ - readStorage: this.readStorage, - tryGetTracked: this.tryGetTracked.bind(this), - }); - this.tryGetValue = (key) => this.readStorage().tryGet(key); - } - - public getChangeSet(): ChangeSet { - const createDeleteChange = this.createDeleteChange; - - return Object.values(this.mutableValues).map((tracked) => { - if (isDeleteTrackedChange(tracked)) { - if (createDeleteChange === undefined) { - throw new Error('Invalid delete'); - } - - return { type: 'delete', change: createDeleteChange(tracked.key) }; - } - - return { type: 'add', change: this.createAddChange(tracked.key, tracked.value), subType: tracked.subType }; - }); - } - - public getTrackedChangeSet(): TrackedChangeSet { - const createDeleteChange = this.createDeleteChange; - - return Object.entries(this.mutableValues).map(([key, tracked]) => { - if (isDeleteTrackedChange(tracked)) { - if (createDeleteChange === undefined) { - throw new Error('Invalid delete'); - } - - return { type: createDeleteChange(tracked.key).type, key, value: tracked }; - } - - return { type: this.createAddChange(tracked.key, tracked.value).type, key, value: tracked }; - }); - } - - public tryGetTracked(_key: Key): TrackedChange | undefined { - throw new Error('Not Implemented'); - } -} - -interface ReadStorageCacheOptions extends BaseReadStorageCacheOptions { - readonly getKeyString: (key: Key) => string; -} - -class ReadStorageCache extends BaseReadStorageCache { - public readonly getKeyString: (key: Key) => string; - - public constructor(options: ReadStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.getKeyString = options.getKeyString; - } - - public tryGetTracked(key: Key): TrackedChange | undefined { - return this.mutableValues[this.getKeyString(key)]; - } - - public addTrackedChange(key: string, value: TrackedChange): void { - this.mutableValues[key] = value; - } -} - -type AddFunc = (key: Key, value: Value) => Promise; - -function createAdd({ - cache, - getKeyString, - allowDupes, -}: { - readonly cache: ReadStorageCache; - readonly getKeyString: (key: Key) => string; - readonly allowDupes?: boolean; -}): AddFunc { - return async (key: Key, value: Value): Promise => { - if (!allowDupes) { - const currentValue = await cache.tryGet(key); - if (currentValue !== undefined) { - throw new Error(`Attempted to add an already existing object for key ` + `${cache.name}:${getKeyString(key)}.`); - } - } - - if (cache.onAdd !== undefined) { - await cache.onAdd(value); - } - - const trackedChange = cache.tryGetTracked(key); - // tslint:disable-next-line: no-object-mutation - cache.mutableValues[cache.getKeyString(key)] = { - type: 'add', - 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 - subType: trackedChange === undefined ? 'add' : 'update', - }; - }; -} - -interface ReadAddStorageCacheOptions extends ReadStorageCacheOptions { - readonly allowDupes?: boolean; -} - -export class ReadAddStorageCache extends ReadStorageCache { - public readonly add: AddFunc; - - public constructor(options: ReadAddStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.add = createAdd({ - cache: this, - getKeyString: options.getKeyString, - allowDupes: options.allowDupes, - }); - } -} diff --git a/packages/neo-one-csharp-blockchain/src/errors.ts b/packages/neo-one-csharp-blockchain/src/errors.ts deleted file mode 100644 index 029038c2e3..0000000000 --- a/packages/neo-one-csharp-blockchain/src/errors.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { makeErrorWithCode } from '@neo-one/utils'; - -export const GenesisBlockNotRegisteredError = makeErrorWithCode( - 'GENESIS_BLOCK_NOT_REGISTERED', - () => 'Genesis block was not registered with storage.', -); -export const ScriptVerifyError = makeErrorWithCode('SCRIPT_VERIFY', (message: string) => message); -export const WitnessVerifyError = makeErrorWithCode('WITNESS_VERIFY', () => 'Witness verification failed.'); -export const UnknownVerifyError = makeErrorWithCode('UNKNOWN_VERIFY', (message: string) => message); -export const InvalidClaimError = makeErrorWithCode( - 'INVALID_CLAIM', - (asset: string, governingHash: string) => - `Invalid Claim. Coin with asset: ${asset} does not match governing hash: ${governingHash}`, -); -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.`, -); diff --git a/packages/neo-one-csharp-blockchain/tsconfig.json b/packages/neo-one-csharp-blockchain/tsconfig.json deleted file mode 100644 index bfb2319087..0000000000 --- a/packages/neo-one-csharp-blockchain/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" -} diff --git a/packages/neo-one-csharp-core/gulpfile.js b/packages/neo-one-csharp-core/gulpfile.js deleted file mode 100644 index 6267e6b0d6..0000000000 --- a/packages/neo-one-csharp-core/gulpfile.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.initialize(); diff --git a/packages/neo-one-csharp-core/package.json b/packages/neo-one-csharp-core/package.json deleted file mode 100644 index f57e6989bb..0000000000 --- a/packages/neo-one-csharp-core/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@neo-one/csharp-core", - "version": "2.7.0", - "description": "NEO•ONE 3.x node-core migration", - "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.7.0", - "@neo-one/client-full-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", - "bignumber.js": "^9.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-csharp-core/src/Block.ts b/packages/neo-one-csharp-core/src/Block.ts deleted file mode 100644 index 2cb619f85a..0000000000 --- a/packages/neo-one-csharp-core/src/Block.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { - BinaryWriter, - BlockJSON, - common, - InvalidFormatError, - IOHelper, - TransactionJSON, - UInt256, -} from '@neo-one/client-common'; -import _ from 'lodash'; -import { BlockBase, BlockBaseAdd } from './BlockBase'; -import { ConsensusData } from './ConsensusData'; -import { MerkleTree } from './crypto'; -import { Header } from './Header'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, -} from './Serializable'; -import { Transaction } from './transaction'; -import { TrimmedBlock } from './TrimmedBlock'; -import { BinaryReader, utils } from './utils'; -import { Witness } from './Witness'; - -export interface BlockAdd extends Omit { - readonly merkleRoot?: UInt256; - readonly consensusData?: ConsensusData; - readonly transactions: readonly Transaction[]; -} - -// 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 SerializableWire, 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.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 !== count - 1) { - throw new InvalidFormatError(`Expected ${count - 1} transactions on the block, found: ${transactions.length}`); - } - - 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({ - version: blockBase.version, - previousHash: blockBase.previousHash, - merkleRoot: blockBase.merkleRoot, - timestamp: blockBase.timestamp, - index: blockBase.index, - consensusData, - nextConsensus: blockBase.nextConsensus, - witness: blockBase.witness, - transactions, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Block { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly transactions: readonly Transaction[]; - public readonly consensusData?: ConsensusData; - protected readonly sizeExclusive = utils.lazy(() => - IOHelper.sizeOfArray(getCombinedModels(this.transactions, this.consensusData), (model) => model.size), - ); - 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, - }), - ); - - private readonly allHashesInternal = utils.lazy(() => - getCombinedModels(this.transactions, this.consensusData).map((model) => model.hash), - ); - - public constructor({ - version, - previousHash, - timestamp, - index, - consensusData, - nextConsensus, - witness, - hash, - transactions, - merkleRoot = MerkleTree.computeRoot(getCombinedModels(transactions, consensusData).map((model) => model.hash)), - }: BlockAdd) { - super({ - version, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - witness, - hash, - }); - - this.transactions = transactions; - this.consensusData = consensusData; - } - - public get header(): Header { - return this.headerInternal(); - } - - public get allHashes(): readonly UInt256[] { - return this.allHashesInternal(); - } - - public clone({ - transactions, - witness, - }: { - readonly transactions: readonly Transaction[]; - readonly witness: Witness; - }): Block { - return new Block({ - version: this.version, - previousHash: this.previousHash, - merkleRoot: this.merkleRoot, - timestamp: this.timestamp, - index: this.index, - consensusData: this.consensusData, - nextConsensus: this.nextConsensus, - transactions, - witness, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeArray(getCombinedModels(this.transactions, this.consensusData), (model) => - model.serializeWireBase(writer), - ); - } - - public serializeJSON(context: SerializeJSONContext): BlockJSON { - const blockBaseJSON = super.serializeJSON(context); - - return { - ...blockBaseJSON, - consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, - tx: this.transactions.map((transaction) => transaction.serializeJSON(context) as TransactionJSON), - // confirmations: blockBaseJSON.confirmations, TODO: is this our own property? - }; - } - - 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, - }); - } -} diff --git a/packages/neo-one-csharp-core/src/BlockBase.ts b/packages/neo-one-csharp-core/src/BlockBase.ts deleted file mode 100644 index 34d1c739fe..0000000000 --- a/packages/neo-one-csharp-core/src/BlockBase.ts +++ /dev/null @@ -1,219 +0,0 @@ -import { - BinaryWriter, - BlockBaseJSON, - common, - createGetHashData, - crypto, - InvalidFormatError, - IOHelper, - JSONHelper, - UInt160, - UInt256, - UInt256Hex, -} from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Equals, EquatableKey } from './Equatable'; -import { UnsignedBlockError } from './errors'; -import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; -import { utils } from './utils'; -import { StorageMethods, VerifyWitnesses } from './Verifiable'; -import { Witness } from './Witness'; - -export interface BlockBaseAdd { - readonly version?: number; - readonly previousHash: UInt256; - readonly merkleRoot: UInt256; - readonly timestamp: BN; - readonly index: number; - readonly nextConsensus: UInt160; - readonly witness?: Witness; - readonly hash?: UInt256; -} - -export abstract class BlockBase implements EquatableKey { - 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], - }; - } - public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): BlockBaseAdd { - const { reader } = options; - - const version = reader.readUInt32LE(); - const previousHash = reader.readUInt256(); - const merkleRoot = reader.readUInt256(); - const timestamp = reader.readUInt64LE(); - const index = reader.readUInt32LE(); - const nextConsensus = reader.readUInt160(); - - return { - version, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - }; - } - - public readonly version: number; - public readonly previousHash: UInt256; - public readonly merkleRoot: UInt256; - public readonly timestamp: BN; - public readonly index: number; - public readonly nextConsensus: UInt160; - public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: StorageMethods) => { - if (this.previousHash === common.ZERO_UINT256) { - return [this.witness.scriptHash]; - } - - const prevHeader = await tryGetHeader(this.previousHash); - 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 [prevHeader.nextConsensus]; - }); - // 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.bind(this)); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly hashInternal: () => UInt256; - private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned)()); - private readonly witnessInternal: Witness | undefined; - private readonly sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfUInt8 + - this.witness.size + - this.sizeExclusive(), - ); - - public constructor({ - version = 0, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - witness, - hash, - }: BlockBaseAdd) { - this.version = version; - this.previousHash = previousHash; - this.merkleRoot = merkleRoot; - this.timestamp = timestamp; - this.index = index; - this.nextConsensus = nextConsensus; - this.witnessInternal = witness; - const hashIn = hash; - this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; - } - - public get hash(): UInt256 { - return this.hashInternal(); - } - - public get hashHex(): UInt256Hex { - return this.hashHexInternal(); - } - - public get message(): Buffer { - return this.messageInternal(); - } - - public get size(): number { - return this.sizeInternal(); - } - - public get witness(): Witness { - if (this.witnessInternal === undefined) { - throw new UnsignedBlockError(common.uInt256ToString(this.hash)); - } - - 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.writeUInt64LE(this.timestamp); - writer.writeUInt32LE(this.index); - writer.writeUInt160(this.nextConsensus); - } - - public serializeWireBase(writer: BinaryWriter): void { - this.serializeUnsignedBase(writer); - writer.writeUInt8(1); - this.witness.serializeWireBase(writer); - } - - 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: JSONHelper.writeUInt64(this.timestamp), - index: this.index, - nextconsensus: crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: this.nextConsensus, - }), - - witnesses: [this.witness.serializeJSON(context)], - // confirmations: [] TODO: this is a property we used to use, do we still need? - }; - } - - public async verify(storage: StorageMethods, verifyWitnesses: VerifyWitnesses) { - const prevHeader = await storage.tryGetHeader(this.previousHash); - if (prevHeader === undefined) { - return false; - } - - if (prevHeader.index + 1 !== this.index) { - return false; - } - - if (prevHeader.timestamp.gte(this.timestamp)) { - return false; - } - - return verifyWitnesses(this, storage, 1); - } - - protected readonly sizeExclusive: () => number = () => 0; -} diff --git a/packages/neo-one-csharp-core/src/Blockchain.ts b/packages/neo-one-csharp-core/src/Blockchain.ts deleted file mode 100644 index a617f2497a..0000000000 --- a/packages/neo-one-csharp-core/src/Blockchain.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Observable } from 'rxjs'; -import { Block } from './Block'; -import { Header } from './Header'; -import { DeserializeWireContext, SerializeJSONContext } from './Serializable'; -import { BlockchainSettings } from './Settings'; -import { BlockchainStorage } from './Storage'; -import { Transaction } from './transaction'; -import { VerifyWitnesses } from './Verifiable'; - -// tslint:disable-next-line: no-any TODO: implement something here -type CallReceipt = any; - -export interface Blockchain extends BlockchainStorage { - readonly settings: BlockchainSettings; - readonly deserializeWireContext: DeserializeWireContext; - readonly serializeJSONContext: SerializeJSONContext; - // readonly feeContext: FeeContext; - - readonly currentBlock: Block; - readonly previousBlock: Block | undefined; - readonly currentHeaderIndex: Header; - readonly currentBlockIndex: number; - readonly block$: Observable; - readonly isPersistingBlock: boolean; - - readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; - readonly persistHeaders: (headers: readonly Header[]) => Promise; - - readonly verifyWitnesses: VerifyWitnesses; - - readonly invokeScript: (script: Buffer) => Promise; - readonly invokeTransaction: (transaction: Transaction) => Promise; - - readonly updateSettings: (settings: BlockchainSettings) => void; - readonly stop: () => Promise; - readonly reset: () => Promise; -} diff --git a/packages/neo-one-csharp-core/src/ConsensusData.ts b/packages/neo-one-csharp-core/src/ConsensusData.ts deleted file mode 100644 index 33dcfc903f..0000000000 --- a/packages/neo-one-csharp-core/src/ConsensusData.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { DEFAULT_VALIDATORS_COUNT } from './constants'; -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 } = options; - const primaryIndex = reader.readVarUIntLE(DEFAULT_VALIDATORS_COUNT.subn(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 readonly hashInternal = utils.lazy(() => crypto.hash256(this.serializeWire())); - - public constructor({ primaryIndex, nonce }: ConsensusDataAdd) { - this.primaryIndex = primaryIndex; - this.nonce = nonce; - } - - 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: this.nonce.toString(16), - }; - } -} diff --git a/packages/neo-one-csharp-core/src/Equatable.ts b/packages/neo-one-csharp-core/src/Equatable.ts deleted file mode 100644 index 075d881ce5..0000000000 --- a/packages/neo-one-csharp-core/src/Equatable.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Equals = (other: {}) => boolean; -export interface Equatable { - readonly equals: Equals; -} - -export type ToKeyString = () => string; -export interface EquatableKey extends Equatable { - readonly toKeyString: ToKeyString; -} diff --git a/packages/neo-one-csharp-core/src/Header.ts b/packages/neo-one-csharp-core/src/Header.ts deleted file mode 100644 index 67af61e079..0000000000 --- a/packages/neo-one-csharp-core/src/Header.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper } from '@neo-one/client-common'; -import { BlockBase, BlockBaseAdd } from './BlockBase'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, -} from './Serializable'; -import { TrimmedBlock } from './TrimmedBlock'; -import { BinaryReader, utils } from './utils'; - -export type HeaderAdd = BlockBaseAdd; - -export class Header extends BlockBase implements SerializableWire, SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Header { - const { reader } = options; - const blockBase = super.deserializeWireBase(options); - if (reader.readUInt8() !== 0) { - throw new InvalidFormatError( - `Expected Header BinaryReader readUInt8(0) to be 0. Received: ${reader.readUInt8()}`, - ); - } - - return new this({ - version: blockBase.version, - previousHash: blockBase.previousHash, - merkleRoot: blockBase.merkleRoot, - timestamp: blockBase.timestamp, - index: blockBase.index, - nextConsensus: blockBase.nextConsensus, - witness: blockBase.witness, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Header { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - 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: [], - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt8(0); - } - - public serializeJSON(context: SerializeJSONContext): HeaderJSON { - return super.serializeJSON(context); - } -} diff --git a/packages/neo-one-csharp-core/src/Node.ts b/packages/neo-one-csharp-core/src/Node.ts deleted file mode 100644 index 29c204ba9e..0000000000 --- a/packages/neo-one-csharp-core/src/Node.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { VersionJSON } from '@neo-one/client-common'; -import { Block } from './Block'; -import { Blockchain, VerifyTransactionResult } from './Blockchain'; -import { Endpoint } from './net'; -import { ConsensusPayload } from './payload'; -import { Transaction } from './transaction'; - -export interface Consensus { - readonly runConsensusNow: () => Promise; - readonly fastForwardOffset: (seconds: number) => Promise; - readonly fastForwardToTime: (seconds: number) => Promise; - readonly nowSeconds: () => number; - readonly pause: () => Promise; - readonly reset: () => Promise; - readonly resume: () => Promise; -} - -export interface RelayTransactionResult { - readonly verifyResult?: VerifyTransactionResult; -} - -export interface Node { - readonly version: VersionJSON; - readonly blockchain: Blockchain; - readonly relayTransaction: ( - transaction: Transaction, - options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, - ) => Promise; - readonly relayConsensusPayload: (payload: ConsensusPayload) => void; - readonly relayBlock: (block: Block) => Promise; - readonly connectedPeers: readonly Endpoint[]; - readonly memPool: { readonly [hash: string]: Transaction }; - readonly syncMemPool: () => void; - readonly consensus: Consensus | undefined; - readonly reset: () => Promise; -} diff --git a/packages/neo-one-csharp-core/src/Serializable.ts b/packages/neo-one-csharp-core/src/Serializable.ts deleted file mode 100644 index 5b5aa30056..0000000000 --- a/packages/neo-one-csharp-core/src/Serializable.ts +++ /dev/null @@ -1,63 +0,0 @@ -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 { BinaryReader } from './utils'; - -export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; - -export interface DeserializeWireContext { - readonly messageMagic: number; -} - -export interface DeserializeWireBaseOptions { - readonly context: DeserializeWireContext; - readonly reader: BinaryReader; -} - -export interface DeserializeWireOptions { - readonly context: DeserializeWireContext; - readonly buffer: Buffer; -} - -export type DeserializeWireBase = (options: DeserializeWireBaseOptions) => T; -export type DeserializeWire = (options: DeserializeWireOptions) => T; - -export function createDeserializeWire(deserializeWireBase: DeserializeWireBase): DeserializeWire { - return (options) => - deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); -} - -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; - -export interface SerializableJSON { - readonly serializeJSON: SerializeJSON; -} diff --git a/packages/neo-one-csharp-core/src/Settings.ts b/packages/neo-one-csharp-core/src/Settings.ts deleted file mode 100644 index 76ea62d9e9..0000000000 --- a/packages/neo-one-csharp-core/src/Settings.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ECPoint } from '@neo-one/client-common'; -import { Block } from './Block'; -import { BlockchainStorage } from './Storage'; - -export interface BlockchainSettings extends ProtocolSettings { - readonly genesisBlock: Block; - readonly decrementInterval: number; - readonly generationAmount: readonly number[]; - readonly privateKeyVersion: number; - readonly standbyValidators: readonly ECPoint[]; - readonly memPoolSize: number; -} -export interface ProtocolSettings { - readonly messageMagic: number; - readonly addressVersion: number; - readonly standbyCommittee: readonly string[]; - readonly committeeMembersCount: number; - readonly validatorsCount: number; - readonly millisecondsPerBlock: number; - readonly memoryPoolMaxTransactions: number; -} - -export interface PolicySettings { - readonly getMaxBlockSize: (storages: BlockchainStorage['storages']) => Promise; - readonly getMaxTransactionsPerBlock: (storages: BlockchainStorage['storages']) => Promise; - readonly getMaxBlockSystemFee: (storages: BlockchainStorage['storages']) => Promise; - readonly getValidators: (storages: BlockchainStorage['storages']) => Promise; -} - -export interface NetworkSettings { - readonly seeds: readonly string[]; -} diff --git a/packages/neo-one-csharp-core/src/Signer.ts b/packages/neo-one-csharp-core/src/Signer.ts deleted file mode 100644 index 204cf31610..0000000000 --- a/packages/neo-one-csharp-core/src/Signer.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - assertWitnessScope, - InvalidFormatError, - IOHelper, - JSONHelper, - SignerJSON, - SignerModel, - toJSONWitnessScope, - witnessScopeHasFlag, - WitnessScopeModel, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from './Serializable'; -import { utils } from './utils'; - -const hasCustomContracts = (scopes: WitnessScopeModel) => - witnessScopeHasFlag(scopes, WitnessScopeModel.CustomContracts); -const hasCustomGroups = (scopes: WitnessScopeModel) => witnessScopeHasFlag(scopes, WitnessScopeModel.CustomGroups); - -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, - }); - } - - 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 get size() { - return this.sizeInternal(); - } - - public serializeJSON(_context: SerializeJSONContext): 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-csharp-core/src/Storage.ts b/packages/neo-one-csharp-core/src/Storage.ts deleted file mode 100644 index 0b31fa8dcf..0000000000 --- a/packages/neo-one-csharp-core/src/Storage.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { Observable } from 'rxjs'; -import { ContractIDState } from './ContractIDState'; -import { ContractKey, ContractState } from './ContractState'; -import { HashIndexState } from './HashIndexState'; -import { HeaderHashList, HeaderKey } from './HeaderHashList'; -import { StorageItem } from './StorageItem'; -import { StorageKey } from './StorageKey'; -import { TransactionKey, TransactionState } from './transaction'; -import { BlockKey, TrimmedBlock } from './TrimmedBlock'; - -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?: Partial) => Observable; -} - -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 ReadGetAllAddDeleteStorage extends ReadGetAllStorage, AddDeleteStorage {} -interface ReadAllAddStorage extends ReadAllStorage, AddStorage {} -interface ReadAllAddUpdateDeleteStorage - extends ReadAllStorage, - AddUpdateDeleteStorage {} - -interface ReadGetAllAddStorage extends ReadGetAllStorage, AddStorage {} -interface ReadGetAllAddUpdateDeleteStorage - extends ReadGetAllStorage, - AddUpdateDeleteStorage {} - -interface LatestReadStorage extends ReadStorage { - readonly tryGetLatest: () => Promise; -} - -export type AddChange = - | { 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 }; - -export type DeleteChange = - | { readonly type: 'contract'; readonly key: ContractKey } - | { readonly type: 'storage'; readonly key: StorageKey }; - -export type Change = - | { readonly type: 'add'; readonly change: AddChange; readonly subType: 'add' | 'update' } - | { readonly type: 'delete'; readonly change: DeleteChange }; - -export type ChangeSet = readonly Change[]; - -export interface BlockchainStorage { - readonly blocks: ReadStorage; - readonly transactions: ReadStorage; - readonly contracts: ReadStorage; - readonly storages: ReadStorage; - readonly headerHashList: ReadStorage; - readonly blockHashIndex: ReadMetadataStorage; - readonly headerHashIndex: ReadMetadataStorage; - readonly contractID: ReadMetadataStorage; -} - -export interface Storage extends BlockchainStorage { - readonly blocks: ReadGetAllStorage; - readonly headerHashList: ReadGetAllStorage; - readonly commit: (changeSet: ChangeSet) => Promise; - readonly close: () => Promise; - readonly reset: () => Promise; -} diff --git a/packages/neo-one-csharp-core/src/StorageItem.ts b/packages/neo-one-csharp-core/src/StorageItem.ts deleted file mode 100644 index 17e9cb670c..0000000000 --- a/packages/neo-one-csharp-core/src/StorageItem.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from './Serializable'; -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 StorageItemValueAdd { - readonly value: Buffer; - readonly isConstant: boolean; -} - -// tslint:disable-next-line: no-any -const isStorageItemCacheAdd = (value: any): value is StorageItemCacheAdd => - value?.cache !== undefined && BN.isBN(value.cache); - -type StorageItemAdd = StorageItemCacheAdd | StorageItemValueAdd; - -export class StorageItem implements SerializableWire { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageItem { - const { reader } = options; - const value = reader.readVarBytesLE(); - const isConstant = reader.readBoolean(); - - return new this({ - value, - isConstant, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): StorageItem { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - 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 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 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) { - writer.writeVarBytesLE(this.value); - writer.writeBoolean(this.isConstant); - } - - public clone() { - return new StorageItem({ - value: this.value, - isConstant: this.isConstant, - }); - } -} diff --git a/packages/neo-one-csharp-core/src/TransactionData.ts b/packages/neo-one-csharp-core/src/TransactionData.ts deleted file mode 100644 index 62bd74fbc0..0000000000 --- a/packages/neo-one-csharp-core/src/TransactionData.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { BinaryWriter, IOHelper, UInt256 } from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { BN } from 'bn.js'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface TransactionDataAdd { - readonly version?: number; - readonly hash: UInt256; - readonly blockHash: UInt256; - readonly startHeight: number; - readonly index: number; - readonly globalIndex: BN; - readonly endHeights?: { readonly [index: number]: number }; - readonly claimed?: { readonly [index: number]: boolean }; -} - -export interface TransactionDataUpdate { - readonly endHeights?: { readonly [index: number]: number }; - readonly claimed?: { readonly [index: number]: boolean }; -} - -export interface TransactionDataKey { - readonly hash: UInt256; -} - -export class TransactionData extends BaseState implements SerializableWire { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): TransactionData { - const version = reader.readUInt8(); - const hash = reader.readUInt256(); - const blockHash = reader.readUInt256(); - const startHeight = reader.readUInt32LE(); - const index = reader.readUInt32LE(); - const globalIndex = reader.readUInt64LE(); - const endHeights = reader.readObject(() => { - const key = reader.readUInt32LE(); - const value = reader.readUInt32LE(); - - return { key, value }; - }); - const claimed = reader.readObject(() => { - const key = reader.readUInt32LE(); - const value = reader.readBoolean(); - - return { key, value }; - }); - - return new this({ - version, - hash, - blockHash, - startHeight, - index, - globalIndex, - endHeights, - claimed, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): TransactionData { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt256; - public readonly blockHash: UInt256; - public readonly startHeight: number; - public readonly index: number; - public readonly globalIndex: BN; - public readonly endHeights: { - readonly [index: number]: number; - }; - public readonly claimed: { - readonly [index: number]: boolean; - }; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ - version, - hash, - blockHash, - startHeight, - index, - globalIndex, - endHeights = {}, - claimed = {}, - }: TransactionDataAdd) { - super({ version }); - this.hash = hash; - this.blockHash = blockHash; - this.startHeight = startHeight; - this.index = index; - this.globalIndex = globalIndex; - this.endHeights = endHeights; - this.claimed = claimed; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfObject(this.endHeights, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt32LE) + - IOHelper.sizeOfObject(this.claimed, () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfBoolean), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public update({ endHeights = this.endHeights, claimed = this.claimed }: TransactionDataUpdate): TransactionData { - return new TransactionData({ - version: this.version, - hash: this.hash, - blockHash: this.blockHash, - startHeight: this.startHeight, - index: this.index, - globalIndex: this.globalIndex, - endHeights, - claimed, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeUInt256(this.hash); - writer.writeUInt256(this.blockHash); - writer.writeUInt32LE(this.startHeight); - writer.writeUInt32LE(this.index); - writer.writeUInt64LE(this.globalIndex); - writer.writeObject(this.endHeights, (key, value) => { - writer.writeUInt32LE(key); - writer.writeUInt32LE(value); - }); - writer.writeObject(this.claimed, (key, value) => { - writer.writeUInt32LE(key); - writer.writeBoolean(value); - }); - } -} diff --git a/packages/neo-one-csharp-core/src/TrimmedBlock.ts b/packages/neo-one-csharp-core/src/TrimmedBlock.ts deleted file mode 100644 index ab75c19cbc..0000000000 --- a/packages/neo-one-csharp-core/src/TrimmedBlock.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { - BinaryWriter, - 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 { - version, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - witness, - } = BlockBase.deserializeWireBase(options); - const { reader } = options; - - const hashes = reader.readArray(reader.readUInt256, Block.MaxContentsPerBlock); - const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; - - return new this({ - version, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - witness, - hashes, - consensusData, - }); - } - - public static deserializeWire(options: DeserializeWireOptions) { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - 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, - }), - ); - - public constructor(options: TrimmedBlockAdd) { - super(options); - this.consensusData = options.consensusData; - this.hashes = options.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; - }), - ), - }); - } - - // 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, - ...options, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeArray(this.hashes, writer.writeUInt256); - 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-csharp-core/src/Verifiable.ts b/packages/neo-one-csharp-core/src/Verifiable.ts deleted file mode 100644 index 920f34fa33..0000000000 --- a/packages/neo-one-csharp-core/src/Verifiable.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UInt160 } from '@neo-one/client-common'; -import { BlockchainStorage } from './Storage'; -import { Witness } from './Witness'; - -export interface Verifiable { - readonly getScriptHashesForVerifying: ( - storage: BlockchainStorage, - ) => Promise | readonly UInt160[]; - readonly witnesses: readonly Witness[]; -} - -export interface VerifyResult { - readonly gas: number; - readonly result: boolean; -} - -export type VerifyWitnesses = (verifiable: Verifiable, storage: BlockchainStorage, gasIn: number) => Promise; diff --git a/packages/neo-one-csharp-core/src/Witness.ts b/packages/neo-one-csharp-core/src/Witness.ts deleted file mode 100644 index 9ff1e6b143..0000000000 --- a/packages/neo-one-csharp-core/src/Witness.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; -import { WITNESS_INVOCATION_SIZE, WITNESS_VERIFICATION_SIZE } from './constants'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface WitnessAdd { - readonly verification: Buffer; - readonly invocation: Buffer; -} - -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 Witness({ - invocation, - verification, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Witness { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - 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() { - return this.sizeInternal(); - } - - public serializeJSON(_context: SerializeJSONContext): WitnessJSON { - return { - invocation: JSONHelper.writeBuffer(this.invocation), - verification: JSONHelper.writeBuffer(this.verification), - }; - } -} diff --git a/packages/neo-one-csharp-core/src/constants.ts b/packages/neo-one-csharp-core/src/constants.ts deleted file mode 100644 index dc2757deb3..0000000000 --- a/packages/neo-one-csharp-core/src/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { BN } from 'bn.js'; - -export const MAX_TRANSACTION_SIZE = 102400; -export const DEFAULT_VALIDATORS_COUNT = new BN(7); -export const WITNESS_INVOCATION_SIZE = 663; -export const WITNESS_VERIFICATION_SIZE = 361; diff --git a/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts b/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts deleted file mode 100644 index b1a466e28e..0000000000 --- a/packages/neo-one-csharp-core/src/crypto/MerkleTree.ts +++ /dev/null @@ -1,158 +0,0 @@ -// tslint:disable readonly-keyword no-object-mutation no-array-mutation -import { common, crypto, UInt256 } from '@neo-one/client-common'; -import { makeErrorWithCode } from '@neo-one/utils'; - -export const InvalidMerkleTreeException = makeErrorWithCode( - 'INVALID_MERKLE_TREE', - () => 'Invalid Merkle tree. (no nodes found)', -); - -class MerkleTreeNode { - public readonly hash: UInt256; - public leftChild: MerkleTreeNode | undefined; - public rightChild: MerkleTreeNode | undefined; - public parent: MerkleTreeNode | undefined; - - public constructor({ - hash, - leftChild, - rightChild, - parent, - }: { - readonly hash: UInt256; - readonly leftChild?: MerkleTreeNode; - readonly rightChild?: MerkleTreeNode; - readonly parent?: MerkleTreeNode; - }) { - this.hash = hash; - this.leftChild = leftChild; - this.rightChild = rightChild; - this.parent = parent; - } - - public clone(parent?: MerkleTreeNode): MerkleTreeNode { - const self = new MerkleTreeNode({ - hash: this.hash, - parent, - }); - - if (this.leftChild !== undefined) { - self.leftChild = this.leftChild.clone(self); - } - if (this.rightChild !== undefined) { - self.rightChild = this.rightChild.clone(self); - } - - return self; - } -} - -const build = (leavesIn: readonly MerkleTreeNode[]): MerkleTreeNode => { - const leaves = leavesIn; - if (leaves.length === 0) { - throw new InvalidMerkleTreeException(); - } - if (leaves.length === 1) { - return leaves[0]; - } - - const parents = []; - const length = Math.floor((leaves.length + 1) / 2); - // tslint:disable-next-line no-loop-statement - for (let i = 0; i < length; i += 1) { - const leftChild = leaves[i * 2]; - - const rightChild = i * 2 + 1 === leaves.length ? leftChild : leaves[i * 2 + 1]; - const node = new MerkleTreeNode({ - hash: crypto.hash256( - Buffer.concat([common.uInt256ToBuffer(leftChild.hash), common.uInt256ToBuffer(rightChild.hash)]), - ), - leftChild, - rightChild, - }); - - parents[i] = node; - leaves[i * 2].parent = node; - - if (i * 2 + 1 !== leaves.length) { - leaves[i * 2 + 1].parent = node; - } - } - - return build(parents); -}; - -const trim = (node: MerkleTreeNode, index: number, depth: number, flags: readonly boolean[]) => { - const { leftChild, rightChild } = node; - if (depth === 1 || leftChild === undefined) { - return; - } - - if (depth === 2) { - if (!flags[index * 2] && !flags[index * 2 + 1]) { - node.leftChild = undefined; - node.rightChild = undefined; - } - } else if (rightChild !== undefined) { - trim(leftChild, index * 2, depth - 1, flags); - trim(rightChild, index * 2 + 1, depth - 1, flags); - if (leftChild.leftChild === undefined && rightChild.rightChild === undefined) { - node.leftChild = undefined; - node.rightChild = undefined; - } - } -}; - -const depthFirstSearchWorker = (node: MerkleTreeNode, mutableHashes: UInt256[]): void => { - const { leftChild, rightChild } = node; - if (leftChild === undefined || rightChild === undefined) { - mutableHashes.push(node.hash); - } else { - depthFirstSearchWorker(leftChild, mutableHashes); - depthFirstSearchWorker(rightChild, mutableHashes); - } -}; - -const depthFirstSearch = (node: MerkleTreeNode): readonly UInt256[] => { - const mutableHashes: UInt256[] = []; - depthFirstSearchWorker(node, mutableHashes); - - return mutableHashes; -}; - -export class MerkleTree { - public static computeRoot(hashes: readonly UInt256[]): UInt256 { - const tree = new this(hashes); - - return tree.root.hash; - } - - public readonly root: MerkleTreeNode; - public readonly depth: number; - - public constructor(hashesOrNode: readonly UInt256[] | MerkleTreeNode) { - this.root = Array.isArray(hashesOrNode) - ? build(hashesOrNode.map((hash) => new MerkleTreeNode({ hash }))) - : (hashesOrNode as MerkleTreeNode); - this.depth = 1; - // tslint:disable-next-line no-loop-statement no-let - for (let node = this.root; node.leftChild !== undefined; node = node.leftChild) { - this.depth += 1; - } - } - - public trim(flags: readonly boolean[]): MerkleTree { - const result = this.root.clone(); - trim(result, 0, this.depth, flags); - - return new MerkleTree(result); - } - - public depthFirstSearch(): readonly UInt256[] { - return depthFirstSearch(this.root); - } - - public toHashArray(): readonly UInt256[] { - return this.depthFirstSearch(); - } -} diff --git a/packages/neo-one-csharp-core/src/crypto/index.ts b/packages/neo-one-csharp-core/src/crypto/index.ts deleted file mode 100644 index f508f3cb56..0000000000 --- a/packages/neo-one-csharp-core/src/crypto/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './MerkleTree'; diff --git a/packages/neo-one-csharp-core/src/errors.ts b/packages/neo-one-csharp-core/src/errors.ts deleted file mode 100644 index 6facad3624..0000000000 --- a/packages/neo-one-csharp-core/src/errors.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { makeErrorWithCode } from '@neo-one/utils'; - -// tslint:disable-next-line export-name -export const ReceiveMessageTimeoutError = makeErrorWithCode( - 'RECEIVE_MESSAGE_TIMEOUT', - (endpoint: string) => `Message with endpoint ${endpoint} timed out.`, -); -export const InvalidActionTypeError = makeErrorWithCode( - 'INVALID_ACTION_TYPE', - (type: number) => `Expected action type, found: ${type}`, -); -export const InvalidScriptContainerTypeError = makeErrorWithCode( - 'INVALID_SCRIPT_CONTAINER_TYPE', - (value: number) => `Expected ScriptContainerType, found: ${value.toString(16)}`, -); -export const VerifyError = makeErrorWithCode( - 'VERIFY', - (reason?: string) => `Verification failed${reason === undefined ? '.' : `: ${reason}`}`, -); -export const InvalidConsensusMessageTypeError = makeErrorWithCode( - 'INVALID_CONSENSUS_MESSAGE_TYPE', - (value: number) => `Expected ConsensusMessageType, 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}`, -); -export const InvalidStorageChangeTypeError = makeErrorWithCode( - 'INVALID_STORAGE_CHANGE_TYPE', - (storageChangeType: number) => `Invalid Storage Change Type: ${storageChangeType}`, -); diff --git a/packages/neo-one-csharp-core/src/index.ts b/packages/neo-one-csharp-core/src/index.ts deleted file mode 100644 index 67ce78732c..0000000000 --- a/packages/neo-one-csharp-core/src/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -export * from './Block'; -export * from './BlockBase'; -export * from './Blockchain'; -export * from './ConsensusData'; -export * from './manifest'; -export * from './ContractState'; -export * from './constants'; -export * from './crypto'; -export * from './Equatable'; -export * from './HashIndexState'; -export * from './Header'; -export * from './HeaderHashList'; -export * from './Serializable'; -export * from './Settings'; -export * from './Signer'; -export * from './Storage'; -export * from './StorageItem'; -export * from './StorageKey'; -export * from './StackItems'; -export * from './transaction'; -export * from './TrimmedBlock'; -export * from './utils'; -export * from './Verifiable'; -export * from './vm'; -export * from './Witness'; -export * from './CallFlags'; -export * from './TransactionData'; -export * from './Node'; diff --git a/packages/neo-one-csharp-core/src/transaction/Transaction.ts b/packages/neo-one-csharp-core/src/transaction/Transaction.ts deleted file mode 100644 index 75da776311..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/Transaction.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { - AttributeTypeModel, - common, - InvalidFormatError, - IOHelper, - JSONHelper, - scriptHashToAddress, - TransactionJSON, - TransactionModel, - TransactionModelAdd, - TransactionWithInvocationDataJSON, - UInt160, -} from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, -} from '../Serializable'; -import { Signer } from '../Signer'; -import { BinaryReader, utils } from '../utils'; -import { Witness } from '../Witness'; -import { Attribute, deserializeAttribute } from './attributes'; - -export type TransactionAddUnsigned = Omit, 'witnesses'>; -export type TransactionAdd = TransactionModelAdd; - -export class Transaction - extends TransactionModel - implements SerializableWire, SerializableJSON { - 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, - }); - } - - 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.readUInt64LE(); - if (systemFee.ltn(0)) { - throw new InvalidFormatError(`Expected systemFee to be greater than 0, found: ${systemFee.toString()}`); - } - - const networkFee = reader.readUInt64LE(); - 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, - }; - } - - 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; - }); - } - - private readonly headerSizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt32LE, - ); - - private readonly sizeInternal = utils.lazy( - () => - this.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 get headerSize() { - return this.headerSizeInternal(); - } - - public get size() { - return this.sizeInternal(); - } - - public getScriptHashesForVerifying(): readonly UInt160[] { - return this.signers.map((signer) => signer.account); - } - - public serializeJSON(options: SerializeJSONContext): 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.writeUInt64LE(this.systemFee), - netfee: JSONHelper.writeUInt64LE(this.networkFee), - validuntilblock: this.validUntilBlock, - signers: this.signers.map((signer) => signer.serializeJSON(options)), - attributes: this.attributes.map((attr) => attr.serializeJSON(options)), - script: JSONHelper.writeBuffer(this.script), - witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), - }; - } - - public async serializeJSONWithInvocationData( - _options: SerializeJSONContext, - ): Promise { - // TODO: Implement method similar to old InvocationTransaction.serializeJSON(), which includes extra invocation data - return Promise.reject(); - } -} diff --git a/packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts b/packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts deleted file mode 100644 index 2b041f0ea3..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/attributes/Attribute.ts +++ /dev/null @@ -1,18 +0,0 @@ -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-csharp-core/src/transaction/attributes/AttributeBase.ts b/packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts deleted file mode 100644 index 6744490f07..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/attributes/AttributeBase.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - AttributeBaseModel, - AttributeJSON, - AttributeTypeModel, - InvalidFormatError, - IOHelper, - toJSONAttributeType, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; - -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(_context: SerializeJSONContext): AttributeJSON { - return { - type: toJSONAttributeType(this.type), - }; - } - - public get size() { - return IOHelper.sizeOfUInt8 + this.sizeExclusive(); - } - - protected sizeExclusive(): number { - return 0; - } -} diff --git a/packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts b/packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts deleted file mode 100644 index 42bc09f28f..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/attributes/HighPriorityAttribute.ts +++ /dev/null @@ -1,7 +0,0 @@ -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-csharp-core/src/transaction/attributes/index.ts b/packages/neo-one-csharp-core/src/transaction/attributes/index.ts deleted file mode 100644 index 3b2423b305..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/attributes/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './AttributeBase'; -export * from './Attribute'; diff --git a/packages/neo-one-csharp-core/src/transaction/index.ts b/packages/neo-one-csharp-core/src/transaction/index.ts deleted file mode 100644 index 63ed6df62a..0000000000 --- a/packages/neo-one-csharp-core/src/transaction/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './Transaction'; -export * from './TransactionState'; -export * from './attributes'; diff --git a/packages/neo-one-csharp-core/src/utils/BinaryReader.ts b/packages/neo-one-csharp-core/src/utils/BinaryReader.ts deleted file mode 100644 index 7014d576d4..0000000000 --- a/packages/neo-one-csharp-core/src/utils/BinaryReader.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { common, ECPoint, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import _ from 'lodash'; - -export class BinaryReader { - public readonly buffer: Buffer; - private mutableIndex: number; - - public constructor(buffer: Buffer, index = 0) { - this.buffer = buffer; - this.mutableIndex = index; - } - - public get index(): number { - return this.mutableIndex; - } - - public get remaining(): number { - return this.buffer.length - this.mutableIndex; - } - - public get remainingBuffer(): Buffer { - return this.buffer.slice(this.mutableIndex); - } - - public hasMore(): boolean { - return this.mutableIndex < this.buffer.byteLength; - } - - public clone(): BinaryReader { - return new BinaryReader(this.buffer, this.mutableIndex); - } - - public readBytes(numBytes: number): Buffer { - this.checkRead(numBytes); - const result = this.buffer.slice(this.mutableIndex, this.mutableIndex + numBytes); - this.mutableIndex += numBytes; - - return result; - } - - public readInt8(): number { - this.checkRead(1); - const result = this.buffer.readInt8(this.mutableIndex); - this.mutableIndex += 1; - - return result; - } - - public readUInt8(): number { - this.checkRead(1); - const result = this.buffer.readUInt8(this.mutableIndex); - this.mutableIndex += 1; - - return result; - } - - public readBoolean(): boolean { - return this.readBytes(1)[0] !== 0; - } - - public readInt16LE(): number { - this.checkRead(2); - const result = this.buffer.readInt16LE(this.mutableIndex); - this.mutableIndex += 2; - - return result; - } - - public readUInt16LE(): number { - this.checkRead(2); - const result = this.buffer.readUInt16LE(this.mutableIndex); - this.mutableIndex += 2; - - return result; - } - - public readUInt16BE(): number { - this.checkRead(2); - const result = this.buffer.readUInt16BE(this.mutableIndex); - this.mutableIndex += 2; - - return result; - } - - public readInt32LE(): number { - this.checkRead(4); - const result = this.buffer.readInt32LE(this.mutableIndex); - this.mutableIndex += 4; - - return result; - } - - public readUInt32LE(): number { - this.checkRead(4); - const result = this.buffer.readUInt32LE(this.mutableIndex); - this.mutableIndex += 4; - - return result; - } - - public readUInt64LE(): BN { - return new BN(this.readBytes(8), 'le'); - } - - public readInt64LE(): BN { - const buffer = this.readBytes(8); - - return new BN(buffer, 'le').fromTwos(buffer.length * 8); - } - - // NEO specific - public readUInt160(): UInt160 { - return common.bufferToUInt160(this.readBytes(common.UINT160_BUFFER_BYTES)); - } - - public readUInt256(): UInt256 { - return common.bufferToUInt256(this.readBytes(common.UINT256_BUFFER_BYTES)); - } - - public readFixed8(): BN { - return this.readInt64LE(); - } - - public readFixedString(length: number): string { - const values = _.takeWhile([...this.readBytes(length)], (value) => value !== 0); - - return Buffer.from(values).toString('utf8'); - } - - public readArray(read: () => T, max: BN | number = 0x1000000): readonly T[] { - const count = this.readVarUIntLE(new BN(max)).toNumber(); - - return _.range(count).map(read); - } - - public readObject( - read: () => { readonly key: number; readonly value: V }, - max?: number, - ): { readonly [key: number]: V }; - public readObject( - read: () => { readonly key: string; readonly value: V }, - max?: number, - ): { readonly [key: string]: V }; - public readObject( - read: () => { readonly key: string | number; readonly value: V }, - max = 0x1000000, - ): { readonly [key: string]: V } { - const count = this.readVarUIntLE(new BN(max)).toNumber(); - - return _.range(count).reduce<{ readonly [key: string]: V }>((acc) => { - const { key, value } = read(); - - return { ...acc, [key]: value }; - }, {}); - } - - public readVarBytesLE(max = 0x1000000): Buffer { - return this.readBytes(this.readVarUIntLE(new BN(max)).toNumber()); - } - - public readVarUIntLE(max: BN = new BN('18446744073709551615', 10)): BN { - const fb = this.readUInt8(); - let value: BN; - switch (fb) { - case 0xfd: - value = new BN(this.readUInt16LE()); - break; - case 0xfe: - value = new BN(this.readUInt32LE()); - break; - case 0xff: - value = this.readUInt64LE(); - break; - default: - value = new BN(fb); - } - - if (value.gt(max)) { - throw new InvalidFormatError(`Integer too large: ${value.toString(10)} > ${max.toString(10)}`); - } - - return value; - } - - public readVarString(max = 0x1000000): string { - return this.readVarBytesLE(max).toString('utf8'); - } - - public readECPoint(): ECPoint { - const firstByte = this.readBytes(1); - if (firstByte[0] === common.ECPOINT_INFINITY_BYTE) { - return common.ECPOINT_INFINITY; - } - - return common.bufferToECPoint(Buffer.concat([firstByte, this.readBytes(common.ECPOINT_BUFFER_BYTES - 1)])); - } - - private checkRead(numBytes: number): void { - if (this.remaining < numBytes) { - throw new InvalidFormatError(`Insufficient bytes remaining (${this.remaining}): ${numBytes}`); - } - } -} diff --git a/packages/neo-one-csharp-core/src/utils/index.ts b/packages/neo-one-csharp-core/src/utils/index.ts deleted file mode 100644 index c5dcaea2d6..0000000000 --- a/packages/neo-one-csharp-core/src/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './BinaryReader'; -export * from './utils'; diff --git a/packages/neo-one-csharp-core/src/utils/utils.ts b/packages/neo-one-csharp-core/src/utils/utils.ts deleted file mode 100644 index 35808e0d92..0000000000 --- a/packages/neo-one-csharp-core/src/utils/utils.ts +++ /dev/null @@ -1,215 +0,0 @@ -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'; - -const toASCII = (bytes: Buffer) => { - let result = ''; - _.range(bytes.length).forEach((i) => { - result += String.fromCharCode(bytes.readUInt8(i)); - }); - - return result; -}; - -const toUTF8 = (bytes: Buffer) => bytes.toString('utf8'); - -const calculateClaimAmount = async ({ - coins, - decrementInterval, - generationAmount, - getSystemFee, -}: { - readonly coins: ReadonlyArray<{ - readonly value: BN; - readonly startHeight: number; - readonly endHeight: number; - }>; - readonly decrementInterval: number; - readonly generationAmount: readonly number[]; - readonly getSystemFee: (index: number) => Promise; -}): Promise => { - const grouped = Object.values(_.groupBy(coins, (coin) => `${coin.startHeight}:${coin.endHeight}`)); - - const claimed = await Promise.all( - grouped.map(async (coinsGroup) => { - const { startHeight, endHeight } = coinsGroup[0]; - - let amount = clientUtils.ZERO; - let ustart = Math.floor(startHeight / decrementInterval); - if (ustart < generationAmount.length) { - let istart = startHeight % decrementInterval; - let uend = Math.floor(endHeight / decrementInterval); - let iend = endHeight % decrementInterval; - if (uend >= generationAmount.length) { - uend = generationAmount.length; - iend = 0; - } - - if (iend === 0) { - uend -= 1; - iend = decrementInterval; - } - - // tslint:disable-next-line no-loop-statement - while (ustart < uend) { - amount = amount.addn((decrementInterval - istart) * generationAmount[ustart]); - - ustart += 1; - istart = 0; - } - - amount = amount.addn((iend - istart) * generationAmount[ustart]); - } - - const [sysFeeEnd, sysFeeStart] = await Promise.all([ - getSystemFee(endHeight - 1), - startHeight === 0 ? Promise.resolve(clientUtils.ZERO) : getSystemFee(startHeight - 1), - ]); - - amount = amount.add(sysFeeEnd.sub(sysFeeStart).div(clientUtils.ONE_HUNDRED_MILLION)); - const totalValue = coinsGroup.reduce((acc, { value }) => acc.add(value), clientUtils.ZERO); - - return [totalValue, amount]; - }), - ); - - return claimed.reduce( - (acc, [value, amount]) => acc.add(value.div(clientUtils.ONE_HUNDRED_MILLION).mul(amount)), - clientUtils.ZERO, - ); -}; - -const randomUInt64 = (): BN => new BN(randomBytes(8).toString('hex'), 16); - -const toKeyString = (clazz: { readonly name: string }, toKey: () => string) => () => `${clazz.name}:${toKey()}`; - -function lazyAsync(getValue: (input: Input) => Promise): (input: Input) => Promise { - let valuePromise: Promise | undefined; - - return async (input) => { - if (valuePromise === undefined) { - valuePromise = getValue(input); - } - - return valuePromise; - }; -} - -function lazyOrValue(getValue: (() => Value) | Value): () => Value { - // tslint:disable-next-line no-any - let settings: any = - typeof getValue === 'function' ? { type: 'lazy', getValue } : { type: 'evaluated', value: getValue }; - - return () => { - if (settings.type === 'lazy') { - settings = { type: 'evaluated', value: settings.getValue() }; - } - - return settings.value; - }; -} - -function weightedAverage( - input: ReadonlyArray<{ - readonly value: number; - readonly weight: BigNumber; - }>, -): number { - let sumWeight = new BigNumber(0); - let sumValue = new BigNumber(0); - input.forEach((value) => { - sumWeight = sumWeight.plus(value.weight); - sumValue = sumValue.plus(value.weight.times(value.value)); - }); - - if (sumValue.isEqualTo(0) || sumWeight.isEqualTo(0)) { - return 0; - } - - return sumValue.div(sumWeight).integerValue(BigNumber.ROUND_FLOOR).toNumber(); -} - -function weightedFilter( - input: readonly T[], - startIn: number, - endIn: number, - getValueIn: (value: T) => BN, -): ReadonlyArray { - const start = new BigNumber(startIn); - const end = new BigNumber(endIn); - const getValue = (value: T) => new BigNumber(getValueIn(value).toString(10)); - const amount = input.reduce((acc, value) => acc.plus(getValue(value)), new BigNumber(0)); - - let sum = new BigNumber(0); - let current = new BigNumber(0); - const mutableResult: Array = []; - // tslint:disable-next-line no-loop-statement - for (const value of input) { - if (current.gte(end)) { - break; - } - let weight = getValue(value); - sum = sum.plus(weight); - const old = current; - current = sum.div(amount); - if (current.lte(start)) { - // eslint-disable-next-line - continue; - } - if (old.lt(start)) { - weight = current.gt(end) ? end.minus(start).times(amount) : current.minus(start).times(amount); - } else if (current.gt(end)) { - weight = end.minus(old).times(amount); - } - - mutableResult.push([ - value, - weight.gte(0) ? weight.integerValue(BigNumber.ROUND_FLOOR) : weight.integerValue(BigNumber.ROUND_CEIL), - ]); - } - - return mutableResult; -} - -function equals( - // tslint:disable-next-line no-any readonly-array - clazz: new (...args: any[]) => T, - thiz: T, - equalsFunc: (other: T) => boolean, - // tslint:disable-next-line no-any -): (other: any) => boolean { - 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 !== '*') { - // TODO: more descriptive; - throw new InvalidFormatError(); - } - - return '*'; - } - if (Array.isArray(json)) { - return json.map(selector); - } - - throw new InvalidFormatError(); -}; - -export const utils = { - ...clientUtils, - toASCII, - toUTF8, - calculateClaimAmount, - randomUInt64, - toKeyString, - equals, - lazyAsync, - lazyOrValue, - weightedAverage, - weightedFilter, - wildCardFromJSON, -}; diff --git a/packages/neo-one-csharp-core/src/vm.ts b/packages/neo-one-csharp-core/src/vm.ts deleted file mode 100644 index bfaba7d64c..0000000000 --- a/packages/neo-one-csharp-core/src/vm.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { SerializableWire, UInt256, VMState } from '@neo-one/client-common'; -import { Block } from './Block'; -import { StackItem } from './StackItems'; -import { ChangeSet } from './Storage'; -import { Transaction } from './transaction'; -import { Verifiable } from './Verifiable'; - -export enum TriggerType { - Verification = 0x00, - System = 0x01, - Application = 0x10, -} - -export type SnapshotName = 'main' | 'clone'; - -export interface ApplicationEngineOptions { - readonly trigger: TriggerType; - readonly container?: Verifiable & SerializableWire; - readonly snapshot?: SnapshotName; - readonly gas: number; - readonly testMode?: boolean; -} - -export interface ApplicationEngine { - readonly trigger: TriggerType; - readonly gasConsumed: number; - readonly resultStack: readonly StackItem[]; - readonly state: VMState; - readonly loadScript: (script: Buffer) => boolean; - readonly execute: () => keyof typeof VMState; - readonly loadClonedContext: (position: number) => boolean; -} - -export type SnapshotPartial = 'blocks' | 'transactions'; - -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 getChangeSet: () => any; - readonly clone: () => void; -} - -// tslint:disable-next-line no-any TODO: implement -export type Notification = any; - -export interface ApplicationExecuted { - readonly transaction?: Transaction; - readonly trigger: TriggerType; - readonly state: VMState; - readonly gasConsumed: number; - readonly stack: readonly StackItem[]; - readonly notifications: readonly Notification[]; -} - -export interface VM { - readonly withApplicationEngine: ( - options: ApplicationEngineOptions, - func: (engine: ApplicationEngine) => T, - ) => T; - - readonly withSnapshots: ( - func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, - ) => T; -} diff --git a/packages/neo-one-csharp-core/tsconfig.json b/packages/neo-one-csharp-core/tsconfig.json deleted file mode 100644 index bfb2319087..0000000000 --- a/packages/neo-one-csharp-core/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" -} diff --git a/packages/neo-one-csharp-vm/gulpfile.js b/packages/neo-one-csharp-vm/gulpfile.js deleted file mode 100644 index 6267e6b0d6..0000000000 --- a/packages/neo-one-csharp-vm/gulpfile.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.initialize(); diff --git a/packages/neo-one-csharp-vm/package.json b/packages/neo-one-csharp-vm/package.json deleted file mode 100644 index f572280e1c..0000000000 --- a/packages/neo-one-csharp-vm/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "@neo-one/csharp-vm", - "version": "2.7.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", - "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/edge": "^15.0.0", - "@neo-one/csharp-core": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "bn.js": "^5.0.0" - }, - "devDependencies": { - "@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-csharp-vm/src/__tests__/syscalls.test.ts b/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts deleted file mode 100644 index c149f8055c..0000000000 --- a/packages/neo-one-csharp-vm/src/__tests__/syscalls.test.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { common, ScriptBuilder } from '@neo-one/client-common'; -import { - Block, - ByteStringStackItem, - ConsensusData, - IntegerStackItem, - TriggerType, - Witness, -} from '@neo-one/csharp-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -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: 0, - testMode: true, - }); - - script = new ScriptBuilder(); - }); - - describe('System.Json.Deserialize', () => { - test('Halt -- Good values', () => { - script.emitPushString('123'); - script.emitSysCall('System.Json.Deserialize'); - script.emitPushString('null'); - script.emitSysCall('System.Json.Deserialize'); - - engine.loadScript(script.build()); - const state = engine.execute(); - expect(state).toEqual('HALT'); - - const resultStack = engine.resultStack; - expect(resultStack[0].isNull).toEqual(true); - expect(resultStack[1].value.toNumber()).toEqual(123); - }); - - test('Fault -- Wrong Json', () => { - script.emitPushString('***'); - script.emitSysCall('System.Json.Deserialize'); - - engine.loadScript(script.build()); - const state = engine.execute(); - expect(state).toEqual('FAULT'); - expect(engine.resultStack.length).toEqual(0); - }); - - test('Fault -- No decimals', () => { - script.emitPushString('123.45'); - script.emitSysCall('System.Json.Deserialize'); - - engine.loadScript(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.build()); - const state = engine.execute(); - expect(state).toEqual('HALT'); - - const resultStack = engine.resultStack; - expect(resultStack.length).toEqual(5); - - expect((resultStack[0] as ByteStringStackItem).asString()).toEqual('{"key":"value"}'); - expect((resultStack[1] as ByteStringStackItem).asString()).toEqual('null'); - expect((resultStack[2] as ByteStringStackItem).asString()).toEqual('"test"'); - expect((resultStack[3] as ByteStringStackItem).asString()).toEqual('true'); - expect((resultStack[4] as ByteStringStackItem).asString()).toEqual('5'); - }); - - test('Fault -- Bad values', () => { - script.emitSysCall('System.Storage.GetContext'); - script.emitSysCall('System.Json.Serialize'); - - engine.loadScript(script.build()); - const state = engine.execute(); - expect(state).toEqual('FAULT'); - expect(engine.resultStack.length).toEqual(0); - }); - }); - - test('System.Callback.Invoke -- Halt', () => { - engine.create({ - trigger: TriggerType.Application, - gas: 1, - testMode: false, - }); - - 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.build()); - const state = engine.execute(); - expect(state).toEqual('HALT'); - - const resultStack = engine.resultStack; - expect(resultStack.length).toEqual(1); - expect((resultStack[0] as IntegerStackItem).value.eq(new BN(4))).toEqual(true); - }); - - test('System.Callback.CreateFromSyscall -- Halt', () => { - engine.create({ - trigger: TriggerType.Application, - gas: 1, - testMode: false, - }); - - 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.build()); - const state = engine.execute(); - expect(state).toEqual('HALT'); - - const resultStack = engine.resultStack; - expect(resultStack.length).toEqual(1); - const byteStringItem = engine.resultStack[0] as ByteStringStackItem; - expect(byteStringItem.value.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: [], - }); - - test('With Snapshot option -- Halt', () => { - engine.create({ - trigger: TriggerType.Application, - gas: 0, - testMode: true, - snapshot: 'main', - }); - script.emitPushUInt256(block.hash); - script.emitSysCall('System.Blockchain.GetBlock'); - - engine.loadScript(script.build()); - const state = engine.execute(); - expect(state).toEqual('HALT'); - - const stack = engine.resultStack; - expect(stack.length).toEqual(1); - expect(stack[0].isNull).toEqual(true); - }); - - test('Without Snapshot option -- Fault', () => { - engine.create({ trigger: TriggerType.Application, gas: 0, testMode: true }); - script.emitPushUInt256(block.hash); - script.emitSysCall('System.Blockchain.GetBlock'); - - engine.loadScript(script.build()); - const state = engine.execute(); - expect(state).toEqual('FAULT'); - }); - }); -}); diff --git a/packages/neo-one-csharp-vm/src/index.ts b/packages/neo-one-csharp-vm/src/index.ts deleted file mode 100644 index 91a11ff1f1..0000000000 --- a/packages/neo-one-csharp-vm/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ApplicationEngine'; -export * from './Dispatcher'; diff --git a/packages/neo-one-csharp-vm/tsconfig.json b/packages/neo-one-csharp-vm/tsconfig.json deleted file mode 100644 index bfb2319087..0000000000 --- a/packages/neo-one-csharp-vm/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" -} diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 8f4fd5d08c..51c6419c49 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,9 +1,8 @@ { "name": "@neo-one/node-blockchain", "version": "2.7.0", - "description": "NEO•ONE NEO blockchain implementation.", + "description": "NEO•ONE Blockchain implementation", "main": "./dist/cjs/index", - "module": "./dist/esm/index", "scripts": { "build": "gulp", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", @@ -14,22 +13,21 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.7.0", - "@neo-one/client-switch": "^2.7.0", - "@neo-one/logger": "^2.6.1", "@neo-one/node-core": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", + "@neo-one/logger": "^2.6.1", "@neo-one/utils": "^2.6.1", - "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", - "rxjs": "^6.5.3", - "tslib": "^1.10.0" + "rxjs": "^6.5.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "@types/js-priority-queue": "^0.0.5", "@types/lodash": "^4.14.138", - "gulp": "~4.0.2" + "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 7aec00934a..947cc235f8 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,176 +1,125 @@ -import { common, crypto, ECPoint, ScriptBuilder, VMState } from '@neo-one/client-common'; -import { createChild, nodeLogger } from '@neo-one/logger'; -import { - Action, - Block, - Blockchain as BlockchainType, - CallReceipt, - ConsensusPayload, - Header, - LogAction, - NotificationAction, - NULL_ACTION, - ScriptContainerType, - SerializableInvocationData, - Settings, - Storage, - Transaction, - TriggerType, - utils, - Validator, - VerifyScriptOptions, - VerifyScriptResult, - VerifyTransactionResult, - VM, -} from '@neo-one/node-core'; -import { Labels, utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; +import { UInt256 } from '@neo-one/client-common'; +import { Block, Blockchain as BlockchainType, BlockchainSettings, Header, Storage, VM } from '@neo-one/node-core'; import PriorityQueue from 'js-priority-queue'; -import { BehaviorSubject, Observable, Subject } from 'rxjs'; -import { toArray } from 'rxjs/operators'; -import { - CoinClaimedError, - CoinUnspentError, - GenesisBlockNotRegisteredError, - InvalidClaimError, - UnknownVerifyError, - WitnessVerifyError, -} from './errors'; -import { getValidators } from './getValidators'; -import { wrapExecuteScripts } from './wrapExecuteScripts'; -import { WriteBatchBlockchain } from './WriteBatchBlockchain'; - -const logger = createChild(nodeLogger, { component: 'blockchain' }); +import { Subject } from 'rxjs'; +import { flatMap, map, toArray } from 'rxjs/operators'; +import { GenesisBlockNotRegisteredError } from './errors'; +import { PersistingBlockchain } from './PersistingBlockchain'; +import { utils } from './utils'; +import { verifyWitnesses } from './verify'; + +// TODO: bring logger over when its time; +const logger = console; export interface CreateBlockchainOptions { - readonly settings: Settings; + readonly onPersistNativeContractScript?: Buffer; + readonly settings: BlockchainSettings; readonly storage: Storage; readonly vm: VM; } + export interface BlockchainOptions extends CreateBlockchainOptions { - readonly currentBlock: BlockchainType['currentBlock'] | undefined; - readonly previousBlock: BlockchainType['previousBlock'] | undefined; - readonly currentHeader: BlockchainType['currentHeader'] | undefined; + // readonly currentBlock: Block | undefined; + // readonly previousBlockIndex: HashIndexState | undefined; + // tslint:disable-next-line: readonly-array + readonly headerIndex: UInt256[]; } interface Entry { readonly block: Block; readonly resolve: () => void; readonly reject: (error: Error) => void; - readonly unsafe: boolean; + readonly verify: boolean; } -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 }); +// TODO: revisit this with more context into how the headerIndex is being used. +export const recoverHeaderIndex = async (storage: Storage) => { + const initHeaderIndex = await storage.headerHashList + .getAll$() + .pipe( + flatMap((value) => value.hashes), + toArray(), + ) + .toPromise(); + + const storedHeaderCount = initHeaderIndex.length; + + if (storedHeaderCount !== 0) { + const hashIndex = await storage.headerHashIndex.get(); + let extraHashes: readonly UInt256[] = []; + if (hashIndex.index >= storedHeaderCount) { + let hash = hashIndex.hash; + // tslint:disable-next-line + while (hash !== initHeaderIndex[storedHeaderCount - 1]) { + // tslint:disable-next-line: no-array-mutation + extraHashes = [hash].concat(extraHashes); + const { previousHash } = await storage.blocks.get({ hashOrIndex: hash }); + hash = previousHash; + } + + return initHeaderIndex.concat(extraHashes); } + } + + return storage.blocks + .getAll$() + .pipe( + map((block) => block.header.hash), + toArray(), + ) + .toPromise(); +}; +export class Blockchain { + public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { + const headerIndex = await recoverHeaderIndex(storage); const blockchain = new Blockchain({ - currentBlock, - currentHeader, - previousBlock, + headerIndex, settings, storage, vm, }); - if (currentHeader === undefined) { - await blockchain.persistHeaders([settings.genesisBlock.header]); - } - - if (currentBlock === undefined) { + if (headerIndex.length === 0) { await blockchain.persistBlock({ block: settings.genesisBlock }); + + return blockchain; } + // TODO: see if we need something similar and how we'll implement it. + blockchain.loadMempoolPolicy(storage); + return blockchain; } - public readonly deserializeWireContext: BlockchainType['deserializeWireContext']; - public readonly serializeJSONContext: BlockchainType['serializeJSONContext']; - public readonly feeContext: BlockchainType['feeContext']; - - private readonly settings$: BehaviorSubject; + // tslint:disable-next-line: readonly-array + private readonly headerIndex: UInt256[]; + private readonly onPersistNativeContractScript: Buffer; + private readonly settings: BlockchainSettings; private readonly storage: Storage; - private mutableCurrentBlock: BlockchainType['currentBlock'] | undefined; - private mutablePreviousBlock: BlockchainType['currentBlock'] | undefined; - private mutableCurrentHeader: BlockchainType['currentHeader'] | undefined; - private mutablePersistingBlocks = false; + private readonly vm: VM; + + private mutableStoredHeaderCount: number; 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.headerIndex = options.headerIndex; + this.mutableStoredHeaderCount = this.headerIndex.length; + this.settings = options.settings; this.storage = options.storage; - this.mutableCurrentBlock = options.currentBlock; - this.mutablePreviousBlock = options.previousBlock; - this.mutableCurrentHeader = options.currentHeader; this.vm = options.vm; - - this.settings$ = new BehaviorSubject(options.settings); - - // tslint:disable-next-line no-this-assignment - const self = this; - 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; - }, - }; - - 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.start(); - } - - public get settings(): Settings { - return this.settings$.getValue(); + this.onPersistNativeContractScript = + options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); } public get currentBlock(): Block { @@ -181,125 +130,28 @@ export class Blockchain { return this.mutableCurrentBlock; } - public get previousBlock(): Block | undefined { - return this.mutablePreviousBlock; - } - - public get currentHeader(): Header { - if (this.mutableCurrentHeader === undefined) { - throw new GenesisBlockNotRegisteredError(); - } - - return this.mutableCurrentHeader; + public get storedHeaderCount(): number { + return this.mutableStoredHeaderCount; } public get currentBlockIndex(): number { return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; } - public get block$(): Observable { - return this.mutableBlock$; - } - - public get isPersistingBlock(): boolean { - return this.mutablePersistingBlocks; - } - - public get account(): BlockchainType['account'] { - return this.storage.account; - } - - public get accountUnclaimed(): BlockchainType['accountUnclaimed'] { - return this.storage.accountUnclaimed; - } - - public get accountUnspent(): BlockchainType['accountUnspent'] { - return this.storage.accountUnspent; - } - - public get action(): BlockchainType['action'] { - return this.storage.action; - } - - public get asset(): BlockchainType['asset'] { - return this.storage.asset; - } - - public get block(): BlockchainType['block'] { - return this.storage.block; - } - - public get blockData(): BlockchainType['blockData'] { - return this.storage.blockData; - } - - public get header(): BlockchainType['header'] { - return this.storage.header; - } - - public get transaction(): BlockchainType['transaction'] { - return this.storage.transaction; - } - - public get transactionData(): BlockchainType['transactionData'] { - return this.storage.transactionData; - } - - public get output(): BlockchainType['output'] { - return this.storage.output; - } - - public get contract(): BlockchainType['contract'] { - return this.storage.contract; - } - - public get storageItem(): BlockchainType['storageItem'] { - return this.storage.storageItem; - } - - public get validator(): BlockchainType['validator'] { - return this.storage.validator; - } - - public get invocationData(): BlockchainType['invocationData'] { - return this.storage.invocationData; - } - - public get validatorsCount(): BlockchainType['validatorsCount'] { - return this.storage.validatorsCount; - } - - public async stop(): Promise { - if (!this.mutableRunning) { - return; - } - - if (this.mutablePersistingBlocks) { - // tslint:disable-next-line promise-must-complete - const doneRunningPromise = new Promise((resolve) => { - this.mutableDoneRunningResolve = resolve; - }); - this.mutableRunning = false; - - await doneRunningPromise; - this.mutableDoneRunningResolve = undefined; - } else { - this.mutableRunning = false; + public async verifyBlock(block: Block): Promise { + const verification = await block.verify(this.storage, verifyWitnesses); + if (!verification) { + // TODO: implement a makeError + throw new Error('Block Verification Failed'); } - - logger.info({ name: 'neo_blockchain_stop' }, 'NEO blockchain stopped.'); - } - - public updateSettings(settings: Settings): void { - this.settings$.next(settings); } 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) => { @@ -314,7 +166,7 @@ export class Blockchain { block, resolve, reject, - unsafe, + verify, }); // tslint:disable-next-line no-floating-promises @@ -322,151 +174,6 @@ export class Blockchain { }); } - public async persistHeaders(_headers: readonly Header[]): Promise { - // We don't ever just persist the headers. - } - - 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, - }); - } - - 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 async verifyTransaction({ - transaction, - memPool, - }: { - readonly transaction: Transaction; - readonly memPool?: readonly Transaction[]; - }): Promise { - try { - const verifications = await transaction.verify({ - 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 Transaction({ - script, - gas: common.ONE_HUNDRED_FIXED8, - }); - - return this.invokeTransaction(transaction); - } - - public async invokeTransaction(transaction: Transaction): Promise { - const blockchain = this.createWriteBlockchain(); - - 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); - }, - }, - - 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 }); - } - - public readonly getValidators = async (transactions: readonly Transaction[]): Promise => { - logger.debug({ name: 'neo_blockchain_get_validators' }); - - return getValidators(this, transactions); - }; - private async persistBlocksAsync(): Promise { if (this.mutablePersistingBlocks || !this.mutableRunning) { return; @@ -481,11 +188,11 @@ export class Blockchain { while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { const entryNonNull = entry; const logData = { - [Labels.NEO_BLOCK_INDEX]: entry.block.index, + // [Labels.NEO_BLOCK_INDEX]: entry.block.index, // TODO: bring Label over name: 'neo_blockchain_persist_block_top_level', }; try { - await this.persistBlockInternal(entryNonNull.block, entryNonNull.unsafe); + await this.persistBlockInternal(entryNonNull.block, entryNonNull.verify); logger.debug(logData); } catch (err) { logger.error({ err, ...logData }); @@ -515,17 +222,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(); } @@ -533,122 +240,6 @@ 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(); - } - - 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, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - onNotify: ({ args, scriptHash }) => { - mutableActions.push( - new NotificationAction({ - index: globalActionIndex, - scriptHash, - args, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - }, - }); - const result = { actions: mutableActions, hash, witness }; - - const { stack, state, errorMessage } = executeResult; - if (state === VMState.FAULT) { - return { - ...result, - failureMessage: errorMessage === undefined ? 'Script execution ended in a FAULT state' : errorMessage, - }; - } - - 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.`, - }; - } - - const top = stack[0]; - if (!top.asBoolean()) { - return { ...result, failureMessage: 'Verification did not succeed.' }; - } - - return result; - }; - - private readonly tryGetInvocationData = async ( - transaction: Transaction, - ): Promise => { - const data = await this.invocationData.tryGet({ - hash: transaction.hash, - }); - - 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(), - ]); - - 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 getAllValidators = async (): Promise => - this.validator.all$.pipe(toArray()).toPromise(); - private start(): void { this.mutableBlock$ = new Subject(); this.mutablePersistingBlocks = false; @@ -662,29 +253,51 @@ export class Blockchain { logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); } - private async persistBlockInternal(block: Block, unsafe?: boolean): Promise { - if (!unsafe) { + private async saveHeaderHashList(): Promise { + if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { + return; + } + + const blockchain = this.createPersistingBlockchain(); + const { changeSet, countIncrement } = await blockchain.getHeaderHashListChanges( + this.headerIndex, + this.storedHeaderCount, + ); + await this.storage.commit(changeSet); + this.mutableStoredHeaderCount += countIncrement; + } + + private async persistBlockInternal(block: Block, verify?: boolean): Promise { + if (verify) { await this.verifyBlock(block); } - const blockchain = this.createWriteBlockchain(); + const blockchain = this.createPersistingBlockchain(); + const currentHeaderCount = this.headerIndex.length; + + if (block.index === currentHeaderCount) { + this.headerIndex.push(block.hash); + } - await blockchain.persistBlock(block); - await this.storage.commit(blockchain.getChangeSet()); + /** + * TODO: this changeSet is NOT the `ChangeSet` type we expect for a `.commit(...)` like in `saveHeaderHashList` + * it is the already serialized changeSet coming from the C# VM Snapshot. There won't need to be as much storage + * change conversion with this changeSet so will probably make 2 different `commit` methods, 1 for each. + */ + const { changeSet, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); + await this.storage.commit(changeSet); + await this.saveHeaderHashList(); this.mutablePreviousBlock = this.mutableCurrentBlock; this.mutableCurrentBlock = block; this.mutableCurrentHeader = block.header; } - private createWriteBlockchain(): WriteBatchBlockchain { - return new WriteBatchBlockchain({ - settings: this.settings, - currentBlock: this.mutableCurrentBlock, - currentHeader: this.mutableCurrentHeader, + private createPersistingBlockchain(): PersistingBlockchain { + return new PersistingBlockchain({ + onPersistNativeContractScript: this.onPersistNativeContractScript, storage: this.storage, vm: this.vm, - getValidators: this.getValidators, }); } } diff --git a/packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts similarity index 99% rename from packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts rename to packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index fd958930c2..0ff6b6043d 100644 --- a/packages/neo-one-csharp-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -25,7 +25,7 @@ import { Transaction, TriggerType, VM, -} from '@neo-one/csharp-core'; +} from '@neo-one/node-core'; import { ReadAddStorageCache } from './StorageCache'; import { utils, utils as blockchainUtils } from './utils'; diff --git a/packages/neo-one-node-blockchain/src/StorageCache.ts b/packages/neo-one-node-blockchain/src/StorageCache.ts index c9c542d360..0896714e00 100644 --- a/packages/neo-one-node-blockchain/src/StorageCache.ts +++ b/packages/neo-one-node-blockchain/src/StorageCache.ts @@ -1,38 +1,62 @@ -// tslint:disable no-object-mutation no-dynamic-delete -import { common } from '@neo-one/client-common'; -import { - AddChange, - Block, - Change, - ChangeSet, - DeleteChange, - 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, 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 => { @@ -53,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 => { @@ -71,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 readonly 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; @@ -114,48 +138,48 @@ 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 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, @@ -167,150 +191,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) { @@ -323,10 +224,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 @@ -334,161 +236,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; - 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; +interface ReadAddStorageCacheOptions extends ReadStorageCacheOptions { 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({ @@ -502,429 +256,8 @@ export class ReadAddStorageCache extends ReadStorageCache - extends ReadGetAllStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadGetAllAddDeleteStorageCache extends ReadGetAllStorageCache< - Key, - PartialKey, - Value -> { - public readonly add: AddFunc; - public readonly delete: DeleteFunc; - - 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 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, - }); - - 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; - } -} - -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, - }); - } -} 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/Verifiable.ts b/packages/neo-one-node-blockchain/src/Verifiable.ts deleted file mode 100644 index 95f65c0aad..0000000000 --- a/packages/neo-one-node-blockchain/src/Verifiable.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { BinaryWriter, common, ContractMethodDescriptor, UInt160, UInt256 } from '@neo-one/client-common'; -import { Contract, Header, StorageItem, TrimmedBlock, Witness } from '@neo-one/node-core'; -import { BN } from 'bn.js'; - -const maxVerificationGas = common.fixed8FromDecimal(0.5); - -export interface SnapshotMethods { - readonly tryGetBlock: (hash: UInt256) => Promise; - readonly tryGetHeader: (hash: UInt256) => Promise
; - readonly tryGetContract: (hash: UInt160) => Promise; - readonly tryGetStorage: (key: StorageKey) => Promise; -} - -export interface Verifiable { - readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; - readonly witnesses: readonly Witness[]; -} - -export interface VerifyResult { - readonly gas: BN; - readonly result: boolean; -} - -export const verifyWithApplicationEngine = ( - verifiable: Verifiable, - verification: Buffer, - index: number, - gas: BN, - offset: number, - init?: ContractMethodDescriptor, -): VerifyResult => - withApplicationEngine({ trigger: TriggerType.Verification, verifiable, snapshot: true, gas }, (engine) => { - engine.loadScript(verification, CallFlags.None); - engine.setInstructionPointer(offset); - if (init !== undefined) { - engine.loadClonedContext(init.offset); - } - engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); - - const state = engine.execute(); - if (state === 'FAULT') { - return { result: false, gas }; - } - - const stack = engine.resultStack; - if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { - return { result: false, gas }; - } - - return { result: true, gas: gas.sub(engine.gasConsumed) }; - }); - -export const tryVerifyHash = async ( - hash: UInt160, - index: number, - snapshot: SnapshotMethods, - verifiable: Verifiable, - gas: BN, -): Promise => { - const verificationScript = verifiable.witnesses[index].verification; - if (verificationScript.length === 0) { - const contractState = await snapshot.tryGetContract(hash); - if (contractState === undefined) { - return { result: false, gas }; - } - const methodDescriptor = contractState.manifest.abi.getMethod('verify'); - if (methodDescriptor === undefined) { - return { result: false, gas }; - } - - const verification = contractState.script; - const offset = methodDescriptor.offset; - const init = contractState.manifest.abi.getMethod('_initialize'); - - return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); - } - - if (hash !== verifiable.witnesses[index].scriptHash) { - return { result: false, gas }; - } - - return verifyWithApplicationEngine(verifiable, verificationScript, index, gas, 0); -}; - -export const verifyWitnesses = async ( - verifiable: Verifiable, - snapshot: SnapshotMethods, - 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(snapshot); - } catch { - return false; - } - - if (hashes.length !== verifiable.witnesses.length) { - return false; - } - - const { next, previous } = hashes - .slice(1) - .reduce<{ readonly next: Promise; readonly previous: boolean }>( - async (acc, hash, index) => { - const { result, gas: newGas } = await acc.next; - if (!result) { - return { - next: Promise.resolve({ result: false, gas: newGas }), - previous: false, - }; - } - - return { - next: tryVerifyHash(hash, index, snapshot, verifiable, newGas), - previous: acc.previous && result, - }; - }, - { next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true }, - ); -}; 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 0a0e4b3cbb..0000000000 --- a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts +++ /dev/null @@ -1,1022 +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]); - }, - onSetVotes: ({ address, votes }) => { - voteUpdates.push([address, votes]); - }, - }, - - 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]), - 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 7ff3a2ad28..d599d05923 100644 --- a/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts +++ b/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts @@ -12,7 +12,7 @@ const createBlockchain = async ({ vm, storage }: { readonly vm: any; readonly st vm, }); -describe('Blockchain', () => { +describe.skip('Blockchain', () => { let storage: any; let vm: any; beforeEach(() => { 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..16f8529ae4 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -16,7 +16,3 @@ 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.`, -); 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 deleted file mode 100644 index 526c861eb9..0000000000 --- a/packages/neo-one-node-blockchain/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// tslint:disable-next-line export-name -export { Blockchain } from './Blockchain'; diff --git a/packages/neo-one-csharp-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts similarity index 97% rename from packages/neo-one-csharp-blockchain/src/utils.ts rename to packages/neo-one-node-blockchain/src/utils.ts index 3aa1858df2..8e3dfad47b 100644 --- a/packages/neo-one-csharp-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -1,5 +1,5 @@ import { ScriptBuilder, UInt160 } from '@neo-one/client-common'; -import { ApplicationEngine, Transaction, utils as coreUtils } from '@neo-one/csharp-core'; +import { ApplicationEngine, Transaction, utils as coreUtils } from '@neo-one/node-core'; interface BaseNativeContract { readonly hash: UInt160; diff --git a/packages/neo-one-csharp-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts similarity index 67% rename from packages/neo-one-csharp-blockchain/src/verify.ts rename to packages/neo-one-node-blockchain/src/verify.ts index 540371d7db..61de4968a3 100644 --- a/packages/neo-one-csharp-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -1,14 +1,15 @@ import { UInt160 } from '@neo-one/client-common'; import { + BlockchainStorage, BooleanStackItem, CallFlags, ContractMethodDescriptor, - StorageMethods, + SerializableWire, TriggerType, Verifiable, VerifyResult, -} from '@neo-one/csharp-core'; -import { withApplicationEngine } from '@neo-one/csharp-vm'; + VM, +} from '@neo-one/node-core'; const maxVerificationGas = 0.5; @@ -20,12 +21,12 @@ interface ApplicationEngineVerifyOptions { const getApplicationEngineVerifyOptions = async ( verification: Buffer, - storage: StorageMethods, + storage: BlockchainStorage, hash: UInt160, scriptHash: UInt160, ): Promise => { if (verification.length === 0) { - const contractState = await storage.tryGetContract(hash); + const contractState = await storage.contracts.tryGet(hash); if (contractState === undefined) { // TODO: implement an error throw new Error('Failed to fetch contract from storage'); @@ -55,39 +56,44 @@ const getApplicationEngineVerifyOptions = async ( }; export const verifyWithApplicationEngine = ( - verifiable: Verifiable, + vm: VM, + verifiable: Verifiable & SerializableWire, verification: Buffer, index: number, gas: number, offset: number, init?: ContractMethodDescriptor, ): VerifyResult => - withApplicationEngine({ trigger: TriggerType.Verification, container: verifiable, storage: true, gas }, (engine) => { - engine.loadScript(verification); - engine.loadClonedContext(offset); - if (init !== undefined) { - engine.loadClonedContext(init.offset); - } - engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); + vm.withApplicationEngine( + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'main', gas }, + (engine) => { + engine.loadScript(verification, CallFlags.None); + engine.loadClonedContext(offset); + if (init !== undefined) { + engine.loadClonedContext(init.offset); + } + engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); - const state = engine.execute(); - if (state === 'FAULT') { - return { result: false, gas }; - } + const state = engine.execute(); + if (state === 'FAULT') { + return { result: false, gas }; + } - const stack = engine.resultStack; - if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { - return { result: false, gas }; - } + const stack = engine.resultStack; + if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { + return { result: false, gas }; + } - return { result: true, gas: gas - engine.gasConsumed }; - }); + return { result: true, gas: gas - engine.gasConsumed }; + }, + ); export const tryVerifyHash = async ( + vm: VM, hash: UInt160, index: number, - storage: StorageMethods, - verifiable: Verifiable, + storage: BlockchainStorage, + verifiable: Verifiable & SerializableWire, gas: number, ): Promise => { const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; @@ -99,15 +105,16 @@ export const tryVerifyHash = async ( scriptHash, ); - return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); + return verifyWithApplicationEngine(vm, verifiable, verification, index, gas, offset, init); } catch { return { gas, result: false }; } }; export const verifyWitnesses = async ( - verifiable: Verifiable, - storage: StorageMethods, + vm: VM, + verifiable: Verifiable & SerializableWire, + storage: BlockchainStorage, gasIn: number, ): Promise => { if (gasIn < 0) { @@ -140,10 +147,10 @@ export const verifyWitnesses = async ( } return { - next: tryVerifyHash(hash, index, storage, verifiable, newGas), + next: tryVerifyHash(vm, hash, index, storage, verifiable, newGas), previous: accPrevious && result, }; - }, Promise.resolve({ next: tryVerifyHash(hashes[0], 0, storage, verifiable, gas), previous: true })); + }, Promise.resolve({ next: tryVerifyHash(vm, hashes[0], 0, storage, verifiable, gas), previous: true })); const { result: finalResult } = await next; 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 0c1c0eb7dc..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-core/gulpfile.js b/packages/neo-one-node-core/gulpfile.js index 95bf166030..6267e6b0d6 100644 --- a/packages/neo-one-node-core/gulpfile.js +++ b/packages/neo-one-node-core/gulpfile.js @@ -2,8 +2,4 @@ const build = require('@neo-one/build-tools'); -build.compileTypescriptTask.options = { - stripInternal: true, -}; - build.initialize(); diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index aa3ba2a1ab..ef49b29eac 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,9 +1,8 @@ { "name": "@neo-one/node-core", "version": "2.7.0", - "description": "NEO•ONE core node types.", + "description": "NEO•ONE core types for node packages", "main": "./dist/cjs/index", - "module": "./dist/esm/index", "scripts": { "build": "gulp", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", @@ -16,19 +15,16 @@ "@neo-one/client-common": "^2.7.0", "@neo-one/client-full-common": "^2.7.0", "@neo-one/utils": "^2.6.1", - "@types/bn.js": "^4.11.5", "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" + "rxjs": "^6.5.3" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/through": "^0.0.29", - "gulp": "~4.0.2" + "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 3b0908ef51..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 no-unnecessary-type-assertion no-useless-cast - 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/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 3945e0adbc..2cb619f85a 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -2,25 +2,16 @@ import { BinaryWriter, BlockJSON, common, - crypto, - ECPoint, InvalidFormatError, IOHelper, TransactionJSON, - UInt160, UInt256, } from '@neo-one/client-common'; -import { ContractModel } from '@neo-one/client-full-common/src'; -import { BN } from 'bn.js'; -import { Account, AccountKey } from './Account'; -import { Asset, AssetKey } from './Asset'; +import _ from 'lodash'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { ConsensusData } from './ConsensusData'; -import { ContractPropertyState } from './ContractPropertyState'; import { MerkleTree } from './crypto'; -import { VerifyError } from './errors'; -import { Header, HeaderKey } from './Header'; -import { ScriptContainerType } from './ScriptContainer'; +import { Header } from './Header'; import { DeserializeWireBaseOptions, DeserializeWireOptions, @@ -28,31 +19,17 @@ import { 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 extends BlockBaseAdd { +export interface BlockAdd extends Omit { + readonly merkleRoot?: UInt256; readonly consensusData?: ConsensusData; readonly transactions: readonly Transaction[]; } -export interface BlockKey { - readonly hashOrIndex: UInt256 | number; -} - // export interface BlockVerifyOptions { // readonly genesisBlock: Block; // readonly tryGetBlock: (block: BlockKey) => Promise; @@ -84,7 +61,7 @@ const getCombinedModels = ( return init.concat(transactions); }; -export class Block extends BlockBase implements SerializableWire, SerializableJSON { +export class Block extends BlockBase implements SerializableWire, 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 { @@ -101,7 +78,7 @@ export class Block extends BlockBase implements SerializableWire, Seriali throw new InvalidFormatError('Expected count to be greater than 0'); } const consensusData = ConsensusData.deserializeWireBase(options); - const transactions = reader.readArray(() => Transaction.deserializeWireBase(options), 0x10000); + const transactions = _.range(count - 1).map(() => Transaction.deserializeWireBase(options)); if (transactions.length !== count - 1) { throw new InvalidFormatError(`Expected ${count - 1} transactions on the block, found: ${transactions.length}`); diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 67dc3c6431..34d1c739fe 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -2,6 +2,7 @@ import { BinaryWriter, BlockBaseJSON, common, + createGetHashData, crypto, InvalidFormatError, IOHelper, @@ -10,20 +11,12 @@ import { UInt256, UInt256Hex, } from '@neo-one/client-common'; -import { ContractModel } from '@neo-one/client-full-common'; import { BN } from 'bn.js'; import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; -import { Header } from './Header'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; +import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; import { utils } from './utils'; -import { SnapshotMethods } from './Verifiable'; +import { StorageMethods, VerifyWitnesses } from './Verifiable'; import { Witness } from './Witness'; export interface BlockBaseAdd { @@ -85,7 +78,7 @@ export abstract class BlockBase implements EquatableKey { public readonly timestamp: BN; public readonly index: number; public readonly nextConsensus: UInt160; - public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: SnapshotMethods) => { + public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: StorageMethods) => { if (this.previousHash === common.ZERO_UINT256) { return [this.witness.scriptHash]; } @@ -107,7 +100,7 @@ export abstract class BlockBase implements EquatableKey { public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly hashInternal: () => UInt256; private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned)()); private readonly witnessInternal: Witness | undefined; private readonly sizeInternal = utils.lazy( () => @@ -167,6 +160,10 @@ export abstract class BlockBase implements EquatableKey { return this.witnessInternal; } + public get witnesses(): readonly Witness[] { + return [this.witness]; + } + public serializeUnsignedBase(writer: BinaryWriter): void { writer.writeUInt32LE(this.version); writer.writeUInt256(this.previousHash); @@ -201,8 +198,8 @@ export abstract class BlockBase implements EquatableKey { }; } - public async verify(options: SnapshotMethods) { - const prevHeader = await options.tryGetHeader(this.previousHash); + public async verify(storage: StorageMethods, verifyWitnesses: VerifyWitnesses) { + const prevHeader = await storage.tryGetHeader(this.previousHash); if (prevHeader === undefined) { return false; } @@ -215,7 +212,7 @@ export abstract class BlockBase implements EquatableKey { return false; } - return this.verifyWitnesses(options, utils.ONE_HUNDRED_MILLION); + return verifyWitnesses(this, storage, 1); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 88e40af427..a617f2497a 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -1,138 +1,24 @@ -import { ECPoint } 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 { ConsensusPayload } from './payload'; +import { Block } from './Block'; +import { Header } from './Header'; 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'; +import { BlockchainSettings } from './Settings'; +import { BlockchainStorage } from './Storage'; +import { Transaction } from './transaction'; +import { VerifyWitnesses } from './Verifiable'; -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[]; -} +// tslint:disable-next-line: no-any TODO: implement something here +type CallReceipt = any; export interface Blockchain extends BlockchainStorage { - readonly settings: Settings; + readonly settings: BlockchainSettings; readonly deserializeWireContext: DeserializeWireContext; readonly serializeJSONContext: SerializeJSONContext; - readonly feeContext: FeeContext; + // readonly feeContext: FeeContext; readonly currentBlock: Block; readonly previousBlock: Block | undefined; - readonly currentHeader: Header; + readonly currentHeaderIndex: Header; readonly currentBlockIndex: number; readonly block$: Observable; readonly isPersistingBlock: boolean; @@ -140,49 +26,12 @@ export interface Blockchain extends BlockchainStorage { readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; readonly persistHeaders: (headers: readonly Header[]) => Promise; - readonly verifyBlock: (block: Block) => Promise; - readonly verifyTransaction: (param0: { - readonly transaction: Transaction; - readonly memPool?: readonly Transaction[]; - }) => Promise; - readonly verifyConsensusPayload: (payload: ConsensusPayload) => Promise; - - readonly getValidators: (transactions: readonly Transaction[]) => Promise; + readonly verifyWitnesses: VerifyWitnesses; readonly invokeScript: (script: Buffer) => Promise; - readonly invokeTransaction: (transaction: InvocationTransaction) => Promise; - readonly calculateClaimAmount: (inputs: readonly Input[]) => Promise; + readonly invokeTransaction: (transaction: Transaction) => Promise; - readonly updateSettings: (settings: Settings) => void; + 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-csharp-core/src/CallFlags.ts b/packages/neo-one-node-core/src/CallFlags.ts similarity index 100% rename from packages/neo-one-csharp-core/src/CallFlags.ts rename to packages/neo-one-node-core/src/CallFlags.ts 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 index 7dad0476b2..33dcfc903f 100644 --- a/packages/neo-one-node-core/src/ConsensusData.ts +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -1,5 +1,6 @@ import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; +import { DEFAULT_VALIDATORS_COUNT } from './constants'; import { createSerializeWire, DeserializeWireBaseOptions, @@ -9,18 +10,15 @@ import { } from './Serializable'; import { utils } from './utils'; -// TODO: could put this somewhere else it is possible it changes? -const defaultValidatorsCount = new BN(7); - export interface ConsensusDataAdd { readonly primaryIndex: number; readonly nonce: BN; } -export class ConsensusData implements SerializableWire, SerializableJSON { +export class ConsensusData implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusData { const { reader } = options; - const primaryIndex = reader.readVarUIntLE(defaultValidatorsCount.subn(1)).toNumber(); + const primaryIndex = reader.readVarUIntLE(DEFAULT_VALIDATORS_COUNT.subn(1)).toNumber(); const nonce = reader.readUInt64LE(); return new this({ 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-csharp-core/src/ContractIDState.ts b/packages/neo-one-node-core/src/ContractIDState.ts similarity index 100% rename from packages/neo-one-csharp-core/src/ContractIDState.ts rename to packages/neo-one-node-core/src/ContractIDState.ts 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-csharp-core/src/ContractState.ts b/packages/neo-one-node-core/src/ContractState.ts similarity index 100% rename from packages/neo-one-csharp-core/src/ContractState.ts rename to packages/neo-one-node-core/src/ContractState.ts diff --git a/packages/neo-one-csharp-core/src/HashIndexState.ts b/packages/neo-one-node-core/src/HashIndexState.ts similarity index 100% rename from packages/neo-one-csharp-core/src/HashIndexState.ts rename to packages/neo-one-node-core/src/HashIndexState.ts diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index d67b1aa27d..67af61e079 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -12,7 +12,7 @@ import { BinaryReader, utils } from './utils'; export type HeaderAdd = BlockBaseAdd; -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.deserializeWireBase(options); diff --git a/packages/neo-one-csharp-core/src/HeaderHashList.ts b/packages/neo-one-node-core/src/HeaderHashList.ts similarity index 100% rename from packages/neo-one-csharp-core/src/HeaderHashList.ts rename to packages/neo-one-node-core/src/HeaderHashList.ts 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 bde00a52aa..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]; - }); - const voteUpdates = reader.readArray]>(() => { - const address = reader.readUInt160(); - const votes = reader.readArray(() => reader.readECPoint()); - - return [address, votes]; - }); - 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/Node.ts b/packages/neo-one-node-core/src/Node.ts index b6bb231e04..29c204ba9e 100644 --- a/packages/neo-one-node-core/src/Node.ts +++ b/packages/neo-one-node-core/src/Node.ts @@ -1,3 +1,4 @@ +import { VersionJSON } from '@neo-one/client-common'; import { Block } from './Block'; import { Blockchain, VerifyTransactionResult } from './Blockchain'; import { Endpoint } from './net'; @@ -19,16 +20,12 @@ export interface RelayTransactionResult { } export interface Node { + readonly version: VersionJSON; readonly blockchain: Blockchain; readonly relayTransaction: ( transaction: Transaction, options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, ) => Promise; - readonly relayStrippedTransaction: ( - verificationTransaction: Transaction, - relayTransaction: Transaction, - options?: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean }, - ) => Promise; readonly relayConsensusPayload: (payload: ConsensusPayload) => void; readonly relayBlock: (block: Block) => Promise; readonly connectedPeers: readonly Endpoint[]; 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 ad72a127fd..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/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 5b0fd0e2a5..5b5aa30056 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -1,9 +1,9 @@ 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 { Action } from './action'; +// import { Asset } from './Asset'; +// import { Contract } from './Contract'; +// import { InvocationResult } from './invocationResult'; +// import { StorageChange } from './storageChange'; import { BinaryReader } from './utils'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/Settings.ts b/packages/neo-one-node-core/src/Settings.ts index ee4290015f..76ea62d9e9 100644 --- a/packages/neo-one-node-core/src/Settings.ts +++ b/packages/neo-one-node-core/src/Settings.ts @@ -1,30 +1,32 @@ import { ECPoint } from '@neo-one/client-common'; -import { BN } from 'bn.js'; import { Block } from './Block'; -import { RegisterTransaction, TransactionType } from './transaction'; +import { BlockchainStorage } from './Storage'; -export interface VMSettings { - readonly storageContext: { - readonly v0: { - readonly index: number; - }; - }; -} - -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 string[]; + readonly committeeMembersCount: number; + readonly validatorsCount: number; + readonly millisecondsPerBlock: number; + readonly memoryPoolMaxTransactions: number; +} + +export interface PolicySettings { + readonly getMaxBlockSize: (storages: BlockchainStorage['storages']) => Promise; + readonly getMaxTransactionsPerBlock: (storages: BlockchainStorage['storages']) => Promise; + readonly getMaxBlockSystemFee: (storages: BlockchainStorage['storages']) => Promise; + readonly getValidators: (storages: BlockchainStorage['storages']) => Promise; +} + +export interface NetworkSettings { + readonly seeds: readonly string[]; +} diff --git a/packages/neo-one-csharp-core/src/StackItems/StackItem.ts b/packages/neo-one-node-core/src/StackItems/StackItem.ts similarity index 100% rename from packages/neo-one-csharp-core/src/StackItems/StackItem.ts rename to packages/neo-one-node-core/src/StackItems/StackItem.ts diff --git a/packages/neo-one-csharp-core/src/StackItems/StackItemType.ts b/packages/neo-one-node-core/src/StackItems/StackItemType.ts similarity index 100% rename from packages/neo-one-csharp-core/src/StackItems/StackItemType.ts rename to packages/neo-one-node-core/src/StackItems/StackItemType.ts diff --git a/packages/neo-one-csharp-core/src/StackItems/index.ts b/packages/neo-one-node-core/src/StackItems/index.ts similarity index 100% rename from packages/neo-one-csharp-core/src/StackItems/index.ts rename to packages/neo-one-node-core/src/StackItems/index.ts diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 4547444c5c..0b31fa8dcf 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -1,77 +1,124 @@ -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 { Observable } from 'rxjs'; +import { ContractIDState } from './ContractIDState'; +import { ContractKey, ContractState } from './ContractState'; +import { HashIndexState } from './HashIndexState'; +import { HeaderHashList, HeaderKey } from './HeaderHashList'; +import { StorageItem } from './StorageItem'; +import { StorageKey } from './StorageKey'; +import { TransactionKey, TransactionState } from './transaction'; +import { BlockKey, TrimmedBlock } from './TrimmedBlock'; + +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?: Partial) => Observable; +} + +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 ReadGetAllAddDeleteStorage extends ReadGetAllStorage, AddDeleteStorage {} +interface ReadAllAddStorage extends ReadAllStorage, AddStorage {} +interface ReadAllAddUpdateDeleteStorage + extends ReadAllStorage, + AddUpdateDeleteStorage {} + +interface ReadGetAllAddStorage extends ReadGetAllStorage, AddStorage {} +interface ReadGetAllAddUpdateDeleteStorage + extends ReadGetAllStorage, + AddUpdateDeleteStorage {} + +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 }; + 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 }; + 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 transactions: ReadStorage; + readonly contracts: ReadStorage; + readonly storages: ReadStorage; + 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: ReadGetAllStorage; + readonly headerHashList: ReadGetAllStorage; readonly commit: (changeSet: ChangeSet) => 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..17e9cb670c 100644 --- a/packages/neo-one-node-core/src/StorageItem.ts +++ b/packages/neo-one-node-core/src/StorageItem.ts @@ -1,59 +1,34 @@ -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 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from './Serializable'; +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 +39,62 @@ 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 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 set value(value: Buffer) { + this.mutableValue = value; + this.mutableCache = undefined; } - public get size(): number { - return this.sizeInternal(); + public set(integer: BN) { + this.mutableCache = integer; + this.mutableValue = undefined; } - public update({ value, flags }: StorageItemUpdate): StorageItem { - return new StorageItem({ - hash: this.hash, - key: this.key, - value, - flags, - }); + 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 serializeJSON(_context: SerializeJSONContext): StorageItemJSON { - return { - hash: JSONHelper.writeUInt160(this.hash), - key: JSONHelper.writeBuffer(this.key), - value: JSONHelper.writeBuffer(this.value), - flags: toJSONStorageFlags(this.flags), - }; + public clone() { + return new StorageItem({ + value: this.value, + isConstant: this.isConstant, + }); } } diff --git a/packages/neo-one-csharp-core/src/StorageKey.ts b/packages/neo-one-node-core/src/StorageKey.ts similarity index 100% rename from packages/neo-one-csharp-core/src/StorageKey.ts rename to packages/neo-one-node-core/src/StorageKey.ts diff --git a/packages/neo-one-node-core/src/TrimmedBlock.ts b/packages/neo-one-node-core/src/TrimmedBlock.ts index e51e16d606..ab75c19cbc 100644 --- a/packages/neo-one-node-core/src/TrimmedBlock.ts +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -4,7 +4,6 @@ import { IOHelper, JSONHelper, SerializableWire, - Transaction, TrimmedBlockJSON, UInt256, } from '@neo-one/client-common'; @@ -12,15 +11,21 @@ import { Block } from './Block'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { ConsensusData } from './ConsensusData'; import { Header } from './Header'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from './Serializable'; -import { utils } from './utils'; +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 class TrimmedBlock extends BlockBase implements SerializableWire { +export interface BlockKey { + readonly hashOrIndex: UInt256 | number; +} + +export class TrimmedBlock extends BlockBase implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { const { version, @@ -30,7 +35,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire>(cache: Cache) { + public async getBlock(storage: ReadStorage) { return new Block({ version: this.version, previousHash: this.previousHash, @@ -91,7 +103,13 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { + const state = await storage.get(hash); + + return state.transaction; + }), + ), }); } 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 index 4409dfbb77..920f34fa33 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -1,131 +1,17 @@ -import { BinaryWriter, common, ContractMethodDescriptor, UInt160, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Contract } from './Contract'; -import { Header } from './Header'; -import { StorageItem } from './StorageItem'; -import { TrimmedBlock } from './TrimmedBlock'; -import { BinaryReader } from './utils'; +import { UInt160 } from '@neo-one/client-common'; +import { BlockchainStorage } from './Storage'; import { Witness } from './Witness'; -const maxVerificationGas = common.fixed8FromDecimal(0.5); - -export interface SnapshotMethods { - readonly tryGetBlock: (hash: UInt256) => Promise; - readonly tryGetHeader: (hash: UInt256) => Promise
; - readonly tryGetContract: (hash: UInt160) => Promise; - readonly tryGetStorage: (key: StorageKey) => Promise; -} - export interface Verifiable { - readonly getScriptHashesForVerifying: (snapshot: SnapshotMethods) => Promise; + readonly getScriptHashesForVerifying: ( + storage: BlockchainStorage, + ) => Promise | readonly UInt160[]; readonly witnesses: readonly Witness[]; } export interface VerifyResult { - readonly gas: BN; + readonly gas: number; readonly result: boolean; } -export const verifyWithApplicationEngine = ( - verifiable: Verifiable, - verification: Buffer, - index: number, - gas: BN, - offset: number, - init?: ContractMethodDescriptor, -): VerifyResult => - withApplicationEngine({ trigger: TriggerType.Verification, verifiable, snapshot: true, gas }, (engine) => { - engine.loadScript(verification, CallFlags.None); - engine.setInstructionPointer(offset); - if (init !== undefined) { - engine.loadClonedContext(init.offset); - } - engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); - - const state = engine.execute(); - if (state === 'FAULT') { - return { result: false, gas }; - } - - const stack = engine.resultStack; - if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { - return { result: false, gas }; - } - - return { result: true, gas: gas.sub(engine.gasConsumed) }; - }); - -export const tryVerifyHash = async ( - hash: UInt160, - index: number, - snapshot: SnapshotMethods, - verifiable: Verifiable, - gas: BN, -): Promise => { - const verificationScript = verifiable.witnesses[index].verification; - if (verificationScript.length === 0) { - const contractState = await snapshot.tryGetContract(hash); - if (contractState === undefined) { - return { result: false, gas }; - } - const methodDescriptor = contractState.manifest.abi.getMethod('verify'); - if (methodDescriptor === undefined) { - return { result: false, gas }; - } - - const verification = contractState.script; - const offset = methodDescriptor.offset; - const init = contractState.manifest.abi.getMethod('_initialize'); - - return verifyWithApplicationEngine(verifiable, verification, index, gas, offset, init); - } - - if (hash !== verifiable.witnesses[index].scriptHash) { - return { result: false, gas }; - } - - return verifyWithApplicationEngine(verifiable, verificationScript, index, gas, 0); -}; - -export const verifyWitnesses = async ( - verifiable: Verifiable, - snapshot: SnapshotMethods, - 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(snapshot); - } catch { - return false; - } - - if (hashes.length !== verifiable.witnesses.length) { - return false; - } - - const { next, previous } = hashes - .slice(1) - .reduce<{ readonly next: Promise; readonly previous: boolean }>( - async (acc, hash, index) => { - const { result, gas: newGas } = await acc.next; - if (!result) { - return { - next: Promise.resolve({ result: false, gas: newGas }), - previous: false, - }; - } - - return { - next: tryVerifyHash(hash, index, snapshot, verifiable, newGas), - previous: acc.previous && result, - }; - }, - { next: tryVerifyHash(hashes[0], 0, snapshot, verifiable, gas), previous: true }, - ); -}; +export type VerifyWitnesses = (verifiable: Verifiable, storage: BlockchainStorage, gasIn: number) => Promise; diff --git a/packages/neo-one-node-core/src/Witness.ts b/packages/neo-one-node-core/src/Witness.ts index 46459b5c8c..9ff1e6b143 100644 --- a/packages/neo-one-node-core/src/Witness.ts +++ b/packages/neo-one-node-core/src/Witness.ts @@ -1,4 +1,5 @@ import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; +import { WITNESS_INVOCATION_SIZE, WITNESS_VERIFICATION_SIZE } from './constants'; import { DeserializeWireBaseOptions, DeserializeWireOptions, @@ -12,15 +13,11 @@ export interface WitnessAdd { readonly invocation: Buffer; } -// TODO: put these somewhere else https://github.com/neo-project/neo/blob/master/src/neo/Network/P2P/Payloads/Witness.cs -const invocationSize = 663; -const verificationSize = 361; - export class Witness extends WitnessModel implements SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Witness { const { reader } = options; - const invocation = reader.readVarBytesLE(invocationSize); - const verification = reader.readVarBytesLE(verificationSize); + const invocation = reader.readVarBytesLE(WITNESS_INVOCATION_SIZE); + const verification = reader.readVarBytesLE(WITNESS_VERIFICATION_SIZE); return new Witness({ invocation, diff --git a/packages/neo-one-node-core/src/__tests__/newBlock.ts b/packages/neo-one-node-core/src/__tests__/newBlock.ts deleted file mode 100644 index 4dc4beda0d..0000000000 --- a/packages/neo-one-node-core/src/__tests__/newBlock.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Block } from '../Block'; -import { Witness } from '../Witness'; -import { common } from '@neo-one/client-common'; - -const tx = new Transaction({ - script: Buffer.from([0x01]), - attributes: [], - signers: [], - networkFee: 0x02, - systemFee: 0x03, - nonce: 0x04, - validUntilBlock: 0x05, - version: 0x06, - witness: new Witness({ verification: Buffer.from([0x07]), invocation: Buffer.from([]) }), -}); - -const block = new Block({ - index: 0, - timestamp: 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: 1, - primaryIndex: 1, - }), - transactions: [tx], -}); 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/constants.ts b/packages/neo-one-node-core/src/constants.ts index ee40566535..dc2757deb3 100644 --- a/packages/neo-one-node-core/src/constants.ts +++ b/packages/neo-one-node-core/src/constants.ts @@ -1,2 +1,6 @@ -// tslint:disable-next-line export-name +import { BN } from 'bn.js'; + export const MAX_TRANSACTION_SIZE = 102400; +export const DEFAULT_VALIDATORS_COUNT = new BN(7); +export const WITNESS_INVOCATION_SIZE = 663; +export const WITNESS_VERIFICATION_SIZE = 361; 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 c39bb3628c..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts +++ /dev/null @@ -1,48 +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), - ]), - }; - } -} 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 596fe3f742..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]); - 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))]); - } else if (byte === Op.JMP || byte === Op.JMPIF || byte === Op.JMPIFNOT || byte === Op.CALL) { - mutableResult.push([pc, opCode, `${reader.readInt16LE()}`]); - } else if (byte === Op.APPCALL || byte === Op.TAILCALL) { - const mutableAppBytes = [...reader.readBytes(20)]; - mutableAppBytes.reverse(); - mutableResult.push([pc, opCode, createHexString(Buffer.from(mutableAppBytes))]); - } else if (byte === Op.SYSCALL) { - mutableResult.push([pc, opCode, utils.toASCII(reader.readVarBytesLE(252))]); - // 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), - )}`, - ]); - } 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) - }`, - ]); - } else { - mutableResult.push([pc, opCode, undefined]); - } - } - - 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/index.ts b/packages/neo-one-node-core/src/index.ts index cf049c6b52..67ce78732c 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -1,39 +1,28 @@ -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 './Blockchain'; -export * from './CallReceipt'; export * from './ConsensusData'; -export * from './Contract'; -export * from './ContractPropertyState'; +export * from './manifest'; +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 './Serializable'; export * from './Settings'; +export * from './Signer'; export * from './Storage'; -export * from './StorageFlags'; export * from './StorageItem'; -export * from './TrimmedBlock'; -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 './TrimmedBlock'; export * from './utils'; +export * from './Verifiable'; export * from './vm'; +export * from './Witness'; +export * from './CallFlags'; +export * from './TransactionData'; +export * from './Node'; 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 7536dc6ccd..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 77d1dea23e..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 8b5c4b7bd2..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-csharp-core/src/manifest/ContractABI.ts b/packages/neo-one-node-core/src/manifest/ContractABI.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractABI.ts rename to packages/neo-one-node-core/src/manifest/ContractABI.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractEventDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractEventDescriptor.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractEventDescriptor.ts rename to packages/neo-one-node-core/src/manifest/ContractEventDescriptor.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractGroup.ts b/packages/neo-one-node-core/src/manifest/ContractGroup.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractGroup.ts rename to packages/neo-one-node-core/src/manifest/ContractGroup.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractManifest.ts b/packages/neo-one-node-core/src/manifest/ContractManifest.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractManifest.ts rename to packages/neo-one-node-core/src/manifest/ContractManifest.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractMethodDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractMethodDescriptor.ts rename to packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractParameterDefinition.ts b/packages/neo-one-node-core/src/manifest/ContractParameterDefinition.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractParameterDefinition.ts rename to packages/neo-one-node-core/src/manifest/ContractParameterDefinition.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractPermission.ts b/packages/neo-one-node-core/src/manifest/ContractPermission.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractPermission.ts rename to packages/neo-one-node-core/src/manifest/ContractPermission.ts diff --git a/packages/neo-one-csharp-core/src/manifest/ContractPermissionDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/ContractPermissionDescriptor.ts rename to packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts diff --git a/packages/neo-one-csharp-core/src/manifest/index.ts b/packages/neo-one-node-core/src/manifest/index.ts similarity index 100% rename from packages/neo-one-csharp-core/src/manifest/index.ts rename to packages/neo-one-node-core/src/manifest/index.ts diff --git a/packages/neo-one-node-core/src/net/ConnectedPeer.ts b/packages/neo-one-node-core/src/net/ConnectedPeer.ts deleted file mode 100644 index 9d3e85e3e7..0000000000 --- a/packages/neo-one-node-core/src/net/ConnectedPeer.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Peer } from './Peer'; -import { Endpoint } from './types'; - -interface ConnectedPeerOptions { - readonly peer: Peer; - readonly data: PeerData; - readonly relay: boolean; -} - -export class ConnectedPeer { - public readonly data: PeerData; - public readonly peer: Peer; - public readonly relay: boolean; - - public constructor(options: ConnectedPeerOptions) { - this.data = options.data; - this.peer = options.peer; - this.relay = options.relay; - } - - public get endpoint(): Endpoint { - return this.peer.endpoint; - } - - public get connected(): boolean { - return this.peer.connected; - } - - public close(): void { - this.peer.close(); - } - - public write(buffer: Buffer): void { - this.peer.write(buffer); - } -} diff --git a/packages/neo-one-node-core/src/net/Network.ts b/packages/neo-one-node-core/src/net/Network.ts deleted file mode 100644 index 6001c7383a..0000000000 --- a/packages/neo-one-node-core/src/net/Network.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Duplex } from 'stream'; -import { ConnectedPeer } from './ConnectedPeer'; -import { OnNetworkEvent } from './event'; -import { Peer } from './Peer'; -import { Endpoint } from './types'; - -export interface PeerHealthBase { - readonly healthy: boolean; -} - -export interface NegotiateResult { - readonly data: PeerData; - readonly relay: boolean; -} - -export interface Network { - readonly connectedPeers: ReadonlyArray>; - readonly blacklistAndClose: (peer: ConnectedPeer) => void; - readonly start: () => void; - readonly stop: () => void; - readonly relay: (buffer: Buffer) => void; - readonly permanentlyBlacklist: (endpoint: Endpoint) => void; - readonly addEndpoint: (endpoint: Endpoint) => void; -} - -export interface NetworkCreateOptions { - readonly negotiate: (peer: Peer) => Promise>; - readonly checkPeerHealth: ( - connectedPeer: ConnectedPeer, - previousHealth?: PeerHealth, - ) => PeerHealth; - readonly createMessageTransform: () => Duplex; - readonly onMessageReceived: (peer: ConnectedPeer, message: Message) => void; - readonly onRequestEndpoints: () => void; - readonly onEvent?: OnNetworkEvent; -} - -export type CreateNetwork = ( - options: NetworkCreateOptions, -) => Network; diff --git a/packages/neo-one-node-core/src/net/Peer.ts b/packages/neo-one-node-core/src/net/Peer.ts deleted file mode 100644 index 71fac662c9..0000000000 --- a/packages/neo-one-node-core/src/net/Peer.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { Duplex } from 'stream'; -import through from 'through'; -import { ReceiveMessageTimeoutError } from '../errors'; -import { Endpoint } from './types'; - -export interface PeerOptions { - readonly endpoint: Endpoint; - readonly stream: Duplex; - readonly transform: Duplex; - readonly onError: (peer: Peer, error: Error) => void; - readonly onClose: (peer: Peer) => void; -} - -export abstract class Peer { - public readonly endpoint: Endpoint; - private readonly stream: Duplex; - private readonly transform: Duplex; - private readonly buffer: Duplex; - private mutableConnected: boolean; - private mutableConnecting: boolean; - private mutableClosed: boolean; - private readonly onErrorInternal: (peer: Peer, error: Error) => void; - private readonly onCloseInternal: (peer: Peer) => void; - - public constructor(options: PeerOptions) { - this.endpoint = options.endpoint; - this.mutableConnected = false; - - this.stream = options.stream; - this.transform = options.transform; - this.buffer = through(); - - this.mutableConnecting = false; - this.mutableClosed = false; - - this.onErrorInternal = options.onError; - this.onCloseInternal = options.onClose; - - this.transform.on('error', this.onError.bind(this)); - this.buffer.on('error', this.onError.bind(this)); - this.buffer.pause(); - this.stream.pipe(this.transform).pipe(this.buffer); - } - - public get connected(): boolean { - return this.mutableConnected; - } - - public async connect(): Promise { - if (this.mutableConnecting || this.mutableConnected) { - return; - } - this.mutableConnecting = true; - this.mutableClosed = false; - - try { - await this.connectInternal(); - this.stream.on('error', this.onError.bind(this)); - this.stream.on('close', this.onClose.bind(this)); - this.mutableConnected = true; - } finally { - this.mutableConnecting = false; - } - } - - public close(hadError?: boolean): void { - if (this.mutableClosed) { - return; - } - this.mutableClosed = true; - - if (!this.mutableConnecting && !this.mutableConnected) { - return; - } - this.mutableConnecting = false; - this.mutableConnected = false; - - this.closeInternal(!!hadError); - this.stream.unpipe(this.transform); - this.transform.unpipe(this.buffer); - this.transform.end(); - this.buffer.end(); - } - - public write(buffer: Buffer): void { - if (!this.mutableConnected || this.mutableClosed) { - return; - } - - try { - this.stream.write(buffer); - } catch (error) { - this.onError(error); - } - } - - public async receiveMessage(timeoutMS?: number): Promise { - return new Promise((resolve, reject) => { - let handled = false; - const cleanup = () => { - this.buffer.pause(); - handled = true; - // eslint-disable-next-line - this.stream.removeListener('error', onError); - // eslint-disable-next-line - this.transform.removeListener('error', onError); - // eslint-disable-next-line - this.buffer.removeListener('error', onError); - // eslint-disable-next-line - this.buffer.removeListener('data', onDataReceived); - }; - - const onError = (error: Error) => { - if (!handled) { - cleanup(); - reject(error); - } - }; - - const onDataReceived = (data: Message) => { - if (!handled) { - cleanup(); - resolve(data); - } - }; - - this.stream.once('error', onError); - this.transform.once('error', onError); - this.buffer.once('error', onError); - this.buffer.once('data', onDataReceived); - this.buffer.resume(); - - if (timeoutMS !== undefined) { - setTimeout(() => onError(new ReceiveMessageTimeoutError(this.endpoint)), timeoutMS); - } - }); - } - - public streamData(onDataReceived: (data: Message) => void): { readonly unsubscribe: () => void } { - this.buffer.on('data', onDataReceived); - this.buffer.resume(); - - return { - unsubscribe: () => { - this.buffer.pause(); - this.buffer.removeListener('data', onDataReceived); - }, - }; - } - - protected abstract async connectInternal(): Promise; - protected abstract closeInternal(hadError: boolean): void; - - protected onError(error: Error): void { - this.close(true); - this.onErrorInternal(this, error); - } - - private onClose(): void { - this.mutableClosed = true; - this.onCloseInternal(this); - } -} diff --git a/packages/neo-one-node-core/src/net/event.ts b/packages/neo-one-node-core/src/net/event.ts deleted file mode 100644 index 8217f1b87c..0000000000 --- a/packages/neo-one-node-core/src/net/event.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ConnectedPeer } from './ConnectedPeer'; -import { Peer } from './Peer'; - -export type NetworkEventMessage = - | { - readonly event: 'PEER_CONNECT_SUCCESS'; - readonly connectedPeer: ConnectedPeer; - } - | { - readonly event: 'PEER_CLOSED'; - readonly peer: Peer | ConnectedPeer; - }; - -export type OnNetworkEvent = (event: NetworkEventMessage) => void; diff --git a/packages/neo-one-node-core/src/net/index.ts b/packages/neo-one-node-core/src/net/index.ts deleted file mode 100644 index f59335a958..0000000000 --- a/packages/neo-one-node-core/src/net/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './ConnectedPeer'; -export * from './event'; -export * from './Network'; -export * from './Peer'; -export * from './types'; diff --git a/packages/neo-one-node-core/src/net/types.ts b/packages/neo-one-node-core/src/net/types.ts deleted file mode 100644 index 1bde18d5cc..0000000000 --- a/packages/neo-one-node-core/src/net/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface EndpointConfig { - readonly type: 'tcp'; - readonly host: string; - readonly port: number; -} - -// type:host:port -export type Endpoint = string; - -export const createEndpoint = ({ type, host, port }: EndpointConfig): Endpoint => `${type}://${host}:${port}`; - -export const getEndpointConfig = (endpoint: Endpoint): EndpointConfig => { - const result = /([a-zA-Z]+):\/\/(.*):(\d+)/gu.exec(endpoint); - if (result === null) { - throw new Error(`Invalid endpoint: ${endpoint}`); - } - const [type, host, port] = result.slice(1); - - // tslint:disable-next-line no-any - return { type: type as any, host, port: parseInt(port, 10) }; -}; diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts deleted file mode 100644 index 8d2b1eb06a..0000000000 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { - BinaryWriter, - common, - crypto, - ECPoint, - 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 { BinaryReader, utils } from '../utils'; -import { VerifyScript } from '../vm'; -import { Witness } from '../Witness'; -import { UnsignedConsensusPayload, UnsignedConsensusPayloadAdd } from './UnsignedConsensusPayload'; - -export interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { - readonly script: Witness; -} - -export interface ConsensusPayloadGetScriptHashesForVerifyingOptions { - readonly getValidators: () => Promise; - readonly currentBlockHash: UInt256; -} - -export interface ConsensusPayloadVerifyOptions extends ConsensusPayloadGetScriptHashesForVerifyingOptions { - readonly currentIndex: number; - readonly verifyScript: VerifyScript; -} - -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), - }); - } - - public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusPayload { - const { reader } = 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()}`); - } - const script = Witness.deserializeWireBase(options); - - return new this({ - version, - previousHash, - blockIndex, - validatorIndex, - timestamp, - consensusMessage, - script, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): ConsensusPayload { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - 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, - }); - - this.script = script; - } - - public get hash(): UInt256 { - return this.hashInternal(); - } - - public get hashHex(): UInt256Hex { - return this.hashHexInternal(); - } - - public get message(): Buffer { - return this.messageInternal(); - } - - public serializeUnsigned(): Buffer { - const writer = new BinaryWriter(); - super.serializeWireBase(writer); - - return writer.toBuffer(); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt8(1); - this.script.serializeWireBase(writer); - } - - public async verify({ - verifyScript, - getValidators, - currentBlockHash, - currentIndex, - }: ConsensusPayloadVerifyOptions): Promise { - if (this.blockIndex !== currentIndex + 1) { - throw new VerifyError('Invalid block index.'); - } - - 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); - } - }); - } -} diff --git a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts deleted file mode 100644 index f0d9290b94..0000000000 --- a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { BinaryWriter, UInt256 } from '@neo-one/client-common'; -import { utils as commonUtils } from '@neo-one/utils'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { ConsensusMessage, deserializeConsensusMessageWire } from './message'; - -export interface UnsignedConsensusPayloadAdd { - readonly version: number; - readonly previousHash: UInt256; - readonly blockIndex: number; - readonly validatorIndex: number; - readonly timestamp?: number; - readonly consensusMessage: ConsensusMessage; -} - -export class UnsignedConsensusPayload implements SerializableWire { - public static readonly deserializeUnsignedConsensusPayloadWireBase = (options: DeserializeWireBaseOptions) => { - 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, - }); - - return { - version, - previousHash, - blockIndex, - validatorIndex, - timestamp, - consensusMessage, - }; - }; - - public static deserializeWireBase(options: DeserializeWireBaseOptions): UnsignedConsensusPayload { - return new this(this.deserializeUnsignedConsensusPayloadWireBase(options)); - } - - public static deserializeWire(options: DeserializeWireOptions): UnsignedConsensusPayload { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly version: number; - public readonly previousHash: UInt256; - public readonly blockIndex: number; - public readonly validatorIndex: number; - public readonly timestamp: number; - public readonly consensusMessage: ConsensusMessage; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public constructor({ - version, - previousHash, - blockIndex, - validatorIndex, - timestamp, - consensusMessage, - }: UnsignedConsensusPayloadAdd) { - this.version = version; - this.previousHash = previousHash; - this.blockIndex = blockIndex; - this.validatorIndex = validatorIndex; - this.timestamp = timestamp === undefined ? commonUtils.nowSeconds() : timestamp; - this.consensusMessage = consensusMessage; - } - - public serializeWireBase(writer: BinaryWriter): void { - 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()); - } -} diff --git a/packages/neo-one-node-core/src/payload/index.ts b/packages/neo-one-node-core/src/payload/index.ts deleted file mode 100644 index 4babbf95b9..0000000000 --- a/packages/neo-one-node-core/src/payload/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './ConsensusPayload'; -export * from './UnsignedConsensusPayload'; -export * from './message'; diff --git a/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts deleted file mode 100644 index 5346109cf1..0000000000 --- a/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { BinaryWriter, InvalidFormatError } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions } from '../../Serializable'; -import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; -import { ConsensusMessageType } from './ConsensusMessageType'; - -export interface ChangeViewAdd extends ConsensusMessageBaseAdd { - readonly newViewNumber: number; -} - -export class ChangeViewConsensusMessage extends ConsensusMessageBase< - ChangeViewConsensusMessage, - ConsensusMessageType.ChangeView -> { - 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}`); - } - - return new this({ - viewNumber: message.viewNumber, - newViewNumber, - }); - } - - public readonly newViewNumber: number; - - public constructor({ viewNumber, newViewNumber }: ChangeViewAdd) { - const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.ChangeView as ConsensusMessageType.ChangeView, - viewNumber, - }; - super(options); - - this.newViewNumber = newViewNumber; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt8(this.newViewNumber); - } -} diff --git a/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts deleted file mode 100644 index b2a0adf21a..0000000000 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { utils } from '@neo-one/utils'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../../Serializable'; -import { ChangeViewConsensusMessage } from './ChangeViewConsensusMessage'; -import { assertConsensusMessageType, ConsensusMessageType } from './ConsensusMessageType'; -import { PrepareRequestConsensusMessage } from './PrepareRequestConsensusMessage'; -import { PrepareResponseConsensusMessage } from './PrepareResponseConsensusMessage'; - -export type ConsensusMessage = - | ChangeViewConsensusMessage - | PrepareRequestConsensusMessage - | PrepareResponseConsensusMessage; - -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.PrepareRequest: - return PrepareRequestConsensusMessage.deserializeWireBase(options); - case ConsensusMessageType.PrepareResponse: - return PrepareResponseConsensusMessage.deserializeWireBase(options); - default: - utils.assertNever(type); - throw new Error('For TS'); - } -}; - -export const deserializeConsensusMessageWire = createDeserializeWire(deserializeConsensusMessageWireBase); diff --git a/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts b/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts deleted file mode 100644 index e972083c2c..0000000000 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BinaryWriter } from '@neo-one/client-common'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from '../../Serializable'; -import { BinaryReader } from '../../utils'; -import { ConsensusMessageType } from './ConsensusMessageType'; - -export interface ConsensusMessageBaseAdd { - readonly viewNumber: number; -} - -export interface ConsensusMessageBaseAddWithType extends ConsensusMessageBaseAdd { - readonly type: Type; -} - -// tslint:disable-next-line no-any -export class ConsensusMessageBase - implements SerializableWire { - public static readonly VERSION = 0; - public static readonly deserializeConsensusMessageBaseWireBase = ({ reader }: DeserializeWireBaseOptions) => { - const type = reader.readUInt8(); - const viewNumber = reader.readUInt8(); - - return { - type, - viewNumber, - }; - }; - - public static deserializeWireBase(_options: DeserializeWireBaseOptions): ConsensusMessageBase { - throw new Error('Not Implemented'); - } - - public static deserializeWire(options: DeserializeWireOptions): ConsensusMessageBase { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly type: Type; - public readonly viewNumber: number; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public constructor({ type, viewNumber }: ConsensusMessageBaseAddWithType) { - this.type = type; - this.viewNumber = viewNumber; - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - writer.writeUInt8(this.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 deleted file mode 100644 index afa699f5fc..0000000000 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { InvalidConsensusMessageTypeError } from '../../errors'; - -export enum ConsensusMessageType { - ChangeView = 0x00, - PrepareRequest = 0x20, - PrepareResponse = 0x21, -} - -const isConsensusMessageType = (value: number): value is ConsensusMessageType => - // tslint:disable-next-line strict-type-predicates - ConsensusMessageType[value] !== undefined; - -export const assertConsensusMessageType = (value: number): ConsensusMessageType => { - if (isConsensusMessageType(value)) { - return value; - } - throw new InvalidConsensusMessageTypeError(value); -}; diff --git a/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts deleted file mode 100644 index 7afd634d91..0000000000 --- a/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { DeserializeWireBaseOptions } from '../../Serializable'; -import { MinerTransaction } from '../../transaction'; -import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; -import { ConsensusMessageType } from './ConsensusMessageType'; - -export interface PrepareRequestAdd extends ConsensusMessageBaseAdd { - readonly nonce: BN; - readonly nextConsensus: UInt160; - readonly transactionHashes: readonly UInt256[]; - readonly minerTransaction: MinerTransaction; - readonly signature: Buffer; -} - -export class PrepareRequestConsensusMessage extends ConsensusMessageBase< - PrepareRequestConsensusMessage, - ConsensusMessageType.PrepareRequest -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareRequestConsensusMessage { - const { reader } = options; - const message = super.deserializeConsensusMessageBaseWireBase(options); - const nonce = reader.readUInt64LE(); - const nextConsensus = reader.readUInt160(); - const transactionHashes = reader.readArray(() => reader.readUInt256()); - const distinctTransactionHashes = new Set(transactionHashes.map((hash) => common.uInt256ToString(hash))); - - 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, - nonce, - nextConsensus, - transactionHashes, - minerTransaction, - signature, - }); - } - - 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) { - const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.PrepareRequest as ConsensusMessageType.PrepareRequest, - viewNumber, - }; - super(options); - - this.nonce = nonce; - this.nextConsensus = nextConsensus; - this.transactionHashes = transactionHashes; - this.minerTransaction = minerTransaction; - this.signature = signature; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt64LE(this.nonce); - writer.writeUInt160(this.nextConsensus); - writer.writeArray(this.transactionHashes, (value) => { - writer.writeUInt256(value); - }); - this.minerTransaction.serializeWireBase(writer); - writer.writeBytes(this.signature); - } -} diff --git a/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts deleted file mode 100644 index 19d876971e..0000000000 --- a/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { BinaryWriter } 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; -} - -export class PrepareResponseConsensusMessage extends ConsensusMessageBase< - PrepareResponseConsensusMessage, - ConsensusMessageType.PrepareResponse -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareResponseConsensusMessage { - const { reader } = options; - const message = super.deserializeConsensusMessageBaseWireBase(options); - const signature = reader.readBytes(64); - - return new this({ - viewNumber: message.viewNumber, - signature, - }); - } - - public readonly signature: Buffer; - - public constructor({ viewNumber, signature }: PrepareResponseAdd) { - const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.PrepareResponse as ConsensusMessageType.PrepareResponse, - viewNumber, - }; - super(options); - - this.signature = signature; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeBytes(this.signature); - } -} diff --git a/packages/neo-one-node-core/src/payload/message/index.ts b/packages/neo-one-node-core/src/payload/message/index.ts deleted file mode 100644 index ef4714b644..0000000000 --- a/packages/neo-one-node-core/src/payload/message/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './ChangeViewConsensusMessage'; -export * from './ConsensusMessage'; -export * from './ConsensusMessageBase'; -export * from './ConsensusMessageType'; -export * from './PrepareRequestConsensusMessage'; -export * from './PrepareResponseConsensusMessage'; 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/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 29f365bd71..75da776311 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -8,6 +8,7 @@ import { TransactionJSON, TransactionModel, TransactionModelAdd, + TransactionWithInvocationDataJSON, UInt160, } from '@neo-one/client-common'; import { BN } from 'bn.js'; @@ -29,7 +30,7 @@ export type TransactionAdd = TransactionModelAdd; export class Transaction extends TransactionModel - implements SerializableWire, SerializableJSON { + implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { version, @@ -172,13 +173,17 @@ export class Transaction return this.sizeInternal(); } + public getScriptHashesForVerifying(): readonly UInt160[] { + return this.signers.map((signer) => signer.account); + } + public serializeJSON(options: SerializeJSONContext): TransactionJSON { return { hash: JSONHelper.writeUInt256(this.hash), size: this.size, version: this.version, nonce: this.nonce, - sender: scriptHashToAddress(common.uInt160ToString(this.sender)), + sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, sysfee: JSONHelper.writeUInt64LE(this.systemFee), netfee: JSONHelper.writeUInt64LE(this.networkFee), validuntilblock: this.validUntilBlock, @@ -188,4 +193,11 @@ export class Transaction witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), }; } + + public async serializeJSONWithInvocationData( + _options: SerializeJSONContext, + ): Promise { + // TODO: Implement method similar to old InvocationTransaction.serializeJSON(), which includes extra invocation data + return Promise.reject(); + } } diff --git a/packages/neo-one-csharp-core/src/transaction/TransactionState.ts b/packages/neo-one-node-core/src/transaction/TransactionState.ts similarity index 100% rename from packages/neo-one-csharp-core/src/transaction/TransactionState.ts rename to packages/neo-one-node-core/src/transaction/TransactionState.ts diff --git a/packages/neo-one-node-core/src/transaction/index.ts b/packages/neo-one-node-core/src/transaction/index.ts index 348a5f9ebb..63ed6df62a 100644 --- a/packages/neo-one-node-core/src/transaction/index.ts +++ b/packages/neo-one-node-core/src/transaction/index.ts @@ -1,2 +1,3 @@ export * from './Transaction'; +export * from './TransactionState'; export * from './attributes'; diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 91a2449845..35808e0d92 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -1,4 +1,4 @@ -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'; @@ -183,6 +183,22 @@ 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 !== '*') { + // TODO: more descriptive; + throw new InvalidFormatError(); + } + + return '*'; + } + if (Array.isArray(json)) { + return json.map(selector); + } + + throw new InvalidFormatError(); +}; + export const utils = { ...clientUtils, toASCII, @@ -195,4 +211,5 @@ export const utils = { lazyOrValue, weightedAverage, weightedFilter, + wildCardFromJSON, }; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 3249f516c2..71b83f3b28 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,81 +1,70 @@ -import { common, ECPoint, UInt160, UInt256, VMState } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Action } from './action'; +import { SerializableWire, UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; -import { WriteBlockchain } from './Blockchain'; -import { ContractParameter } from './contractParameter'; -import { ScriptContainer } from './ScriptContainer'; -import { Witness } from './Witness'; - -export interface VerifyScriptOptions { - readonly scriptContainer: ScriptContainer; - readonly hash: UInt160; - readonly witness: Witness; -} - -export interface VerifyScriptResult { - readonly failureMessage?: string; - readonly hash: UInt160; - readonly witness: Witness; - readonly actions: readonly Action[]; -} - -export type VerifyScript = (options: VerifyScriptOptions) => Promise; +import { StackItem } from './StackItems'; +import { Transaction } from './transaction'; +import { Verifiable } from './Verifiable'; +import { CallFlags } from './CallFlags'; export enum TriggerType { Verification = 0x00, + System = 0x01, Application = 0x10, } -// Application - -export interface Script { - readonly code: Buffer; -} - -export const NULL_ACTION = { - blockIndex: -1, - blockHash: common.ZERO_UINT256, - transactionIndex: -1, - transactionHash: common.ZERO_UINT256, -}; +export type SnapshotName = 'main' | 'clone'; -export interface ExecutionAction { - readonly blockIndex: number; - readonly blockHash: UInt256; - readonly transactionIndex: number; - readonly transactionHash: UInt256; +export interface ApplicationEngineOptions { + readonly trigger: TriggerType; + readonly container?: Verifiable & SerializableWire; + readonly snapshot?: SnapshotName; + readonly gas: number; + readonly testMode?: boolean; } -export interface ExecuteScriptsResult { +export interface ApplicationEngine { + readonly trigger: TriggerType; + readonly gasConsumed: number; + readonly resultStack: readonly StackItem[]; readonly state: VMState; - readonly stack: readonly ContractParameter[]; - readonly stackAlt: readonly ContractParameter[]; - readonly gasConsumed: BN; - readonly gasCost: BN; - readonly errorMessage?: string; + readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; + readonly execute: () => keyof typeof VMState; + readonly loadClonedContext: (position: number) => boolean; } -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 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; +// tslint:disable-next-line no-any TODO: implement +export type Notification = any; + +export interface ApplicationExecuted { + readonly transaction?: Transaction; + readonly trigger: TriggerType; + readonly state: VMState; + readonly gasConsumed: number; + readonly stack: readonly StackItem[]; + readonly notifications: readonly Notification[]; +} export interface VM { - readonly executeScripts: ExecuteScripts; + readonly withApplicationEngine: ( + options: ApplicationEngineOptions, + func: (engine: ApplicationEngine) => T, + ) => T; + + readonly withSnapshots: ( + func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, + ) => T; } diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs similarity index 94% rename from packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs rename to packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index d2dcbcf944..d50f158946 100644 --- a/packages/neo-one-csharp-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -40,7 +40,8 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) case EngineMethod.loadscript: Script script = new Script((byte[])args.script); - return this._loadScript(script); + CallFlags flag = (CallFlags)((byte)args.flag); + return this._loadScript(script, flag); case EngineMethod.loadclonedcontext: int position = (int)args.position; @@ -91,10 +92,10 @@ private VMState _execute() return this.engine.Execute(); } - private bool _loadScript(Script script) + private bool _loadScript(Script script, CallFlags flag) { this.isEngineInitialized(); - this.engine.LoadScript(script); + this.engine.LoadScript(script, flag); return true; } diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Dispatcher.Snapshot.cs rename to packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Dispatcher.cs rename to packages/neo-one-node-vm/lib/Dispatcher.cs diff --git a/packages/neo-one-csharp-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj similarity index 100% rename from packages/neo-one-csharp-vm/lib/Dispatcher.csproj rename to packages/neo-one-node-vm/lib/Dispatcher.csproj diff --git a/packages/neo-one-csharp-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/ReturnHelpers.cs rename to packages/neo-one-node-vm/lib/ReturnHelpers.cs diff --git a/packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/SnapshotHelpers.cs rename to packages/neo-one-node-vm/lib/SnapshotHelpers.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/DB.cs b/packages/neo-one-node-vm/lib/Storage/Level/DB.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/DB.cs rename to packages/neo-one-node-vm/lib/Storage/Level/DB.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs b/packages/neo-one-node-vm/lib/Storage/Level/Helper.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/Helper.cs rename to packages/neo-one-node-vm/lib/Storage/Level/Helper.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs b/packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/Iterator.cs rename to packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs b/packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/LevelDBException.cs rename to packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs b/packages/neo-one-node-vm/lib/Storage/Level/Native.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/Native.cs rename to packages/neo-one-node-vm/lib/Storage/Level/Native.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs b/packages/neo-one-node-vm/lib/Storage/Level/Options.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/Options.cs rename to packages/neo-one-node-vm/lib/Storage/Level/Options.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs b/packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/ReadOptions.cs rename to packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/Snapshot.cs rename to packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs b/packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Level/WriteBatch.cs rename to packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs b/packages/neo-one-node-vm/lib/Storage/LevelDBStore.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/LevelDBStore.cs rename to packages/neo-one-node-vm/lib/Storage/LevelDBStore.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/Snapshot.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Snapshot.cs rename to packages/neo-one-node-vm/lib/Storage/Snapshot.cs diff --git a/packages/neo-one-csharp-vm/lib/Storage/Store.cs b/packages/neo-one-node-vm/lib/Storage/Store.cs similarity index 100% rename from packages/neo-one-csharp-vm/lib/Storage/Store.cs rename to packages/neo-one-node-vm/lib/Storage/Store.cs diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 5ade0a1f0f..23600e791c 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,9 +1,8 @@ { "name": "@neo-one/node-vm", "version": "2.7.0", - "description": "NEO•ONE NEO VM.", + "description": "NEO•ONE C# Wrapper for neo3 VM", "main": "./dist/cjs/index", - "module": "./dist/esm/index", "scripts": { "build": "gulp", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", @@ -13,23 +12,17 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-full-common": "^2.7.0", + "@neo-one/edge": "^15.0.0", "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", - "@reactivex/ix-es2015-cjs": "^2.5.3", - "@reactivex/ix-esnext-esm": "^2.5.3", - "@types/bn.js": "^4.11.5", - "bitwise": "^2.0.3", - "bn.js": "^5.0.0", - "lodash": "^4.17.15", - "rxjs": "^6.5.3", - "tslib": "^1.10.0" + "@neo-one/client-common": "^2.7.0", + "bn.js": "^5.0.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "gulp": "~4.0.2" + "gulp": "~4.0.2", + "lodash": "^4.17.15", + "tslib": "^1.10.0" } } diff --git a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts similarity index 92% rename from packages/neo-one-csharp-vm/src/ApplicationEngine.ts rename to packages/neo-one-node-vm/src/ApplicationEngine.ts index fcfea8fd85..31f5f3ffb7 100644 --- a/packages/neo-one-csharp-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,5 +1,5 @@ import { common, VMState } from '@neo-one/client-common'; -import { SnapshotName, TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; import { EngineMethods } from './Methods'; @@ -80,11 +80,12 @@ export class ApplicationEngine { }); } - public loadScript(script: Buffer) { + public loadScript(script: Buffer, flag = CallFlags.All) { return this.dispatch({ method: 'loadscript', args: { script, + flag, }, }); } diff --git a/packages/neo-one-csharp-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts similarity index 97% rename from packages/neo-one-csharp-vm/src/Dispatcher.ts rename to packages/neo-one-node-vm/src/Dispatcher.ts index a482b0a8a6..e7ae791e4d 100644 --- a/packages/neo-one-csharp-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -37,9 +37,7 @@ export class Dispatcher { const main = new SnapshotHandler(this, 'main'); const clone = new SnapshotHandler(this, 'clone'); - const result = func({ main, clone }); - - return result; + return func({ main, clone }); } public withApplicationEngine(options: CreateOptions, func: (engine: Omit) => T) { diff --git a/packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts b/packages/neo-one-node-vm/src/Methods/BaseMethods.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/Methods/BaseMethods.ts rename to packages/neo-one-node-vm/src/Methods/BaseMethods.ts diff --git a/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts similarity index 88% rename from packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts rename to packages/neo-one-node-vm/src/Methods/EngineMethods.ts index fad0d65cdd..dbd6353e84 100644 --- a/packages/neo-one-csharp-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,5 +1,5 @@ import { VMState } from '@neo-one/client-common'; -import { SnapshotName, TriggerType, Verifiable } from '@neo-one/csharp-core'; +import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; import { StackItemReturn } from '../StackItems'; import { DefaultMethods, DispatchMethod } from '../types'; @@ -22,5 +22,5 @@ export interface EngineMethods extends DefaultMethods { // methods readonly execute: DispatchMethod; readonly loadclonedcontext: DispatchMethod; - readonly loadscript: DispatchMethod; + readonly loadscript: DispatchMethod; } diff --git a/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts similarity index 95% rename from packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts rename to packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts index 409e85ad46..7a4a8ca6bc 100644 --- a/packages/neo-one-csharp-vm/src/Methods/SnapshotMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts @@ -1,5 +1,5 @@ import { UInt256, VMState } from '@neo-one/client-common'; -import { SnapshotName, SnapshotPartial } from '@neo-one/csharp-core'; +import { SnapshotName, SnapshotPartial } from '@neo-one/node-core'; import { DefaultMethods, DispatchMethod } from '../types'; interface SnapshotChoice { diff --git a/packages/neo-one-csharp-vm/src/Methods/common.ts b/packages/neo-one-node-vm/src/Methods/common.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/Methods/common.ts rename to packages/neo-one-node-vm/src/Methods/common.ts diff --git a/packages/neo-one-csharp-vm/src/Methods/index.ts b/packages/neo-one-node-vm/src/Methods/index.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/Methods/index.ts rename to packages/neo-one-node-vm/src/Methods/index.ts diff --git a/packages/neo-one-csharp-vm/src/SnapshotHandler.ts b/packages/neo-one-node-vm/src/SnapshotHandler.ts similarity index 98% rename from packages/neo-one-csharp-vm/src/SnapshotHandler.ts rename to packages/neo-one-node-vm/src/SnapshotHandler.ts index e76ef0f4c5..9137468a98 100644 --- a/packages/neo-one-csharp-vm/src/SnapshotHandler.ts +++ b/packages/neo-one-node-vm/src/SnapshotHandler.ts @@ -1,5 +1,5 @@ import { UInt256, VMState } from '@neo-one/client-common'; -import { Block, SnapshotName, SnapshotPartial, Transaction } from '@neo-one/csharp-core'; +import { Block, SnapshotName, SnapshotPartial, Transaction } from '@neo-one/node-core'; import { SnapshotMethods } from './Methods'; import { DispatcherFunc } from './types'; diff --git a/packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts b/packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts similarity index 97% rename from packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts rename to packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts index cdc66cc6cb..9adba36b31 100644 --- a/packages/neo-one-csharp-vm/src/StackItems/StackItemReturn.ts +++ b/packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts @@ -1,4 +1,4 @@ -import { StackItemType } from '@neo-one/csharp-core'; +import { StackItemType } from '@neo-one/node-core'; export interface StackItemReturnBase { readonly Type: keyof typeof StackItemType; diff --git a/packages/neo-one-csharp-vm/src/StackItems/index.ts b/packages/neo-one-node-vm/src/StackItems/index.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/StackItems/index.ts rename to packages/neo-one-node-vm/src/StackItems/index.ts diff --git a/packages/neo-one-csharp-vm/src/StackItems/parse.ts b/packages/neo-one-node-vm/src/StackItems/parse.ts similarity index 97% rename from packages/neo-one-csharp-vm/src/StackItems/parse.ts rename to packages/neo-one-node-vm/src/StackItems/parse.ts index e9f6f419ce..aaefed024e 100644 --- a/packages/neo-one-csharp-vm/src/StackItems/parse.ts +++ b/packages/neo-one-node-vm/src/StackItems/parse.ts @@ -1,4 +1,4 @@ -import { PrimitiveStackItem, StackItem } from '@neo-one/csharp-core'; +import { PrimitiveStackItem, StackItem } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { PrimitiveStackItemReturn, StackItemReturn } from './StackItemReturn'; 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-csharp-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts similarity index 90% rename from packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts rename to packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts index 57514a1a2c..b2f386b6fc 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/ApplicationEngine.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts @@ -1,4 +1,4 @@ -import { TriggerType } from '@neo-one/csharp-core'; +import { TriggerType } from '@neo-one/node-core'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; diff --git a/packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts similarity index 95% rename from packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts rename to packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 18bdf0f738..27cda8b626 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -1,5 +1,5 @@ import { ScriptBuilder } from '@neo-one/client-common'; -import { TriggerType } from '@neo-one/csharp-core'; +import { TriggerType } from '@neo-one/node-core'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; 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 8b2a555440..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< - ByteArrayContractParameter - >).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 fa7e2026e3..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts +++ /dev/null @@ -1,1833 +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')), - ], - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ], - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], - ]), -}); - -const mapSetRef = new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ], - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ], - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], - ]), -}); - -const mapRemoveRef = new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ], - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ], - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], - ]), -}); - -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')), - ], - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ], - [ - new BufferStackItem(Buffer.from('dddd', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('dddd', 'hex')), - ], - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))], - [new BufferStackItem(Buffer.from('dddd', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(5))], - ]), - }), - ], - - 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')), - ], - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))], - ]), - }), - ], - - 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__/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 99a7bee1e1..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]]); - const valueMap = new Map([[valueStackItem.toStructuralKey(), valueStackItem]]); - 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-csharp-vm/src/__tests__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts similarity index 98% rename from packages/neo-one-csharp-vm/src/__tests__/storage.test.ts rename to packages/neo-one-node-vm/src/__tests__/storage.test.ts index b5f6aca858..65c8776801 100644 --- a/packages/neo-one-csharp-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -1,5 +1,5 @@ import { common, ScriptBuilder, UInt256, WitnessScopeModel } from '@neo-one/client-common'; -import { ArrayStackItem, Block, ConsensusData, Signer, Transaction, TriggerType, Witness } from '@neo-one/csharp-core'; +import { ArrayStackItem, Block, ConsensusData, Signer, Transaction, TriggerType, Witness } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { Dispatcher } from '../Dispatcher'; 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 532e323527..151372e1ff 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -1,3399 +1,206 @@ -// 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 } from '@neo-one/client-common'; +import { Block, ByteStringStackItem, ConsensusData, IntegerStackItem, TriggerType, 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')), - ], - ]), - referenceValues: new Map([ - [ - new BufferStackItem(Buffer.from('key', 'utf8')).toStructuralKey(), - new BufferStackItem(Buffer.from('value', 'utf8')), - ], - ]), - }), - ], - - 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: 0, + testMode: true, + }); - { - 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.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].value.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.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.skip('syscalls', () => { - // tslint:disable-next-line no-any - const filterMethods = (value: any): any => { - if (value == undefined) { - return value; - } + engine.loadScript(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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(5); + + expect((resultStack[0] as ByteStringStackItem).asString()).toEqual('{"key":"value"}'); + expect((resultStack[1] as ByteStringStackItem).asString()).toEqual('null'); + expect((resultStack[2] as ByteStringStackItem).asString()).toEqual('"test"'); + expect((resultStack[3] as ByteStringStackItem).asString()).toEqual('true'); + expect((resultStack[4] as ByteStringStackItem).asString()).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.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: 1, + testMode: false, + }); - 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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + expect((resultStack[0] as IntegerStackItem).value.eq(new BN(4))).toEqual(true); + }); + + test('System.Callback.CreateFromSyscall -- Halt', () => { + engine.create({ + trigger: TriggerType.Application, + gas: 1, + testMode: false, + }); - 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.build()); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + const byteStringItem = engine.resultStack[0] as ByteStringStackItem; + expect(byteStringItem.value.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: [], + }); - // 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: 0, + testMode: true, + 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.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: 0, testMode: true }); + script.emitPushUInt256(block.hash); + script.emitSysCall('System.Blockchain.GetBlock'); - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - } + engine.loadScript(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/errors.ts b/packages/neo-one-node-vm/src/errors.ts deleted file mode 100644 index db78ebc71f..0000000000 --- a/packages/neo-one-node-vm/src/errors.ts +++ /dev/null @@ -1,201 +0,0 @@ -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 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 InvalidVerifySyscallError = makeErrorWithCode( - 'INVALID_VERIFY_SYSCALL_ERROR', - (context: ExecutionContext, syscall: string) => - getMessage(context, `Syscall ${syscall} is not allowed during verification`), -); 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 cac0d1378b..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..91a11ff1f1 100644 --- a/packages/neo-one-node-vm/src/index.ts +++ b/packages/neo-one-node-vm/src/index.ts @@ -1,9 +1,2 @@ -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'; 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 ec8eba678c..0000000000 --- a/packages/neo-one-node-vm/src/opcodes.ts +++ /dev/null @@ -1,2018 +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 df6dcedbff..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts +++ /dev/null @@ -1,148 +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), - ]), - ); - } - - 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 7e48913781..0000000000 --- a/packages/neo-one-node-vm/src/syscalls.ts +++ /dev/null @@ -1,878 +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 }); -}; - -// TODO: PICKUP HERE -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.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.Account.GetScriptHash': createSysCall({ - name: 'Neo.Account.GetScriptHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asAccount().hash)], - }), - }), - - 'Neo.Asset.GetAssetId': createSysCall({ - name: 'Neo.Asset.GetAssetId', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asAsset().hash)], - }), - }), - - 'Neo.Storage.GetContext': createSysCall({ - name: 'Neo.Storage.GetContext', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new StorageContextStackItem(context.scriptHash)], - }), - }), - - // TODO: they maybe just changed the name of this one to System - // '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]()))], - // }; - // }, - // }), - - // TODO: base the new create syscall off of this one - // '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]()))], - // }; - // }, - // }), - - 'System.Enumerator.Next': createSysCall({ - name: 'System.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)], - }; - }, - }), - - 'System.Enumerator.Value': createSysCall({ - name: 'System.Enumerator.Value', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - // tslint:disable-next-line no-any - results: [args[0].asEnumerator().value() as any], - }), - }), - - 'System.Enumerator.Concat': createSysCall({ - name: 'System.Enumerator.Concat', - in: 2, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new EnumeratorStackItem(args[0].asEnumerator().concat(args[1].asEnumerator()))], - }), - }), - - // TODO: base the new create syscall off of this - // '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]()))], - // }; - // }, - // }), - - 'System.Iterator.Key': createSysCall({ - name: 'System.Iterator.Key', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - // tslint:disable-next-line no-any - results: [args[0].asIterator().key() as any], - }), - }), - - 'System.Iterator.Concat': createSysCall({ - name: 'System.Iterator.Concat', - in: 2, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new IteratorStackItem(args[0].asIterator().concatIterator(args[1].asIterator()))], - }), - }), - - 'System.Iterator.Keys': createSysCall({ - name: 'System.Iterator.Keys', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new EnumeratorStackItem(args[0].asIterator().keys())], - }), - }), - - 'System.Iterator.Values': createSysCall({ - name: 'System.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.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)], - }; - }, - }), - - // TODO: check this contract create call when reimplementing - // '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), - // ), - - // TODO: might want to use this flow for System.Contract.Update? - // '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), - // ), - - // TODO: Update this with new implementation - // 'System.Contract.Destroy': createSysCall({ - // name: 'System.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.PutEx': createPut({ name: 'Neo.Storage.PutEx' }), -}; - -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.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.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-csharp-vm/src/types.ts b/packages/neo-one-node-vm/src/types.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/types.ts rename to packages/neo-one-node-vm/src/types.ts diff --git a/packages/neo-one-csharp-vm/src/utils.ts b/packages/neo-one-node-vm/src/utils.ts similarity index 100% rename from packages/neo-one-csharp-vm/src/utils.ts rename to packages/neo-one-node-vm/src/utils.ts 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-output.json b/packages/neo-one-node-vm/tsconfig-output.json deleted file mode 100644 index a12b8c8059..0000000000 --- a/packages/neo-one-node-vm/tsconfig-output.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.cjs.json", - "compilerOptions": { - "target": "es2017" - }, - "compileOnSave": false -} \ No newline at end of file diff --git a/rush.json b/rush.json index cc35dff7c0..c4237e50c9 100644 --- a/rush.json +++ b/rush.json @@ -106,24 +106,6 @@ "shouldPublish": true, "versionPolicyName": "CoreReleasePolicy" }, - { - "packageName": "@neo-one/csharp-blockchain", - "projectFolder": "packages/neo-one-csharp-blockchain", - "reviewCategory": "production", - "versionPolicyName": "CoreReleasePolicy" - }, - { - "packageName": "@neo-one/csharp-core", - "projectFolder": "packages/neo-one-csharp-core", - "reviewCategory": "production", - "versionPolicyName": "CoreReleasePolicy" - }, - { - "packageName": "@neo-one/csharp-vm", - "projectFolder": "packages/neo-one-csharp-vm", - "reviewCategory": "production", - "versionPolicyName": "CoreReleasePolicy" - }, { "packageName": "@neo-one/developer-tools", "projectFolder": "packages/neo-one-developer-tools", From 7970b29c2ed39ecf2e39b66249f231ab5aba0c81 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 29 Sep 2020 10:33:22 -0700 Subject: [PATCH 098/141] feat(client-core): update nearly everything in client-core/full-core (#2167) --- common/config/rush/yarn.lock | 19 +- packages/neo-one-build-tests/jest/unit.js | 2 +- .../neo-one-cli/src/deploy/runMigration.ts | 4 +- packages/neo-one-client-common/src/common.ts | 2 + .../src/contractParameters.ts | 21 +- .../models/transaction/TransactionModel.ts | 6 +- .../attribute/AttributeBaseModel.ts | 1 - .../neo-one-client-common/src/models/types.ts | 173 ++-- packages/neo-one-client-common/src/types.ts | 555 ++++++------ packages/neo-one-client-core/src/Client.ts | 60 +- .../neo-one-client-core/src/__data__/data.ts | 34 +- .../src/__data__/factory.ts | 826 ++++-------------- .../src/__data__/verifyDataProvider.ts | 242 ++--- .../RemoteUserAccountProvider.test.ts | 7 +- .../src/__tests__/Client.test.ts | 4 +- .../__tests__/__snapshots__/args.test.ts.snap | 8 + .../src/__tests__/args.test.ts | 317 +++++-- .../__tests__/provider/JSONRPCClient.test.ts | 85 +- .../provider/NEODataProvider.test.ts | 371 -------- .../provider/NEOONEDataProvider.test.ts | 197 +---- .../__tests__/provider/NEOONEProvider.test.ts | 38 +- .../__tests__/provider/NEOProvider.test.ts | 195 ----- .../src/__tests__/provider/convert.test.ts | 2 +- .../src/__tests__/sc/common.test.ts | 5 +- .../__tests__/sc/createSmartContract.test.ts | 4 +- .../src/__tests__/sc/params.test.ts | 6 +- .../user/DapiUserAccountProvider.test.ts | 36 +- packages/neo-one-client-core/src/args.ts | 604 ++++++++++--- packages/neo-one-client-core/src/nep5.ts | 56 +- .../src/provider/DataProviderBase.ts | 294 ------- .../src/provider/JSONRPCClient.ts | 102 +-- .../src/provider/NEODataProvider.ts | 307 ------- .../src/provider/NEOONEDataProvider.ts | 551 ++++++++++-- .../src/provider/NEOONEProvider.ts | 120 ++- .../src/provider/NEOProvider.ts | 24 - .../src/provider/ProviderBase.ts | 157 ---- .../src/provider/convert.ts | 475 +--------- .../neo-one-client-core/src/provider/index.ts | 4 - packages/neo-one-client-core/src/sc/common.ts | 31 +- .../src/sc/createSmartContract.ts | 30 +- packages/neo-one-client-core/src/sc/params.ts | 6 +- packages/neo-one-client-core/src/sc/utils.ts | 8 +- packages/neo-one-client-core/src/trace.ts | 4 +- packages/neo-one-client-core/src/user/Dapi.ts | 29 +- .../src/user/DapiUserAccountProvider.ts | 65 +- .../src/user/LocalUserAccountProvider.ts | 425 ++------- .../src/user/RemoteUserAccountProvider.ts | 21 +- .../src/user/UserAccountProviderBase.ts | 789 +++-------------- .../src/user/converters/attribute.ts | 55 +- .../src/user/converters/index.ts | 4 - .../src/user/converters/input.ts | 7 - .../src/user/converters/output.ts | 8 - .../src/__data__/models.ts | 16 +- .../ContractPermissionDescriptorModel.test.ts | 12 +- .../models/manifest/ContractManifestModel.ts | 10 +- .../ContractPermissionDescriptorModel.ts | 29 +- .../neo-one-client-full-core/src/Client.ts | 56 +- .../src/ReadClient.ts | 12 - .../src/__data__/data.ts | 24 +- .../src/__data__/factory.ts | 2 +- .../src/__tests__/Client.test.ts | 42 - .../src/__tests__/ReadClient.test.ts | 24 - .../src/__tests__/args.test.ts | 80 +- .../user/LocalUserAccountProvider.test.ts | 275 ++---- packages/neo-one-client-full-core/src/args.ts | 70 +- .../neo-one-client-full-core/src/types.ts | 54 +- .../src/user/LocalUserAccountProvider.ts | 284 +++--- packages/neo-one-node-core/src/Node.ts | 10 +- packages/neo-one-node-protocol/src/Node.ts | 4 +- .../src/createHandler.ts | 44 +- .../src/compileContract.ts | 8 +- packages/neo-one-utils/src/JSONType.ts | 6 + packages/neo-one-utils/src/index.ts | 1 + 73 files changed, 2710 insertions(+), 5749 deletions(-) delete mode 100644 packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts delete mode 100644 packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts delete mode 100644 packages/neo-one-client-core/src/provider/DataProviderBase.ts delete mode 100644 packages/neo-one-client-core/src/provider/NEODataProvider.ts delete mode 100644 packages/neo-one-client-core/src/provider/NEOProvider.ts delete mode 100644 packages/neo-one-client-core/src/provider/ProviderBase.ts delete mode 100644 packages/neo-one-client-core/src/user/converters/input.ts delete mode 100644 packages/neo-one-client-core/src/user/converters/output.ts create mode 100644 packages/neo-one-utils/src/JSONType.ts diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 37f5e4c011..f38f2c56c9 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2259,13 +2259,6 @@ dependencies: gulp "~4.0.2" -"@rush-temp/csharp-vm@file:./projects/csharp-vm.tgz": - version "0.0.0" - resolved "file:./projects/csharp-vm.tgz#5790613b20127993411bbaf8cb19d68ccf9e3be2" - dependencies: - "@neo-one/edge" "^15.0.0" - 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" @@ -2506,7 +2499,6 @@ version "0.0.0" resolved "file:./projects/node-blockchain.tgz" dependencies: - "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" "@types/js-priority-queue" "^0.0.5" "@types/lodash" "^4.14.138" @@ -2557,16 +2549,13 @@ version "0.0.0" resolved "file:./projects/node-core.tgz" dependencies: - "@types/bn.js" "^4.11.5" "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" - "@types/through" "^0.0.29" 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": @@ -2699,16 +2688,12 @@ version "0.0.0" resolved "file:./projects/node-vm.tgz" dependencies: - "@reactivex/ix-es2015-cjs" "^2.5.3" - "@reactivex/ix-esnext-esm" "^2.5.3" - "@types/bn.js" "^4.11.5" + "@neo-one/edge" "^15.0.0" "@types/jest" "^24.0.18" "@types/lodash" "^4.14.138" - bitwise "^2.0.3" bn.js "^5.0.0" gulp "~4.0.2" lodash "^4.17.15" - rxjs "^6.5.3" tslib "^1.10.0" "@rush-temp/node@file:./projects/node.tgz": @@ -3219,7 +3204,7 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== -"@types/elliptic@^6.4.12", "@types/elliptic@^6.4.9": +"@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== diff --git a/packages/neo-one-build-tests/jest/unit.js b/packages/neo-one-build-tests/jest/unit.js index 973ad39a48..cae20e4e24 100644 --- a/packages/neo-one-build-tests/jest/unit.js +++ b/packages/neo-one-build-tests/jest/unit.js @@ -12,6 +12,6 @@ module.exports = { '/packages/neo-one-smart-contract/src/index.d.ts', '^@neo-one/(.*)$': '/packages/neo-one-$1/src/index', }, - testRegex: '^.*/__tests__/.*\\.test\\.tsx?$', + testRegex: '^neo-one-client-core/__tests__/.*\\.test\\.tsx?$', coverageReporters: ['json'], }; diff --git a/packages/neo-one-cli/src/deploy/runMigration.ts b/packages/neo-one-cli/src/deploy/runMigration.ts index 9634e2ba7a..fd693c0bf4 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({ diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 93a188ff30..b480bf3aec 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -244,6 +244,8 @@ export const common = { ONE_HUNDRED_MILLION_FIXED8, NEO_ASSET_HASH: '0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b', GAS_ASSET_HASH: '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7', + NEO_CONTRACT_SCRIPT_HASH: '0x43cf98eddbe047e198a3e5d57006311442a0ca15', + GAS_CONTRACT_SCRIPT_HASH: '0xa1760976db5fcdfab2a9930e8f6ce875b2d18225', uInt160ToBuffer, add0x, strip0x, diff --git a/packages/neo-one-client-common/src/contractParameters.ts b/packages/neo-one-client-common/src/contractParameters.ts index ef0803d120..9363f11e21 100644 --- a/packages/neo-one-client-common/src/contractParameters.ts +++ b/packages/neo-one-client-common/src/contractParameters.ts @@ -6,14 +6,15 @@ import { InvalidContractParameterError } from './errors'; import { JSONHelper } from './JSONHelper'; import { ABIReturn, - AddressABI, AddressString, + AnyABI, ArrayABI, BooleanABI, BufferABI, BufferString, ContractParameter, ForwardValueABI, + Hash160ABI, Hash256ABI, Hash256String, IntegerABI, @@ -32,6 +33,9 @@ import { utils } from './utils'; 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 +45,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, @@ -49,9 +53,6 @@ const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { }), ); break; - case 'Hash160': - value = common.uInt160ToBuffer(JSONHelper.readUInt160(contractParameter.value)); - break; case 'Hash256': value = common.uInt256ToBuffer(JSONHelper.readUInt256(contractParameter.value)); break; @@ -70,7 +71,7 @@ const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { 'Signature', 'Boolean', 'Integer', - 'Address', + 'Hash160', 'Hash256', 'Buffer', 'PublicKey', @@ -116,7 +117,7 @@ const toString = (contractParameter: ContractParameter): string => { }; const toAddress = (contractParameter: ContractParameter): AddressString => { - if (contractParameter.type === 'Address') { + if (contractParameter.type === 'Hash160') { return contractParameter.value; } @@ -127,7 +128,7 @@ const toAddress = (contractParameter: ContractParameter): AddressString => { }); } - throw new InvalidContractParameterError(contractParameter, ['Address', 'Buffer']); + throw new InvalidContractParameterError(contractParameter, ['Hash160', 'Buffer']); }; const toHash256 = (contractParameter: ContractParameter): Hash256String => { @@ -316,9 +317,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/models/transaction/TransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts index fa33164fe3..c17a1930ba 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -15,10 +15,10 @@ export interface TransactionModelAdd< TSigner extends SignerModel = SignerModel > { readonly version?: number; - readonly nonce: number; + readonly nonce?: number; readonly systemFee: BN; - readonly networkFee: BN; - readonly validUntilBlock: number; + readonly networkFee?: BN; + readonly validUntilBlock?: number; readonly attributes?: readonly TAttribute[]; readonly signers?: readonly TSigner[]; readonly script: Buffer; 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 f900ad368e..24775a4d24 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,6 +1,5 @@ import { BinaryWriter } from '../../../BinaryWriter'; import { createSerializeWire, SerializableWire, SerializeWire } from '../../Serializable'; -import { AttributeModel } from './AttributeModel'; import { AttributeTypeModel } from './AttributeTypeModel'; export abstract class AttributeBaseModel implements SerializableWire { diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 0c19ca274a..6549e6afa5 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,4 +1,4 @@ -import { SignatureString } from '../types'; +import { JSONObject } from '@neo-one/utils'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; @@ -11,6 +11,11 @@ export interface ContractParameterDefinitionJSON { readonly name: string; } +export interface AnyContractParameterJSON extends ContractParameterDefinitionJSON { + readonly type: 'Any'; + readonly value: undefined; +} + export interface ArrayContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Array'; readonly value: readonly ContractParameterJSON[]; @@ -70,6 +75,7 @@ export interface VoidContractParameterJSON extends ContractParameterDefinitionJS } export type ContractParameterJSON = + | AnyContractParameterJSON | SignatureContractParameterJSON | BooleanContractParameterJSON | IntegerContractParameterJSON @@ -87,25 +93,24 @@ export type ContractParameterTypeJSON = keyof typeof ContractParameterTypeModel; export type WitnessScopeJSON = keyof typeof WitnessScopeModel; -// TODO: rename to "TransactionResultErrorJSON" ? -export interface InvocationResultErrorJSON { - readonly state: VMState.FAULT; +export interface TransactionResultErrorJSON { + readonly state: 'FAULT'; readonly gas_consumed: string; readonly gas_cost: string; readonly stack: readonly ContractParameterJSON[]; readonly script: string; + readonly message: string; } -// TODO: rename to "TransactionResultSuccessJSON" ? -export interface InvocationResultSuccessJSON { - readonly state: VMState.HALT; +export interface TransactionResultSuccessJSON { + readonly state: 'HALT'; readonly gas_consumed: string; - // readonly gas_cost: string; // TODO: check that this should be removed + readonly gas_cost: string; // TODO: not sure if this is redundant or not readonly stack: readonly ContractParameterJSON[]; - readonly script: string; // TODO: check this + readonly script: string; } -export type InvocationResultJSON = InvocationResultSuccessJSON | InvocationResultErrorJSON; +export type InvocationResultJSON = TransactionResultSuccessJSON | TransactionResultErrorJSON; export interface RawInvocationResultErrorJSON { readonly state: 'FAULT'; @@ -203,12 +208,56 @@ export interface InvocationDataJSON { readonly storageChanges: readonly StorageChangeJSON[]; } +export interface UnclaimedGASJSON { + readonly unclaimed: string; + readonly address: string; +} + +export interface StateItemJSON { + readonly type: string; + readonly value: string; +} + +export interface NeoNotificationJSON { + readonly contract: string; + readonly state: { + readonly type: string; + readonly value: readonly StateItemJSON[]; + }; +} + +export interface StackItemJSON { + readonly type: string; + readonly value: string; +} + +// TODO: copy pasted from node-core. We might want to put this here instead +export enum TriggerType { + Verification = 0x00, + System = 0x01, + Application = 0x10, +} + +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 ApplicationLogDataJSON { + readonly txid: string; + readonly executions: readonly ExecutionResultJSON[]; +} + export interface TransactionJSON { readonly hash: string; readonly size: number; readonly version: number; readonly nonce: number; - readonly sender?: string; + readonly sender: string; readonly sysfee: string; readonly netfee: string; readonly validuntilblock: number; @@ -216,9 +265,12 @@ export interface TransactionJSON { readonly signers: readonly SignerJSON[]; readonly script: string; readonly witnesses: readonly WitnessJSON[]; + // TODO: what, if any, transaction data are we including? + readonly data?: TransactionReceiptJSON; } export interface TransactionWithInvocationDataJSON extends TransactionJSON { + // TODO: this may be off slightly. Not sure where script and gas belong. They may belong in TransactionJSON readonly script: string; readonly gas: string; readonly invocationData?: InvocationDataJSON | undefined; @@ -229,12 +281,13 @@ export interface TransactionReceiptJSON { readonly blockHash: string; readonly transactionIndex: number; readonly globalIndex: string; + readonly blockTime: number; + readonly confirmations: number; + readonly transactionHash: string; } -export interface ConfirmedTransactionJSON extends TransactionJSON, TransactionReceiptJSON {} - export type Wildcard = '*'; -export type WildcardContainerJSON = readonly string[] | Wildcard; +export type WildcardContainerJSON = readonly T[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; @@ -256,33 +309,36 @@ export interface ContractABIJSON { export interface ContractGroupJSON { readonly publicKey: string; - readonly signature: SignatureString; + readonly signature: string; } -export type ContractPermissionDescriptorJSON = string; +export interface ContractPermissionDescriptorJSON { + readonly hashOrGroup: string; + readonly isHash: boolean; + readonly isGroup: boolean; + readonly isWildcard: boolean; +} export interface ContractPermissionJSON { readonly contract: ContractPermissionDescriptorJSON; - readonly methods: WildcardContainerJSON; -} - -type ExtraValue = string | number | boolean | readonly ExtraValue[]; -export interface Extra { - readonly [k: string]: ExtraValue | Extra; + readonly methods: WildcardContainerJSON; } export interface ContractManifestJSON { + readonly hash: string; + // TODO: only hash is included in old `ContractJSON` definition. Remove hashHex? + readonly hashHex: string; readonly abi: ContractABIJSON; readonly groups: readonly ContractGroupJSON[]; readonly permissions: readonly ContractPermissionJSON[]; - readonly trusts: WildcardContainerJSON; - readonly safeMethods: WildcardContainerJSON; + readonly trusts: WildcardContainerJSON; + readonly safeMethods: WildcardContainerJSON; readonly features: { readonly storage: boolean; readonly payable: boolean; }; readonly supportedStandards: readonly string[]; - readonly extra?: Extra; + readonly extra?: JSONObject; } export interface ContractParameterDefinitionJSON { @@ -292,14 +348,13 @@ export interface ContractParameterDefinitionJSON { export interface ContractJSON { readonly id: number; - readonly hash: string; readonly script: string; readonly manifest: ContractManifestJSON; + readonly hasStorage: boolean; + readonly payable: boolean; } export interface BlockBaseJSON { - readonly hash: string; - readonly size: number; readonly version: number; readonly previousblockhash: string; readonly merkleroot: string; @@ -307,6 +362,8 @@ export interface BlockBaseJSON { readonly index: number; readonly nextconsensus: string; readonly witnesses: readonly WitnessJSON[]; + readonly hash: string; + readonly size: number; // TODO: confirmations: number; // TODO: nextblockhash?: string; } @@ -319,8 +376,7 @@ export interface ConsensusDataJSON { export interface HeaderJSON extends BlockBaseJSON {} export interface BlockJSON extends BlockBaseJSON { - // TODO: this used to be `ConfirmedTransactionJSON[]`. Why? - readonly tx: readonly TransactionJSON[]; + readonly tx: readonly TransactionWithInvocationDataJSON[]; readonly consensusdata?: ConsensusDataJSON; } @@ -350,7 +406,7 @@ export interface VerifyTransactionResultJSON { } export interface RelayTransactionResultJSON { - readonly transaction: TransactionJSON; + readonly transaction: TransactionWithInvocationDataJSON; readonly verifyResult?: VerifyTransactionResultJSON; } @@ -367,59 +423,8 @@ export interface PluginJSON { } export interface VersionJSON { - readonly tcpPort: number; - readonly wsPort: number; + readonly tcpport: number; + readonly wsport: number; readonly nonce: number; readonly useragent: string; } - -export interface NeoClaimableJSON { - readonly claimable: readonly NeoInputClaimableJSON[]; - readonly unclaimed: string; - readonly address: string; -} - -export interface NeoInputClaimableJSON { - readonly txid: string; - readonly n: number; - readonly value: string; - readonly start_height: number; - readonly end_height: number; - readonly generated: string; - readonly sys_fee: string; - readonly unclaimed: string; -} - -export interface NeoUnspentOutputJSON { - readonly txid: string; - readonly n: number; - readonly value: string; -} - -export interface NeoBalanceJSON { - readonly unspent: readonly NeoUnspentOutputJSON[]; - readonly asset_hash: string; - readonly asset: string; - readonly asset_symbol: string; - readonly amount: string; -} - -export interface NeoUnspentJSON { - readonly balance: readonly NeoBalanceJSON[]; - readonly address: string; -} - -export interface NeoPreviewContractJSON { - readonly name: string; - readonly version: string; - readonly author: string; - readonly email: string; - readonly description: string; - readonly code: { - readonly hash: string; - readonly script: string; - readonly parameters: readonly ContractParameterTypeJSON[]; - readonly returntype: ContractParameterTypeJSON; - }; - readonly needstorage: boolean; -} diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 94992bf22c..daea0d49bd 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1,11 +1,11 @@ // 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, UInt160Hex, UInt256 } from './common'; -import { Wildcard } from './models'; +import { AttributeTypeModel, Wildcard } from './models'; /** * Base58 encoded string that represents a NEO address. @@ -57,155 +57,32 @@ 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; -} -/** - * `Attribute` whose data is an arbitrary `BufferString`. - */ -export interface BufferAttribute extends AttributeBase { - /** - * `usage` distinguishes `BufferAttribute` from other `Attribute` object types. - */ - readonly usage: BufferAttributeUsage; - /** - * Hex encoded data of the `Attribute`. - */ - readonly data: BufferString; -} +export interface AttributeBase {} /** - * `Attribute` whose data is a `PublicKeyString`. + * `Attribute` whose transaction is "high priority". */ -export interface PublicKeyAttribute extends AttributeBase { - /** - * `usage` distinguishes `PublicKeyAttribute` from other `Attribute` object types. - */ - readonly usage: PublicKeyAttributeUsage; +export interface HighPriorityAttribute extends AttributeBase { /** - * Public key as a string of the `Attribute`. + * `type` specifies the `Attribute` type */ - readonly data: PublicKeyString; + readonly type: AttributeTypeModel.HighPriority; } /** - * `Attribute` whose data is a `Hash256`. + * `Attribute`s are used to store additional data on `Transaction`s. */ -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; -} -/** - * `Attribute` whose data is an `AddressString`. - */ -export interface AddressAttribute extends AttributeBase { - /** - * `usage` distinguishes `AddressAttribute` from other `Attribute` object types. - */ - readonly usage: AddressAttributeUsage; - /** - * NEO `Address` as a string of the `Attribute`. - */ - readonly data: AddressString; -} -/** - * `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; +export type Attribute = HighPriorityAttribute; export type WitnessScope = - | 'Global' + | 'None' | 'CalledByEntry' | 'CustomContracts' | 'CustomGroups' + | 'Global' | 'CalledByEntryAndCustomContracts' | 'CalledByEntryAndCustomGroups' | 'CalledByEntryAndCustomGroupsAndCustomContracts' @@ -248,7 +125,8 @@ export interface Signer { } /** - * Base interface for all `Transaction`s + * Interface for `Transaction`s + * TODO: should some of these be optional now? */ export interface Transaction { /** @@ -262,7 +140,7 @@ export interface Transaction { /** * Hash160 of the transaction sender. */ - readonly sender: AddressString; + readonly sender?: AddressString; /** * `Hash256` of this `Transaction`. */ @@ -296,15 +174,25 @@ export interface Transaction { */ readonly script: BufferString; /** - * `Witness`es to the `Transaction`, i.e. the `Address`es that have signed the `Transasction`. + * `Witness`es to the `Transaction`, i.e. the `Address`es that have signed the `Transaction`. */ readonly witnesses: readonly Witness[]; } -// TODO: add description -export interface ConfirmedTransaction extends Transaction, TransactionReceipt {} +/** + * `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 ConfirmedTransaction extends Transaction { + /** + * Additional raw data that is typically processed by an `ABI` for the client APIs. + */ + readonly invocationData: RawInvocationData; + /** + * 'Receipt' of the confirmed transaction on the blockchain. This contains properties like the block the `Transaction` was included in. + */ + readonly receipt: TransactionReceipt; +} -// TODO: header not yet checked /** * All of the properties of a `Block` except the `Transaction`s themselves. */ @@ -313,10 +201,6 @@ export interface Header { * NEO blockchain version. */ readonly version: number; - /** - * `Block` hash. - */ - readonly hash: Hash256String; /** * Previous `Block` hash. */ @@ -333,10 +217,6 @@ export interface Header { * `Block` index. */ readonly index: number; - /** - * Unique number to ensure the block hash is always unique. - */ - readonly nonce: string; /** * Next consensus address. */ @@ -345,28 +225,37 @@ export interface Header { * `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; /** + * TODO: is this custom to NEO•ONE? Keep or no? * Number of confirmations of the `Block`. */ - readonly confirmations: number; + // readonly confirmations: number; /** + * TODO: is this custom to NEO•ONE? Keep or no? * The hash of the next `Block`. */ - readonly nextBlockHash?: string; + // readonly nextBlockHash?: string; } -// TODO: check this +/** + * TODO: document + */ export interface ConsensusData { /** * `ConsensusData` hash. + * TODO: should this be optional or no? */ readonly hash: Hash256String; /** @@ -379,7 +268,6 @@ export interface ConsensusData { readonly nonce: BufferString; } -// TODO: check export interface Block extends Header { /** * `Transaction`s contained in the `Block`. @@ -388,7 +276,7 @@ export interface Block extends Header { /** * `Transaction`s contained in the `Block`. */ - readonly consensusData: ConsensusData; + readonly consensusData?: ConsensusData; } /** @@ -398,7 +286,7 @@ export interface TransactionReceipt { /** * `Block` index of the `Transaction` for this receipt. */ - readonly blockIndex: number; // TODO: remove blockIndex? + readonly blockIndex: number; /** * `Block` hash of the `Transaction` for this receipt. */ @@ -410,11 +298,15 @@ export interface TransactionReceipt { /** * 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; // TODO: remove this? Keep or remove confirmations? Move somewhere else? + readonly globalIndex: BigNumber; /** * Number of `Block`s which have confirmed this transaction. */ @@ -444,7 +336,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. */ @@ -460,37 +352,37 @@ export interface RawInvocationResultBase { } /** - * 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'; /** * Failure reason. */ - readonly message: string; // TODO: remove message? + readonly message: string; } /** - * 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. @@ -525,6 +417,9 @@ export interface Transfer { readonly amount: BigNumber; /** * `Hash256` in string format of the native `Asset` to transfer. + * TODO: make sure this is only ever a NEO or GAS hash? Are there even asset hashes anymore? + * may want to just change this to "NEO" | "GAS". Or, more likely, it can represent any "asset" + * created by any NEP5 contract */ readonly asset: Hash256String; /** @@ -611,10 +506,6 @@ export interface UserAccountProvider { * @returns the current `Block` height. */ readonly getBlockCount: (network: NetworkType) => Promise; - /** - * @returns `Account` for the specified network and address. Note that the provided network and address may not correspond to one of the available `UserAccount`s. - */ - readonly getAccount: (network: NetworkType, address: AddressString) => Promise; /** * @returns `AsyncIterable` of `Block`s on the argument `network`. */ @@ -650,7 +541,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. * @@ -664,7 +555,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. * @@ -678,7 +569,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. * @@ -692,7 +583,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. * @@ -779,25 +670,6 @@ export interface DeveloperProvider { readonly resetProject: () => Promise; } -/** - * An `Account` represents the balances of NEO, GAS an other native assets at a given `Address`. - */ -export interface Account { - /** - * The address of this `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`. - */ - readonly balances: { - /** - * May be `undefined` if the `address` has 0 balance. - */ - readonly [asset: string]: BigNumber; - }; -} - /** * The base type of the `Event` parameters. This type is specialized automatically with the generated NEO•ONE smart contract APIs. */ @@ -878,9 +750,9 @@ export interface SmartContractDefinition { */ readonly networks: SmartContractNetworksDefinition; /** - * `ABI` of the smart contract + * `Manifest` of the smart contract */ - readonly abi: ContractABI; + readonly manifest: ContractManifestClient; /** * `SourceMaps` associated with the smart contract. */ @@ -958,12 +830,6 @@ 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; - /** - * Boolean which determines whether or not to skip the sysFee check before submitting an invocation transaction. Used for working with contracts where the sysFee is known to be less - * - * than the 10 free GAS, i.e. NEP5 transactions. - */ - skipSysFeeCheck?: boolean; // tslint:enable readonly-keyword } @@ -974,7 +840,7 @@ export interface ForwardOptions = Event> { /** * Additional events that may be emitted due to forwarding arguments to another smart contract method. */ - readonly events?: readonly ContractEventDescriptor[]; + readonly events?: readonly ContractEventDescriptorClient[]; readonly __tag?: TEvent; } @@ -1019,6 +885,16 @@ export interface UpdateAccountNameOptions { readonly name: string; } +/** + * Default value is the `Transaction` sender `Address` + */ +export interface SenderAddressABIDefault { + /** + * `type` differentiates the `SenderAddressABIDefault` object from other `ABIDefault` objects. + */ + readonly type: 'sender'; +} + /** * Common properties of all `ABIReturn` specifications. * @@ -1035,17 +911,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. @@ -1231,14 +1118,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. * @@ -1333,9 +1227,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 @@ -1350,9 +1245,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 @@ -1364,12 +1260,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; @@ -1378,6 +1275,60 @@ export type VoidABI = VoidABIParameter | VoidABIReturn; export type IntegerABI = IntegerABIParameter | IntegerABIReturn; export type ForwardValueABI = ForwardValueABIParameter | ForwardValueABIReturn; +/** + * Method specification in the `ABI` of a smart contract generated by the NEO•ONE compiler and + * for use in Client APIs. + * TODO: describe + */ +export interface ContractMethodDescriptorClient { + /** + * Name of the method. + */ + readonly name: string; + /** + * Parameters of the method. + * TODO: describe + */ + readonly parameters?: readonly ABIParameter[]; + /** + * Return type of the method. + * TODO: describe + */ + readonly returnType: ABIReturn; + /** + * TODO: fill out description here + */ + readonly offset: number; + /** + * `true` if the function is constant or read-only. + */ + readonly constant?: boolean; + /** + * `true` if the function is used for sending native assets with a two-phase send. + */ + readonly send?: boolean; + /** + * `true` if the function is used for sending native assets. + */ + readonly sendUnsafe?: boolean; + /** + * `true` if the function is used for receiving native assets. + */ + readonly receive?: boolean; + /** + * `true` if the function is used for claiming GAS. + */ + readonly claim?: boolean; + /** + * `true` if the function is used for refunding native assets. + */ + readonly refundAssets?: boolean; + /** + * `true` if the function is used for the second phase of a send. + */ + readonly completeSend?: boolean; +} + /** * Method specification in the `ABI` of a smart contract. */ @@ -1389,7 +1340,7 @@ export interface ContractMethodDescriptor { /** * Parameters of the method. */ - readonly parameters: readonly ContractParameterDefinition[]; + readonly parameters?: readonly ContractParameterDefinition[]; /** * Return type of the method. */ @@ -1397,7 +1348,24 @@ export interface ContractMethodDescriptor { /** * TODO: fill out description here */ - readonly offset?: number; + 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 ContractEventDescriptorClient { + /** + * Name of the event. + */ + readonly name: string; + /** + * Parameters of the event. + * TODO: describe + */ + readonly parameters: readonly ABIParameter[]; } /** @@ -1414,6 +1382,29 @@ export interface ContractEventDescriptor { 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 ContractABIClient { + /** + * Script hash of the contract. + */ + readonly hash: UInt160; + /** + * TODO: describe + * Specification of the smart contract methods. + */ + readonly methods: readonly ContractMethodDescriptorClient[]; + /** + * TODO: describe + * Specification of the smart contract events. + */ + 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. * @@ -1442,12 +1433,13 @@ export interface ContractABI { export interface ContractGroup { /** * The public key identifying the group. + * TODO: should this be some sort of string? Like ECPointString? */ readonly publicKey: ECPoint; /** * Signature of the contract hash. */ - readonly signature: SignatureString; + readonly signature: BufferString; } /** @@ -1472,7 +1464,7 @@ export enum ContractFeatures { HasStoragePayable = 0x05, } -export type WildcardContainer = T extends undefined ? Wildcard : readonly T[] | Wildcard; +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. @@ -1482,17 +1474,17 @@ export type WildcardContainer = T extends undefined ? Wildcard : readonly T[] export interface ContractPermissionDescriptor { readonly hashOrGroup: UInt160 | ECPoint | Wildcard; /** - * Returns true if the permission is for a `UInt160`. + * True if the permission is for a `UInt160`. */ - readonly isHash: () => boolean; + readonly isHash: boolean; /** - * Returns true if the permission is for a `ECPoint`, representing a `ContractGroup`. + * True if the permission is for a `ECPoint`, representing a `ContractGroup`. */ - readonly isGroup: () => boolean; + readonly isGroup: boolean; /** - * Returns true if the permission is a wildcard (*), meaning any group or address can call this `Contract`. + * True if the permission is a wildcard (*), meaning any group or address can call this `Contract`. */ - readonly isWildcard: () => boolean; + readonly isWildcard: boolean; } /** @@ -1511,20 +1503,81 @@ export interface ContractPermission { } /** + * TODO: add to description * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, * it will be limited by its declared list of features and permissions. */ -export interface ContractManifest { +export interface ContractManifestClient { /** - * Max length for a valid Contract Manifest. + * The `Contract`'s hash. */ - readonly maxLength: 4096; // TODO: abstract this + readonly hash: UInt160; + /** + * The `Contract`'s hash as a hex string. + * TODO: we didn't include hashHex in the old `Contract` type definition + * Not sure if it belongs in this type here + */ + readonly hashHex: UInt160Hex; + /** + * Set of mutually trusted contracts. + */ + readonly groups: readonly ContractGroup[]; /** - * Get the `Contract`'s hash. + * The features field describes what features are available for the contract. + */ + readonly features: { + readonly storage: boolean; + readonly payable: boolean; + }; + /** + * 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; + /** + * The safeMethods field is an array containing a set of safe methods. + */ + readonly safeMethods: WildcardContainer; + /** + * Custom user-defined JSON object. + */ + readonly extra?: JSONObject; + /** + * True if the `Contract` modified blockchain storage. + */ + readonly hasStorage: boolean; + /** + * True if the `Contract` can receive native assets. + */ + readonly payable: boolean; +} + +/** + * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, + * it will be limited by its declared list of features and permissions. + */ +export interface ContractManifest { + /** + * The `Contract`'s hash. */ readonly hash: UInt160; /** - * Get the `Contract`'s hash as a hex string. + * The `Contract`'s hash as a hex string. + * TODO: we didn't include hashHex in the old `Contract` type definition + * Not sure if it belongs in this type here */ readonly hashHex: UInt160Hex; /** @@ -1562,7 +1615,7 @@ export interface ContractManifest { /** * Custom user-defined JSON object. */ - readonly extra: JSON; + readonly extra?: JSONObject; /** * True if the `Contract` modified blockchain storage. */ @@ -1719,6 +1772,21 @@ export interface ContractParameterDefinition { readonly name: string; } +/** + * Invocation stack item for an `Any`. + * + * @see ContractParameter + */ +export interface AnyContractParameter extends ContractParameterDefinition { + /** + * `type` distinguishes `AnyContractParemeter` from other `ContractParameter` object types. + */ + readonly type: 'Any'; + /** + * Value is not defined. + */ + readonly value: undefined; +} /** * Invocation stack item for a `Signature`. * @@ -1771,23 +1839,6 @@ export interface IntegerContractParameter extends ContractParameterDefinition { readonly value: BN; } -/** - * Invocation stack item for an `Address`. - * - * @see ContractParameter - * @see AddressString - */ -export interface AddressContractParameter extends ContractParameterDefinition { - /** - * `type` distinguishes `AddressContractParameter` from other `ContractParameter` object types. - */ - readonly type: 'Address'; - /** - * NEO address in base58 encoded string format. - */ - readonly value: AddressString; -} - /** * Invocation stack item for a `Hash160`. * @@ -1802,7 +1853,7 @@ export interface Hash160ContractParameter extends ContractParameterDefinition { /** * NEO address in base58 encoded string format. */ - readonly value: string; + readonly value: AddressString; } /** @@ -1936,10 +1987,10 @@ export interface VoidContractParameter extends ContractParameterDefinition { * Low-level API for advanced usage only. */ export type ContractParameter = + | AnyContractParameter | SignatureContractParameter | BooleanContractParameter | IntegerContractParameter - | AddressContractParameter | Hash160ContractParameter | Hash256ContractParameter | BufferContractParameter @@ -1962,7 +2013,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. */ @@ -1978,7 +2029,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. */ @@ -1990,7 +2041,7 @@ export interface RawInvocationResultError extends RawInvocationResultBase { /** * A descriptive message indicating why the invocation failed. */ - // readonly message: string; // TODO: remove this? + readonly message: string; } /** @@ -1998,7 +2049,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. @@ -2242,10 +2293,6 @@ export interface RelayTransactionResult { * 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; // TODO: check that we want to remove this. Replace somehow? /** * `Contract`s created by the invocation. */ diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index 94defdaee2..7076ca4783 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -1,13 +1,10 @@ /// // tslint:disable member-ordering readonly-array no-any import { - Account, AddressString, Block, - ClaimTransaction, GetOptions, Hash256String, - InvocationTransaction, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, NetworkType, @@ -179,13 +176,6 @@ export class Client< */ public readonly block$: Observable; - /** - * Emits a value whenever a new user account is selected and whenever a block is persisted to the blockchain. - * - * Immediately emits the latest value when subscribed to. - */ - public readonly accountState$: Observable; - public constructor(providersIn: TUserAccountProviders) { this.hooks = { beforeRelay: new AsyncParallelHook(['beforeRelay']), @@ -268,23 +258,6 @@ export class Client< multicast(() => new ReplaySubject(1)), refCount(), ); - this.accountState$ = combineLatest([this.currentUserAccount$, this.block$]).pipe( - switchMap(async ([currentUserAccount]) => { - if (currentUserAccount === undefined) { - return undefined; - } - - const account = await this.getNetworkProvider(currentUserAccount.id.network).getAccount( - currentUserAccount.id.network, - currentUserAccount.id.address, - ); - - return { currentUserAccount, account }; - }), - distinctUntilChanged((a, b) => _.isEqual(a, b)), - multicast(() => new ReplaySubject(1)), - refCount(), - ); } /** @@ -446,7 +419,7 @@ export class Client< asset: Hash256String, 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,22 +431,13 @@ 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); return this.addTransactionHooks(this.getProvider(options).claim(options)); } - /** - * @returns `Promise` which resolves to an `Account` object for the provided `UserAccountID`. - */ - public async getAccount(idIn: UserAccountID): Promise { - const id = args.assertUserAccountID('id', idIn); - - return this.getNetworkProvider(id.network).getAccount(id.network, id.address); - } - /** * @internal */ @@ -487,15 +451,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 +469,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 +499,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 +528,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 +557,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 +585,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)); diff --git a/packages/neo-one-client-core/src/__data__/data.ts b/packages/neo-one-client-core/src/__data__/data.ts index 194aa2454a..e955618ab7 100644 --- a/packages/neo-one-client-core/src/__data__/data.ts +++ b/packages/neo-one-client-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 BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { Hash256 } from '../Hash256'; @@ -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', }; @@ -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 74b511bb28..520ead9ffd 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -1,127 +1,75 @@ // tslint:disable deprecation import { - ABI, - ABIEvent, - ABIFunction, - Account, - AccountJSON, ActionBaseJSON, - AddressABIParameter, - AddressAttribute, - AddressContractParameter, - addressToScriptHash, + AnyContractParameterJSON, ArrayContractParameterJSON, - Asset, - AssetJSON, AttributeJSON, - AttributeUsageModel, Block, BlockJSON, BooleanContractParameter, BooleanContractParameterJSON, - BufferAttribute, - BufferAttributeModel, ByteArrayContractParameterJSON, CallReceiptJSON, - ClaimTransaction, - ClaimTransactionJSON, common, - ConfirmedClaimTransaction, - ConfirmedContractTransaction, - ConfirmedEnrollmentTransaction, - ConfirmedInvocationTransaction, - ConfirmedIssueTransaction, - ConfirmedMinerTransaction, - ConfirmedPublishTransaction, - ConfirmedRegisterTransaction, - ConfirmedStateTransaction, - ConfirmedTransactionBase, + ConfirmedTransaction, Contract, + ContractABI, + ContractABIJSON, ContractJSON, - ContractTransaction, - ContractTransactionJSON, - ECPointAttributeModel, - EnrollmentTransaction, - EnrollmentTransactionJSON, + ContractManifestJSON, ForwardValue, + Hash160ABIParameter, + Hash160ContractParameter, Hash160ContractParameterJSON, - Hash256Attribute, Hash256ContractParameterJSON, Header, HeaderJSON, - Input, - InputJSON, - InputModel, - InputOutput, IntegerABIParameter, IntegerABIReturn, IntegerContractParameter, IntegerContractParameterJSON, InteropInterfaceContractParameterJSON, InvocationDataJSON, - InvocationResultError, - InvocationResultErrorJSON, - InvocationResultSuccess, - InvocationResultSuccessJSON, - InvocationTransaction, - InvocationTransactionJSON, - InvocationTransactionModel, - InvocationTransactionModelAdd, - IssueTransaction, - IssueTransactionJSON, LogActionJSON, MapContractParameterJSON, - MinerTransaction, - MinerTransactionJSON, - NeoBalanceJSON, - NeoClaimableJSON, - NeoInputClaimableJSON, - NeoUnspentJSON, - NeoUnspentOutputJSON, NetworkSettings, NetworkSettingsJSON, NotificationActionJSON, - Output, - OutputJSON, - OutputModel, Peer, - PublicKeyAttribute, PublicKeyContractParameterJSON, - PublishTransaction, - PublishTransactionJSON, RawActionBase, RawCallReceipt, RawInvocationData, - RawInvocationResultError, RawInvocationResultErrorJSON, - RawInvocationResultSuccess, 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, - UInt160AttributeModel, - UInt256AttributeModel, UserAccount, UserAccountID, VerifyScriptResultJSON, VerifyTransactionResultJSON, - VMState, VoidContractParameterJSON, Witness, WitnessJSON, @@ -129,89 +77,55 @@ import { } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; +import { ContractEventDescriptor, ContractMethodDescriptor } from '../../../neo-one-node-core/src/manifest'; import { Hash256 } from '../Hash256'; 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, +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, features, ...optionsIn } = options; + + return { + hash: keys[0].scriptHashString, + hashHex: keys[0].scriptHashString, + abi: createContractABIJSON(abi), + groups: [], // TODO + permissions: [], // TODO + trusts: '*', + safeMethods: '*', + features: { + storage: true, + payable: true, + ...features, }, - ], - ...options, -}); - -const createOutputJSON = (options: Partial = {}): OutputJSON => ({ - n: 0, - asset: Hash256.NEO, - value: data.bigNumbers.a.toString(10), - address: keys[0].address, - ...options, -}); + 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, + return { + id: 0, + script: data.buffers.b, + manifest: createManifestJSON(manifest), + hasStorage: true, payable: true, - }, - ...options, -}); + ...optionsIn, + }; +}; const createActionBaseJSON = (options: Partial = {}): ActionBaseJSON => ({ version: 0, @@ -234,27 +148,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, }); @@ -264,54 +159,69 @@ 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, @@ -322,7 +232,6 @@ const createRawInvocationResultSuccessJSON = ( ): RawInvocationResultSuccessJSON => ({ state: 'HALT', gas_consumed: '20', - gas_cost: '10', stack: [createIntegerContractParameterJSON()], ...options, }); @@ -332,15 +241,12 @@ const createRawInvocationResultErrorJSON = ( ): RawInvocationResultErrorJSON => ({ state: 'FAULT', gas_consumed: '20', - gas_cost: '10', stack: [createIntegerContractParameterJSON()], - message: '', ...options, }); const createInvocationDataJSON = (options: Partial = {}): InvocationDataJSON => ({ - result: createInvocationResultSuccessJSON(), - asset: createAssetJSON(), + result: createTransactionResultSuccessJSON(), contracts: [createContractJSON()], deletedContractHashes: [keys[2].scriptHashString], migratedContractHashes: [[keys[0].scriptHashString, keys[1].scriptHashString]], @@ -350,135 +256,32 @@ const createInvocationDataJSON = (options: Partial = {}): In ...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(), - ...options, -}); - -const createRegisterTransactionJSON = (options: Partial = {}): RegisterTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'RegisterTransaction', - asset: createAssetJSON(), - ...options, -}); - -const createStateTransactionJSON = (options: Partial = {}): StateTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'StateTransaction', - descriptors: [], - ...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 createInvocationTransactionModel = ( - options: Partial = {}, -): InvocationTransactionModel => { - const invocation = createInvocationTransactionJSON(); - const uInt160Attribute = createUInt160AttributeJSON(); - const uInt256Attribute = createUInt256AttributeJSON(); - const bufferAttribute = createBufferAttributeJSON(); - const ecPointAttribute = createECPointAttributeJSON(); - - return new InvocationTransactionModel({ - gas: new BN(invocation.gas), + return new TransactionModel({ script: Buffer.from(invocation.script, 'hex'), version: invocation.version, - attributes: [ - new UInt160AttributeModel({ - usage: AttributeUsageModel[uInt160Attribute.usage] as 0x20, - value: common.hexToUInt160(uInt160Attribute.data), - }), - new UInt256AttributeModel({ - usage: AttributeUsageModel[uInt256Attribute.usage] as 0xa1, - value: common.hexToUInt256(uInt256Attribute.data), - }), - new BufferAttributeModel({ - usage: AttributeUsageModel[bufferAttribute.usage] as 0x90, - value: Buffer.from(bufferAttribute.data, 'hex'), - }), - new ECPointAttributeModel({ - usage: AttributeUsageModel[ecPointAttribute.usage] as 0x02, - value: common.hexToECPoint(ecPointAttribute.data), - }), - ], - inputs: invocation.vin.map((input) => new InputModel({ hash: common.hexToUInt256(input.txid), index: input.vout })), - outputs: invocation.vout.map( - (output) => - new OutputModel({ - asset: common.hexToUInt256(output.asset), - value: new BN(output.value), - address: common.hexToUInt160(addressToScriptHash(output.address)), - }), - ), - scripts: invocation.scripts.map( - (script) => - new WitnessModel({ - invocation: Buffer.from(script.invocation, 'hex'), - verification: Buffer.from(script.verification, 'hex'), - }), - ), - hash: common.hexToUInt256(invocation.txid), + attributes: [], + systemFee: new BN(0), // TODO + hash: common.hexToUInt256(invocation.hash), ...options, }); }; -const createMinerTransactionJSON = (options: Partial = {}): MinerTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'MinerTransaction', - nonce: 1234, - ...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, }); @@ -502,29 +305,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, }); @@ -547,9 +338,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, @@ -558,6 +357,7 @@ const createArrayContractParameterJSON = ( const createBooleanContractParameterJSON = ( options: Partial = {}, ): BooleanContractParameterJSON => ({ + name: 'param', type: 'Boolean', value: true, ...options, @@ -566,6 +366,7 @@ const createBooleanContractParameterJSON = ( const createByteArrayContractParameterJSON = ( options: Partial = {}, ): ByteArrayContractParameterJSON => ({ + name: 'param', type: 'ByteArray', value: Buffer.alloc(1, 0xff).toString(), ...options, @@ -574,6 +375,7 @@ const createByteArrayContractParameterJSON = ( const createHash160ContractParameterJSON = ( options: Partial = {}, ): Hash160ContractParameterJSON => ({ + name: 'param', type: 'Hash160', value: keys[0].scriptHashString, ...options, @@ -582,6 +384,7 @@ const createHash160ContractParameterJSON = ( const createHash256ContractParameterJSON = ( options: Partial = {}, ): Hash256ContractParameterJSON => ({ + name: 'param', type: 'Hash256', value: data.hash256s.a, ...options, @@ -589,10 +392,12 @@ 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()]], ...options, @@ -601,6 +406,7 @@ const createMapContractParameterJSON = (options: Partial = {}, ): PublicKeyContractParameterJSON => ({ + name: 'param', type: 'PublicKey', value: keys[0].publicKeyString, ...options, @@ -609,6 +415,7 @@ const createPublicKeyContractParameterJSON = ( const createSignatureContractParameterJSON = ( options: Partial = {}, ): SignatureContractParameterJSON => ({ + name: 'param', type: 'Signature', value: data.signatures.a, ...options, @@ -617,6 +424,7 @@ const createSignatureContractParameterJSON = ( const createStringContractParameterJSON = ( options: Partial = {}, ): StringContractParameterJSON => ({ + name: 'param', type: 'String', value: 'test', ...options, @@ -625,44 +433,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, @@ -703,8 +478,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, @@ -717,74 +492,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'), @@ -794,8 +554,9 @@ const createRawInvocationResultError = (options: Partial = {}, -): RawInvocationResultSuccess => ({ + options: Partial = {}, +): RawTransactionResultSuccess => ({ + script: '', // TODO state: 'HALT', gasConsumed: new BigNumber('10'), gasCost: new BigNumber('20'), @@ -803,7 +564,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'), @@ -812,8 +574,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'), @@ -823,7 +586,6 @@ const createInvocationResultSuccess = ( const createRawInvocationData = (options: Partial = {}): RawInvocationData => ({ result: createRawInvocationResultSuccess(), - asset: createAsset(), contracts: [createContract()], deletedContractAddresses: [keys[2].address], migratedContractAddresses: [[keys[0].address, keys[1].address]], @@ -832,7 +594,7 @@ const createRawInvocationData = (options: Partial = {}): RawI ...options, }); -const createConfirmedTransactionBase = (options: Partial = {}): ConfirmedTransactionBase => ({ +const createConfirmedTransactionBase = (options: Partial = {}): ConfirmedTransaction => ({ receipt: { blockHash: data.hash256s.a, blockIndex: 10, @@ -842,140 +604,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()], @@ -1050,8 +685,8 @@ const createTransfer = (options: Partial = {}): Transfer => ({ ...options, }); -const createAddressABIParameter = (options: Partial = {}): AddressABIParameter => ({ - type: 'Address', +const createHash160ABIParameter = (options: Partial = {}): Hash160ABIParameter => ({ + type: 'Hash160', name: 'from', ...options, }); @@ -1063,18 +698,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, @@ -1095,7 +732,7 @@ const createStringABIParameter = (options: Partial = {}): St ...options, }); -const createABI = (options: Partial = {}): ABI => ({ +const createABI = (options: Partial = {}): ContractABI => ({ ...nep5.abi(8), ...options, }); @@ -1109,7 +746,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' }, @@ -1128,25 +765,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, @@ -1154,76 +782,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(), - ], - ...options, -}); - -const createNeoClaimableInputJSON = (options: Partial = {}): NeoInputClaimableJSON => ({ - txid: data.hash256s.a, - n: 3, - value: '23', - start_height: 2000000, - end_height: 3000000, - generated: '1.23', - sys_fee: '.01', - unclaimed: '1.23', - ...options, -}); - -const createNeoClaimableJSON = (options: Partial = {}): NeoClaimableJSON => ({ - claimable: [createNeoClaimableInputJSON()], - unclaimed: '1.23', - address: keys[0].address, - ...options, -}); - -const createNeoUnspentOutputJSON = (options: Partial = {}): NeoUnspentOutputJSON => ({ - txid: data.hash256s.b, - n: 0, - value: '.034', - ...options, -}); - -const createNeoBalanceJSON = (options: Partial = {}): NeoBalanceJSON => ({ - unspent: [createNeoUnspentOutputJSON()], - asset_hash: data.hash256s.c, - asset: 'Gas', - asset_symbol: 'GAS', - amount: '.034', - ...options, -}); - -const createNeoUnspentJSON = (options: Partial = {}): NeoUnspentJSON => ({ - balance: [createNeoBalanceJSON()], - address: keys[0].address, + transactions: [createConfirmedTransaction()], ...options, }); export const factory = { - createAccountJSON, - createAssetJSON, createContractJSON, - createInputJSON, - createOutputJSON, + createAnyContractParameterJSON, createIntegerContractParameterJSON, createArrayContractParameterJSON, createBooleanContractParameterJSON, @@ -1237,17 +811,10 @@ export const factory = { createStringContractParameterJSON, createVoidContractParameterJSON, createInvocationDataJSON, - createInvocationResultSuccessJSON, - createInvocationResultErrorJSON, - createInvocationTransactionJSON, - createMinerTransactionJSON, - createClaimTransactionJSON, - createContractTransactionJSON, - createEnrollmentTransactionJSON, - createIssueTransactionJSON, - createPublishTransactionJSON, - createRegisterTransactionJSON, - createStateTransactionJSON, + createTransactionResultSuccessJSON, + createTransactionResultErrorJSON, + createTransactionJSON, + createTransactionWithInvocationDataJSON, createTransactionReceipt, createCallReceiptJSON, createLogActionJSON, @@ -1257,43 +824,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, @@ -1307,16 +860,7 @@ export const factory = { createUserAccount, createUserAccountID, createTransactionResult, - createEnrollmentTransaction, - createStateTransaction, - createAccount, createBlock, - createInvocationTransactionModel, - createNeoClaimableInputJSON, - createNeoClaimableJSON, - createNeoUnspentOutputJSON, - createNeoBalanceJSON, - createNeoUnspentJSON, createRawInvocationResultSuccessJSON, createRawInvocationResultErrorJSON, }; diff --git a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts index f1e631c369..b14f47a22e 100644 --- a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts +++ b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts @@ -1,19 +1,21 @@ import { ActionJSON, - AddressString, - Asset, - AssetJSON, - AssetNameJSON, - AssetType, - AssetTypeJSON, CallReceiptJSON, + common, ConfirmedTransaction, Contract, + ContractABI, + ContractABIJSON, + ContractGroup, + ContractGroupJSON, ContractJSON, + ContractManifest, + ContractManifestJSON, + ContractPermission, + ContractPermissionDescriptor, + ContractPermissionDescriptorJSON, + ContractPermissionJSON, InvocationResultJSON, - Output, - OutputJSON, - PublicKeyString, RawAction, RawCallReceipt, RawInvocationResult, @@ -21,40 +23,16 @@ import { scriptHashToAddress, Transaction, TransactionJSON, - VMState, } from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; - -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; -} const verifyInvocationResultSuccess = ( invocationResult: RawInvocationResult, invocationResultJSON: InvocationResultJSON | RawInvocationResultJSON, ) => { - if ( - invocationResult.state !== 'HALT' || - (invocationResultJSON.state !== VMState.HALT && invocationResultJSON.state !== 'HALT') - ) { + if (invocationResult.state !== 'HALT' || invocationResultJSON.state !== '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') { @@ -87,143 +65,77 @@ const verifyDefaultActions = ( 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 verifyAbi = (abi: ContractABI, abiJSON: ContractABIJSON) => { + // TODO + // expect(abi.returnType).toEqual(returnType); }; -const verifyAsset = ( - asset: Asset, - assetJSON: AssetJSON, - toAssetType: string = assetJSON.type, - name = assetJSON.name, +const verifyContractPermissionDescriptor = ( + desc: ContractPermissionDescriptor, + descJSON: ContractPermissionDescriptorJSON, ) => { - 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); + 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.safeMethods).toEqual(manifestJSON.safeMethods); + expect(manifest.features).toEqual(manifestJSON.features); + 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.version).toEqual(contractJSON.version); - expect(contract.address).toEqual(scriptHashToAddress(contractJSON.hash)); + expect(contract.id).toEqual(contractJSON.id); 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); + expect(contract.hasStorage).toEqual(contractJSON.hasStorage); + expect(contract.payable).toEqual(contractJSON.payable); + verifyManifest(contract.manifest, contractJSON.manifest); }; -const verifyTransactionBase = (transaction: Transaction, transactionJSON: TransactionJSON) => { - expect(transaction.hash).toEqual(transactionJSON.txid); +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[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.attributes).toEqual(transactionJSON.attributes); + expect(transaction.signers.length).toEqual(transactionJSON.signers.length); + // TODO: signers 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'); + // TODO: check script and witnesses + expect(transaction.witnesses).toEqual(transactionJSON.witnesses); + // TODO: expect(transaction.data).toEqual(transactionJSON.data); }; const verifyConfirmedTransaction = (transaction: ConfirmedTransaction, transactionJSON: TransactionJSON) => { @@ -252,20 +164,8 @@ const verifyCallReceipt = (receipt: RawCallReceipt, receiptJSON: CallReceiptJSON export const verifyDataProvider = { verifyInvocationResultSuccess, verifyDefaultActions, - verifyAssetBase, - verifyAsset, verifyContract, - verifyOutput, - verifyTransactionBase, - verifyClaimTransaction, - verifyContractTransaction, - verifyEnrollmentTransaction, - verifyInvocationTransaction, - verifyIssueTransaction, - verifyMinerTransaction, - verifyPublishTransaction, - verifyRegisterTransaction, - verifyStateTransaction, + 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 249310182d..44fa9fafc2 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 @@ -48,12 +48,7 @@ describe('RemoteUserAccountProvider', () => { ] 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, }; 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 1670833d73..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,28 +97,8 @@ 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; - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getUnspentOutput(factory.createInputJSON()); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - test('testInvokeRaw', async () => { - const value = factory.createInvocationResultSuccessJSON(); + const value = factory.createTransactionResultSuccessJSON(); mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); const result = await client.testInvokeRaw(data.buffers.a); @@ -158,7 +118,7 @@ describe('JSONRPCClient', () => { }); 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); @@ -188,23 +148,14 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); - test('getOutput', async () => { - const value = factory.createOutputJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getOutput(factory.createInputJSON()); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - - test('getClaimAmount', async () => { - const value = data.bigNumbers.a.toString(10); + 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.getClaimAmount(factory.createInputJSON()); + const result = await client.getUnclaimedGas(keys[0].address); - expect(result.toString(10)).toEqual(value); + expect(result.unclaimed).toEqual(value); + expect(result.address).toEqual(keys[0].address); expect(mockRequest.mock.calls).toMatchSnapshot(); }); @@ -268,26 +219,6 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); - test('getClaimable', async () => { - const value = factory.createNeoClaimableJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getClaimable(keys[0].address); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - - test('getUnspents', async () => { - const value = factory.createNeoUnspentJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getUnspents(keys[0].address); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - test('getTransactionHeight', async () => { const value = 5000000; mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); diff --git a/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts deleted file mode 100644 index a0319d5e56..0000000000 --- a/packages/neo-one-client-core/src/__tests__/provider/NEODataProvider.test.ts +++ /dev/null @@ -1,371 +0,0 @@ -// tslint:disable no-object-mutation -import { CallReceiptJSON, RawCallReceipt, scriptHashToAddress } 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, verifyDataProvider as verify } from '../../__data__'; -import { Hash256 } from '../../Hash256'; -import { JSONRPCClient, JSONRPCHTTPProvider, NEODataProvider } from '../../provider'; - -jest.mock('../../provider/JSONRPCClient'); - -describe('NEODataProvider', () => { - const network = 'local'; - const rpcURL = 'https://neotracker.io/rpc'; - - let client: Modifiable; - let provider: NEODataProvider; - beforeEach(() => { - provider = new NEODataProvider({ network, rpcURL }); - // tslint:disable-next-line no-any - client = (provider as any).mutableClient; - }); - - const neoNotImplementedError = (name: string) => - `${name} not implemented for the NEODataProvider. Use a NEOONEDataProvider to use this method.`; - - const verifyCallReceipt = (receipt: RawCallReceipt, receiptJSON: CallReceiptJSON) => { - verify.verifyInvocationResultSuccess(receipt.result, receiptJSON.result); - }; - - test('setRPCURL', () => { - const currentClient = client; - - provider.setRPCURL('http://localhost:1340'); - - // tslint:disable-next-line no-any - expect(currentClient).not.toBe((provider as any).mutableClient); - }); - - test('getUnclaimed', async () => { - const unclaimedJSON = factory.createNeoClaimableJSON(); - client.getClaimable = jest.fn(async () => Promise.resolve(unclaimedJSON)); - - const result = await provider.getUnclaimed(keys[0].address); - - expect(result.amount).toEqual(new BigNumber(unclaimedJSON.unclaimed)); - expect(result.unclaimed[0].hash).toEqual(unclaimedJSON.claimable[0].txid); - expect(result.unclaimed[0].index).toEqual(unclaimedJSON.claimable[0].n); - }); - - test('getUnspent', async () => { - const unspentJSON = factory.createNeoUnspentJSON(); - client.getUnspents = jest.fn(async () => Promise.resolve(unspentJSON)); - - const result = await provider.getUnspentOutputs(keys[0].address); - - expect(result).toHaveLength(1); - expect(result[0].asset).toEqual(unspentJSON.balance[0].asset_hash); - expect(result[0].value.toString(10)).toEqual(`0${unspentJSON.balance[0].unspent[0].value}`); - expect(result[0].address).toEqual(unspentJSON.address); - expect(result[0].hash).toEqual(unspentJSON.balance[0].unspent[0].txid); - expect(result[0].index).toEqual(unspentJSON.balance[0].unspent[0].n); - }); - - test('relayTransaction', async () => { - const transactionJSON = factory.createInvocationTransactionJSON({ sys_fee: '0', net_fee: '0.05' }); - client.relayTransaction = jest.fn(async () => - Promise.resolve({ - transaction: transactionJSON, - }), - ); - - const result = await provider.relayTransaction(factory.createInvocationTransactionModel(), new BigNumber(0.05)); - - verify.verifyInvocationTransaction(result.transaction, { ...transactionJSON, size: 201 }); - }); - - test('getTransactionReceipt', async () => { - const transactionReceipt = factory.createTransactionReceipt({ - globalIndex: new BigNumber(-1), - blockIndex: 10, - transactionIndex: 0, - }); - const blockJSON = factory.createBlockJSON(); - client.getTransactionHeight = jest.fn(async () => Promise.resolve(10)); - client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); - const result = await provider.getTransactionReceipt(data.hash256s.a); - - expect(result).toEqual(transactionReceipt); - }); - - test('getInvocationData', async () => { - const result = provider.getInvocationData(data.hash256s.a); - - await expect(result).rejects.toThrowError(neoNotImplementedError('getInvocationData')); - }); - - test('testInvoke', async () => { - const callReceiptJSON = factory.createRawInvocationResultSuccessJSON(); - client.testInvokeRaw = jest.fn(async () => Promise.resolve(callReceiptJSON)); - provider.getOutput = jest.fn(async () => Promise.resolve(factory.createOutput())); - provider.getAsset = jest.fn(async () => Promise.resolve(factory.createAsset())); - const result = await provider.testInvoke(factory.createInvocationTransactionModel()); - - verifyCallReceipt(result, { - // tslint:disable-next-line no-any - result: { ...callReceiptJSON, gas_consumed: '10', gas_cost: '20' } as any, - actions: [], - }); - }); - - test('getAccount', async () => { - const accountJSON = factory.createAccountJSON(); - const claimableJSON = factory.createNeoClaimableJSON(); - const unspentsJSON = factory.createNeoUnspentJSON(); - client.getAccount = jest.fn(async () => Promise.resolve(accountJSON)); - client.getClaimable = jest.fn(async () => Promise.resolve(claimableJSON)); - client.getUnspents = jest.fn(async () => Promise.resolve(unspentsJSON)); - - const result = await provider.getAccount(keys[0].address); - - 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'], - ['DutyFlag', 'Duty'], - ['GoverningToken', 'Governing'], - ['UtilityToken', 'Utility'], - ['Currency', 'Currency'], - ['Share', 'Share'], - ['Invoice', 'Invoice'], - ['Token', 'Token'], - ]; - - 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); - verify.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); - verify.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); - verify.verifyAsset(result, assetJSON, assetJSON.type, 'bar'); - }); - - test('getBlock', async () => { - const receiptData = { - blockHash: data.hash256s.a, - blockIndex: 10, - transactionIndex: 0, - globalIndex: '-1', - }; - const blockJSON = factory.createBlockJSON({ - tx: [ - factory.createMinerTransactionJSON({ data: receiptData }), - factory.createClaimTransactionJSON({ data: receiptData }), - factory.createContractTransactionJSON({ data: receiptData }), - factory.createEnrollmentTransactionJSON({ data: receiptData }), - factory.createInvocationTransactionJSON({ data: receiptData, invocationData: undefined }), - factory.createIssueTransactionJSON({ data: receiptData }), - factory.createPublishTransactionJSON({ data: receiptData }), - factory.createRegisterTransactionJSON({ data: receiptData }), - factory.createStateTransactionJSON({ data: receiptData }), - ], - }); - client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); - - 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.size).toEqual(blockJSON.size); - expect(result.transactions.length).toEqual(blockJSON.tx.length); - verify.verifyMinerTransaction(result.transactions[0], blockJSON.tx[0]); - verify.verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); - verify.verifyClaimTransaction(result.transactions[1], blockJSON.tx[1]); - verify.verifyConfirmedTransaction(result.transactions[1], blockJSON.tx[1]); - verify.verifyContractTransaction(result.transactions[2], blockJSON.tx[2]); - verify.verifyConfirmedTransaction(result.transactions[2], blockJSON.tx[2]); - verify.verifyEnrollmentTransaction(result.transactions[3], blockJSON.tx[3]); - verify.verifyConfirmedTransaction(result.transactions[3], blockJSON.tx[3]); - verify.verifyInvocationTransaction(result.transactions[4], blockJSON.tx[4]); - verify.verifyConfirmedTransaction(result.transactions[4], blockJSON.tx[4]); - verify.verifyIssueTransaction(result.transactions[5], blockJSON.tx[5]); - verify.verifyConfirmedTransaction(result.transactions[5], blockJSON.tx[5]); - verify.verifyPublishTransaction(result.transactions[6], blockJSON.tx[6]); - verify.verifyConfirmedTransaction(result.transactions[6], blockJSON.tx[6]); - verify.verifyRegisterTransaction(result.transactions[7], blockJSON.tx[7]); - verify.verifyConfirmedTransaction(result.transactions[7], blockJSON.tx[7]); - verify.verifyStateTransaction(result.transactions[8], blockJSON.tx[8]); - verify.verifyConfirmedTransaction(result.transactions[8], blockJSON.tx[8]); - }); - - test('iterBlocks', async () => { - const blockJSON = factory.createBlockJSON(); - client.getBlockCount = jest.fn(async () => Promise.resolve(2)); - client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); - - const result = await toArray(provider.iterBlocks({ indexStart: 1, indexStop: 2 })); - - expect(result.length).toEqual(1); - }); - - test('getBestBlockHash', async () => { - const hash = data.hash256s.a; - client.getBestBlockHash = jest.fn(async () => Promise.resolve(hash)); - - const result = await provider.getBestBlockHash(); - - expect(result).toEqual(hash); - }); - - test('getBlockCount', async () => { - const count = 2; - client.getBlockCount = jest.fn(async () => Promise.resolve(count)); - - const result = await provider.getBlockCount(); - - expect(result).toEqual(count); - }); - - test('getContract', async () => { - const contractJSON = factory.createContractJSON(); - client.getContract = jest.fn(async () => Promise.resolve(contractJSON)); - - const result = await provider.getContract(keys[0].address); - - verify.verifyContract(result, contractJSON); - }); - - const convertedContractParameterTypes = [ - ['Signature', 'Signature'], - ['Boolean', 'Boolean'], - ['Integer', 'Integer'], - ['Hash160', 'Address'], - ['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 }); - client.getContract = jest.fn(async () => Promise.resolve(contractJSON)); - - const result = await provider.getContract(keys[0].address); - verify.verifyContract(result, contractJSON, to); - }); - }); - - test('getMemPool', async () => { - const memPool = [data.hash256s.a]; - client.getMemPool = jest.fn(async () => Promise.resolve(memPool)); - - const result = await provider.getMemPool(); - - expect(result).toEqual(memPool); - }); - - test('getTransaction', async () => { - const transactionJSON = factory.createInvocationTransactionJSON({ invocationData: undefined }); - client.getTransaction = jest.fn(async () => Promise.resolve(transactionJSON)); - - const result = await provider.getTransaction(transactionJSON.txid); - - verify.verifyInvocationTransaction(result, transactionJSON); - }); - - test('getOutput', async () => { - const outputJSON = factory.createOutputJSON(); - const transactionJSON = factory.createInvocationTransactionJSON({ invocationData: undefined, vout: [outputJSON] }); - client.getTransaction = jest.fn(async () => Promise.resolve(transactionJSON)); - - const result = await provider.getOutput({ hash: data.hash256s.a, index: 0 }); - - verify.verifyOutput(result, outputJSON); - }); - - test('getConnectedPeers', async () => { - const peersJSON = [factory.createPeerJSON()]; - client.getConnectedPeers = jest.fn(async () => Promise.resolve(peersJSON)); - - const result = await provider.getConnectedPeers(); - - expect(result).toEqual(peersJSON); - }); - - test('getNetworkSettings', async () => { - const result = provider.getNetworkSettings(); - - await expect(result).rejects.toThrowError(neoNotImplementedError('getNetworkSettings')); - }); - - test('iterStorage', async () => { - const result = () => provider.iterStorage(keys[0].address); - - expect(result).toThrowError(neoNotImplementedError('iterStorage')); - }); - - test('iterActionsRaw', async () => { - const result = () => provider.iterActionsRaw({ indexStart: 1, indexStop: 2 }); - - expect(result).toThrowError(neoNotImplementedError('iterActionsRaw')); - }); - - test('call', async () => { - const callReceiptJSON = factory.createRawInvocationResultSuccessJSON(); - client.testInvokeRaw = jest.fn(async () => Promise.resolve(callReceiptJSON)); - - const result = await provider.call(keys[0].address, 'foo', []); - - verifyCallReceipt(result, { - // tslint:disable-next-line no-any - result: { ...callReceiptJSON, gas_consumed: '10', gas_cost: '20' } as any, - actions: [], - }); - }); - - 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 NEODataProvider({ network, rpcURL: new JSONRPCHTTPProvider(rpcURL) }); - expect(provider).toBeDefined(); - }); -}); 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 8614dbca9a..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,9 +1,14 @@ // tslint:disable no-object-mutation -import { common, scriptHashToAddress, StorageItem, StorageItemJSON } from '@neo-one/client-common'; +import { + common, + ContractParameterTypeJSON, + scriptHashToAddress, + StorageItem, + StorageItemJSON, +} from '@neo-one/client-common'; import { Modifiable } from '@neo-one/utils'; import { toArray } from '@reactivex/ix-es2015-cjs/asynciterable/toarray'; import { data, factory, keys, verifyDataProvider as verify } from '../../__data__'; -import { Hash256 } from '../../Hash256'; import { convertAction, JSONRPCClient, JSONRPCHTTPProvider, NEOONEDataProvider } from '../../provider'; jest.mock('../../provider/JSONRPCClient'); @@ -30,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(factory.createInvocationTransactionModel()); + const result = await provider.relayTransaction(factory.createTransactionModel()); - verify.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({ @@ -93,7 +76,7 @@ describe('NEOONEDataProvider', () => { }), ); - const result = await provider.relayTransaction(factory.createInvocationTransactionModel()); + const result = await provider.relayTransaction(factory.createTransactionModel()); if (result.verifyResult === undefined) { throw new Error('for TS'); @@ -105,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), ], }, ]); @@ -122,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) { @@ -140,7 +123,7 @@ describe('NEOONEDataProvider', () => { transactionData.blockIndex, transactionData.blockHash, transactionData.transactionIndex, - transactionJSON.txid, + transactionJSON.hash, ); const notificationAction = result.actions[0]; @@ -163,13 +146,6 @@ 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'); - } - verify.verifyAsset(asset, assetJSON); - expect(result.contracts.length).toEqual(invocationData.contracts.length); verify.verifyContract(result.contracts[0], invocationData.contracts[0]); @@ -187,7 +163,7 @@ describe('NEOONEDataProvider', () => { }); 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); @@ -201,69 +177,11 @@ describe('NEOONEDataProvider', () => { const callReceiptJSON = factory.createCallReceiptJSON(); client.testInvocation = jest.fn(async () => Promise.resolve(callReceiptJSON)); - const result = await provider.testInvoke(factory.createInvocationTransactionModel()); + const result = await provider.testInvoke(factory.createTransactionModel()); verify.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); - - 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'], - ['DutyFlag', 'Duty'], - ['GoverningToken', 'Governing'], - ['UtilityToken', 'Utility'], - ['Currency', 'Currency'], - ['Share', 'Share'], - ['Invoice', 'Invoice'], - ['Token', 'Token'], - ]; - - 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); - verify.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); - verify.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); - verify.verifyAsset(result, assetJSON, assetJSON.type, 'bar'); - }); - test('getBlock', async () => { const blockJSON = factory.createBlockJSON(); client.getBlock = jest.fn(async () => Promise.resolve(blockJSON)); @@ -271,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); - verify.verifyMinerTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyTransaction(result.transactions[0], blockJSON.tx[0]); verify.verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); - verify.verifyClaimTransaction(result.transactions[1], blockJSON.tx[1]); - verify.verifyConfirmedTransaction(result.transactions[1], blockJSON.tx[1]); - verify.verifyContractTransaction(result.transactions[2], blockJSON.tx[2]); - verify.verifyConfirmedTransaction(result.transactions[2], blockJSON.tx[2]); - verify.verifyEnrollmentTransaction(result.transactions[3], blockJSON.tx[3]); - verify.verifyConfirmedTransaction(result.transactions[3], blockJSON.tx[3]); - verify.verifyInvocationTransaction(result.transactions[4], blockJSON.tx[4]); - verify.verifyConfirmedTransaction(result.transactions[4], blockJSON.tx[4]); - verify.verifyIssueTransaction(result.transactions[5], blockJSON.tx[5]); - verify.verifyConfirmedTransaction(result.transactions[5], blockJSON.tx[5]); - verify.verifyPublishTransaction(result.transactions[6], blockJSON.tx[6]); - verify.verifyConfirmedTransaction(result.transactions[6], blockJSON.tx[6]); - verify.verifyRegisterTransaction(result.transactions[7], blockJSON.tx[7]); - verify.verifyConfirmedTransaction(result.transactions[7], blockJSON.tx[7]); - verify.verifyStateTransaction(result.transactions[8], blockJSON.tx[8]); - verify.verifyConfirmedTransaction(result.transactions[8], blockJSON.tx[8]); }); test('iterBlocks', async () => { @@ -339,10 +242,11 @@ describe('NEOONEDataProvider', () => { }); const convertedContractParameterTypes = [ + ['Any', 'Any'], ['Signature', 'Signature'], ['Boolean', 'Boolean'], ['Integer', 'Integer'], - ['Hash160', 'Address'], + ['Hash160', 'Hash160'], ['Hash256', 'Hash256'], ['ByteArray', 'Buffer'], ['PublicKey', 'PublicKey'], @@ -354,7 +258,16 @@ describe('NEOONEDataProvider', () => { 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); @@ -372,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); - - verify.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); - verify.verifyOutput(result, outputJSON); + verify.verifyTransaction(result, transactionJSON); }); test('getConnectedPeers', async () => { @@ -432,11 +336,7 @@ 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'); } @@ -446,7 +346,7 @@ describe('NEOONEDataProvider', () => { transactionJSON.data.blockIndex, transactionJSON.data.blockHash, transactionJSON.data.transactionIndex, - transactionJSON.txid, + transactionJSON.hash, ); }); @@ -507,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 2c8ab39b18..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.createInvocationTransaction(); + 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, factory.createInvocationTransactionModel()); + 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, factory.createInvocationTransactionModel()); - - 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/NEOProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts deleted file mode 100644 index 7f319c0e7b..0000000000 --- a/packages/neo-one-client-core/src/__tests__/provider/NEOProvider.test.ts +++ /dev/null @@ -1,195 +0,0 @@ -// 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 { NEODataProvider, NEOProvider } from '../../provider'; - -jest.mock('../../provider/NEODataProvider'); - -describe('NEOONEProvider', () => { - const network = 'main'; - const rpcURL = 'https://neotracker.io/rpc'; - - let provider: NEOProvider; - let dataProvider: Modifiable; - beforeEach(() => { - provider = new NEOProvider([{ network, rpcURL }]); - // tslint:disable-next-line no-any - dataProvider = (provider as any).mutableProviders[network]; - }); - - test('networks$', async () => { - const result = await provider.networks$.pipe(take(1)).toPromise(); - - expect(result).toEqual([network]); - }); - - test('networks$ - no networks', async () => { - const prov = new NEOProvider(); - - const result = await prov.networks$.pipe(take(1)).toPromise(); - - expect(result).toEqual([]); - }); - - test('getNetworks', () => { - const result = provider.getNetworks(); - - expect(result).toEqual([network]); - }); - - test('getNetworks - no networks', () => { - const prov = new NEOProvider(); - - const result = prov.getNetworks(); - - expect(result).toEqual([]); - }); - - test('addNetwork', () => { - const newNetwork = 'test'; - - provider.addNetwork({ network: newNetwork, rpcURL: 'https://test.neotracker.io/rpc' }); - const result = provider.getNetworks(); - - expect(result).toEqual([network, newNetwork]); - }); - - test('addNetwork - existing network', () => { - provider.addNetwork({ network, rpcURL }); - const result = provider.getNetworks(); - - expect(result).toEqual([network]); - }); - - test('getUnclaimed', async () => { - const expected = { unclaimed: [factory.createInput()], amount: data.bigNumbers.a }; - dataProvider.getUnclaimed = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.getUnclaimed(network, keys[0].address); - - 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.createInvocationTransaction(); - // tslint:disable-next-line:no-any - dataProvider.relayTransaction = jest.fn((async () => Promise.resolve(expected)) as any); - - const result = await provider.relayTransaction( - network, - factory.createInvocationTransactionModel(), - new BigNumber(0.01), - ); - - expect(result).toBe(expected); - }); - - test('getTransactionReceipt', async () => { - const expected = factory.createTransactionReceipt({ globalIndex: new BigNumber(-1) }); - dataProvider.getTransactionReceipt = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.getTransactionReceipt(network, data.hash256s.a); - - expect(result).toBe(expected); - }); - - test('getInvocationData', async () => { - dataProvider.getInvocationData = jest.fn(async () => { - throw new Error('Not Implemented.'); - }); - - const result = provider.getInvocationData(network, data.hash256s.a); - - await expect(result).rejects.toThrowError('Not Implemented'); - }); - - test('testInvoke', async () => { - const expected = factory.createRawCallReceipt({ actions: [] }); - dataProvider.testInvoke = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.testInvoke(network, factory.createInvocationTransactionModel()); - - expect(result).toBe(expected); - }); - - test('getClaimAmount', async () => { - dataProvider.getClaimAmount = jest.fn(async () => { - throw new Error('Not Implemented.'); - }); - - const result = provider.getClaimAmount(network, factory.createInput()); - - await expect(result).rejects.toThrowError('Not Implemented'); - }); - - test('getNetworkSettings', async () => { - dataProvider.getNetworkSettings = jest.fn(async () => { - throw new Error('Not Implemented.'); - }); - - const result = provider.getNetworkSettings(network); - - await expect(result).rejects.toThrowError('Not Implemented'); - }); - - 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)); - - const result = await provider.getBlockCount(network); - - expect(result).toBe(expected); - }); - - test('iterActionsRaw', async () => { - dataProvider.iterActionsRaw = jest.fn(() => { - throw new Error('Not Implemented.'); - }); - - const result = () => provider.iterActionsRaw(network); - - expect(result).toThrowError('Not Implemented'); - }); - - test('iterBlocks', async () => { - const expected = AsyncIterableX.from([factory.createBlock()]); - dataProvider.iterBlocks = jest.fn(() => expected); - - const result = provider.iterBlocks(network); - - expect(result).toBe(expected); - }); - - test('getBlockCount - unknown network', async () => { - const result = provider.getBlockCount('unknown'); - - await expect(result).rejects.toMatchSnapshot(); - }); - - test('read', () => { - const result = provider.read(network); - - expect(result).toBe(dataProvider); - }); -}); 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 523239f23e..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); 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__/user/DapiUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts index c6337ee9fe..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); @@ -240,20 +221,12 @@ describe('DapiUserAccountProvider', () => { ], ] 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); @@ -283,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); @@ -311,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); @@ -339,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); @@ -367,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/args.ts b/packages/neo-one-client-core/src/args.ts index 908116f1c1..9a73e8857b 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -1,19 +1,29 @@ // 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, + ECPoint, ForwardValue, Hash256String, InvokeSendUnsafeReceiveTransactionOptions, @@ -28,14 +38,19 @@ import { SmartContractNetworkDefinition, SmartContractNetworksDefinition, SourceMaps, + toAttributeType, TransactionOptions, Transfer, + UInt160, 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'; @@ -142,6 +157,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 +248,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 +321,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 assertABIReturn = (name: string, value?: unknown): ABIReturn => { - if (!isObject(value)) { - throw new InvalidArgumentError('ABIReturn', name, value); - } + const type = assertProperty(value, 'ContractParameter', 'type', assertContractParameterType); + const name = assertProperty(value, 'ContractParameter', 'name', assertString); - 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 +422,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,55 +490,378 @@ 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('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, '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), + }; +}; + +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, 'ContractMethodDescriptor', 'returnType', assertContractParameterType), + offset: assertProperty(value, 'ContractMethodDescriptor', 'offset', assertNullableNumber), + }; +}; + +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('ABIFunction', name, value); + throw new InvalidArgumentError('ContractEventDescriptor', name, value); } return { - name: assertProperty(value, 'ABIFunction', 'name', assertString), - parameters: assertProperty(value, 'ABIFunction', 'parameters', assertNullableArray).map((parameter) => - assertABIParameter('ABIFunction.parameters', parameter), + name: assertProperty(value, 'ContractEventDescriptor', 'name', assertString), + parameters: assertProperty(value, 'ContractEventDescriptor', 'parameters', assertNullableArray).map((parameter) => + assertContractParameter('ContractEventDescriptor.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), }; }; -const assertABIEvent = (name: string, value?: unknown): ABIEvent => { +export const assertContractABIClient = (name: string, value?: unknown): ContractABIClient => { if (!isObject(value)) { - throw new InvalidArgumentError('ABIEvent', name, value); + throw new InvalidArgumentError('ContractABI', name, value); } return { - name: assertProperty(value, 'ABIEvent', 'name', assertString), - parameters: assertProperty(value, 'ABIEvent', 'parameters', assertNullableArray).map((parameter) => - assertABIParameter('ABIEvent.parameters', parameter), + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160), + 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 assertABI = (name: string, value?: unknown): ABI => { +export const assertContractABI = (name: string, value?: unknown): ContractABI => { if (!isObject(value)) { - throw new InvalidArgumentError('ABI', name, value); + throw new InvalidArgumentError('ContractABI', name, value); } return { - functions: assertProperty(value, 'ABI', 'functions', assertNullableArray).map((func) => - assertABIFunction('ABI.functions', func), + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160), + methods: assertProperty(value, 'ContractABI', 'methods', assertArray).map((method) => + assertContractMethodDescriptor('ContractABI.methods', method), ), - events: assertProperty(value, 'ABI', 'events', assertNullableArray).map((func) => - assertABIEvent('ABI.events', func), + 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 assertUInt160 = (name: string, value?: unknown): UInt160 => { + const valueIn = assertString(name, value); + + return common.stringToUInt160(valueIn); +}; + +// TODO: should this assert some sort of string? Like an ECPointString? +const assertECPoint = (name: string, value?: unknown): ECPoint => { + const valueIn = assertString(name, value); + + return common.stringToECPoint(valueIn); +}; + +// TODO: check logic here +const assertHashOrGroup = (name: string, value?: unknown): ECPoint | UInt160 | Wildcard => { + const valueIn = assertString(name, value); + if (valueIn === '*') { + return '*'; + } + + try { + return assertUInt160(valueIn); + } catch { + // do nothing + } + + try { + return assertECPoint(valueIn); + } catch { + // do nothing + } + + return '*'; +}; + +export const assertContractManifestClient = (name: string, value?: unknown): ContractManifestClient => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractManifest', name, value); + } + + return { + hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160), + hashHex: assertProperty(value, 'ContractManifest', 'hashHex', assertString), + groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => + assertContractGroup('ContractManifest.groups', group), + ), + features: { + storage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), + payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), + }, + 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', assertUInt160), + safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), + extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), + hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), + payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), + }; +}; + +export const assertContractManifest = (name: string, value?: unknown): ContractManifest => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractManifest', name, value); + } + + return { + hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160), + hashHex: assertProperty(value, 'ContractManifest', 'hashHex', assertString), + groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => + assertContractGroup('ContractManifest.groups', group), + ), + features: { + storage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), + payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), + }, + supportedStandards: assertProperty(value, 'ContractManifest', 'supportedStandards', assertArray).map((std) => + assertString('ContractManifest.supportedStandards', std), + ), + abi: assertProperty(value, 'ContractManifest', 'abi', assertContractABI), + permissions: assertProperty(value, 'ContractManifest', 'permissions', assertArray).map((permission) => + assertContractPermission('ContractManifest.permissions', permission), + ), + trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160), + safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), + extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), + hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), + payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), + }; +}; + +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', assertECPoint), + signature: assertProperty(value, 'ContractGroup', 'signature', assertBuffer), + }; +}; + const assertSmartContractNetworkDefinition = (name: string, value?: unknown): SmartContractNetworkDefinition => { if (!isObject(value)) { throw new InvalidArgumentError('SmartContractNetworkDefinition', name, value); @@ -504,7 +897,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), }; }; @@ -589,12 +982,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 +996,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 => { @@ -720,12 +1054,6 @@ export const assertInvokeSendUnsafeReceiveTransactionOptions = ( ), sendTo: assertProperty(options, 'InvokeSendUnsafeReceiveTransactionOptions', 'sendTo', assertNullableSendTo), sendFrom: assertProperty(options, 'InvokeSendUnsafeReceiveTransactionOptions', 'sendFrom', assertNullableSendFrom), - skipSysFeeCheck: assertProperty( - options, - 'InvokeSendUnsafeReceiveTransactionOptions', - 'skipSysFeeCheck', - assertNullableBoolean, - ), }; }; diff --git a/packages/neo-one-client-core/src/nep5.ts b/packages/neo-one-client-core/src/nep5.ts index 4d3ca37f3a..59462b66ff 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,15 +42,20 @@ export interface NEP5SmartContract extends Smar ) => TransactionResult>; } -const decimalsFunction: ABIFunction = { +const decimalsFunction: ContractMethodDescriptorClient = { name: 'decimals', constant: true, parameters: [], returnType: { type: 'Integer', decimals: 0 }, }; -export const abi = (decimals: number): ABI => ({ - functions: [ +const blankScript = new ScriptBuilder().build(); +const blankHash = crypto.toScriptHash(blankScript); + +export const abi = (decimals: number): ContractABIClient => ({ + // TODO: check + hash: blankHash, + methods: [ { name: 'name', constant: true, @@ -70,11 +79,11 @@ export const abi = (decimals: number): ABI => ({ name: 'transfer', parameters: [ { - type: 'Address', + type: 'Hash160', name: 'from', }, { - type: 'Address', + type: 'Hash160', name: 'to', }, { @@ -90,7 +99,7 @@ export const abi = (decimals: number): ABI => ({ constant: true, parameters: [ { - type: 'Address', + type: 'Hash160', name: 'account', }, ], @@ -102,12 +111,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 +130,36 @@ export const abi = (decimals: number): ABI => ({ ], }); +export const manifest = (decimals: number): ContractManifestClient => ({ + hash: blankHash, // TODO: check + hashHex: common.uInt160ToHex(blankHash), // TODO: check + groups: [], + features: { + storage: true, + payable: true, + }, + supportedStandards: [], + abi: abi(decimals), + permissions: [], + trusts: '*', + safeMethods: '*', + hasStorage: true, + payable: true, +}); + 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 +172,5 @@ export const createNEP5SmartContract = ( ): NEP5SmartContract => client.smartContract>({ networks: networksDefinition, - abi: abi(decimals), + manifest: manifest(decimals), }); diff --git a/packages/neo-one-client-core/src/provider/DataProviderBase.ts b/packages/neo-one-client-core/src/provider/DataProviderBase.ts deleted file mode 100644 index a167732a11..0000000000 --- a/packages/neo-one-client-core/src/provider/DataProviderBase.ts +++ /dev/null @@ -1,294 +0,0 @@ -/// -import { - Account, - AccountJSON, - AddressString, - Asset, - Block, - BlockJSON, - common, - ConfirmedTransaction, - Contract, - GetOptions, - Hash256String, - Input, - InputOutput, - InvocationTransactionModel, - IterOptions, - NetworkSettings, - NetworkType, - Output, - Peer, - RawAction, - RawCallReceipt, - RawInvocationData, - RelayTransactionResult, - ScriptBuilderParam, - StorageItem, - Transaction, - TransactionBaseModel, - TransactionJSON, - TransactionReceipt, -} from '@neo-one/client-common'; -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; -import BigNumber from 'bignumber.js'; -import debug from 'debug'; -import { AsyncBlockIterator } from '../AsyncBlockIterator'; -import { clientUtils } from '../clientUtils'; -import { NeoNotImplementedError } from '../errors'; -import { convertAsset, convertBlock, convertContract, convertTransaction } from './convert'; -import { JSONRPCClient } from './JSONRPCClient'; -import { JSONRPCHTTPProvider } from './JSONRPCHTTPProvider'; -import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; - -const logger = debug('NEOONE:DataProvider'); - -export interface DataProviderOptions { - readonly network: NetworkType; - readonly rpcURL: string | JSONRPCProvider | JSONRPCProviderManager; - readonly iterBlocksFetchTimeoutMS?: number; - readonly iterBlocksBatchSize?: number; -} - -export interface DataProvider { - readonly setRPCURL: (rpcURL: string) => void; - readonly getUnclaimed: ( - address: AddressString, - ) => Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }>; - readonly getClaimAmount: (input: Input) => Promise; - readonly getUnspentOutputs: (address: AddressString) => Promise; - readonly relayTransaction: ( - transaction: TransactionBaseModel, - networkFee?: BigNumber, - ) => Promise; - readonly getTransactionReceipt: (hash: Hash256String, options?: GetOptions) => Promise; - readonly getInvocationData: (hash: Hash256String) => Promise; - readonly testInvoke: (transaction: InvocationTransactionModel) => Promise; - readonly getAccount: (address: AddressString) => Promise; - readonly getAsset: (hash: Hash256String) => Promise; - readonly getBlock: (hashOrIndex: Hash256String | number, options?: GetOptions) => Promise; - readonly iterBlocks: (options: IterOptions) => AsyncIterable; - readonly getBestBlockHash: () => Promise; - readonly getBlockCount: () => Promise; - readonly getContract: (address: AddressString) => Promise; - readonly getMemPool: () => Promise; - readonly getTransaction: (hash: Hash256String) => Promise; - readonly getOutput: (input: Input) => Promise; - readonly getConnectedPeers: () => Promise; - readonly getNetworkSettings: () => Promise; - readonly iterActionsRaw: (options: IterOptions) => AsyncIterable; - readonly call: ( - contract: AddressString, - method: string, - params: ReadonlyArray, - ) => Promise; - readonly iterStorage: (address: AddressString) => AsyncIterable; -} - -/** - * Implements the methods required by the `NEOONEProvider`. - */ -export abstract class DataProviderBase implements DataProvider { - public readonly network: NetworkType; - protected mutableClient: JSONRPCClient; - protected readonly iterBlocksFetchTimeoutMS: number | undefined; - protected readonly iterBlocksBatchSize: number | undefined; - - public constructor({ network, rpcURL, iterBlocksFetchTimeoutMS, iterBlocksBatchSize }: DataProviderOptions) { - this.network = network; - this.mutableClient = new JSONRPCClient(typeof rpcURL === 'string' ? new JSONRPCHTTPProvider(rpcURL) : rpcURL); - this.iterBlocksFetchTimeoutMS = iterBlocksFetchTimeoutMS; - this.iterBlocksBatchSize = iterBlocksBatchSize; - } - - public setRPCURL(rpcURL: string): void { - this.mutableClient = new JSONRPCClient(new JSONRPCHTTPProvider(rpcURL)); - } - - public async getUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - return this.capture(async () => this.executeGetUnclaimed(address), 'neo_get_unclaimed'); - } - - public async getClaimAmount(_input: Input): Promise { - throw new NeoNotImplementedError('getClaimAmount'); - } - - public async getUnspentOutputs(address: AddressString): Promise { - return this.capture(async () => this.executeGetUnspentOutputs(address), 'neo_get_unspent'); - } - - public async relayTransaction( - transaction: TransactionBaseModel, - networkFee?: BigNumber, - ): Promise { - return this.executeRelayTransaction(transaction, networkFee); - } - - public async relayStrippedTransaction( - verificationTransaction: InvocationTransactionModel, - relayTransaction: InvocationTransactionModel, - networkFee?: BigNumber, - ): Promise { - return this.executeRelayStrippedTransaction(verificationTransaction, relayTransaction, networkFee); - } - - public async getTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { - return this.executeGetTransactionReceipt(hash, options); - } - - public async getInvocationData(_hash: Hash256String): Promise { - throw new NeoNotImplementedError('getInvocationData'); - } - - public async testInvoke(transaction: InvocationTransactionModel): Promise { - return this.executeTestInvoke(transaction); - } - - public async getAccount(address: AddressString): Promise { - const account = await this.getAccountInternal(address); - - return { - address, - balances: account.balances.reduce( - (acc, { asset, value }) => ({ - ...acc, - [asset]: new BigNumber(value), - }), - {}, - ), - }; - } - - public async getAsset(hash: Hash256String): Promise { - const asset = await this.mutableClient.getAsset(hash); - - return convertAsset(asset); - } - - public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { - const block = await this.mutableClient.getBlock(hashOrIndex, options); - - return convertBlock(block, this.convertConfirmedTransaction); - } - - public iterBlocks(options: IterOptions = {}): AsyncIterable { - return AsyncIterableX.from( - new AsyncBlockIterator({ - client: this, - options, - fetchTimeoutMS: this.iterBlocksFetchTimeoutMS, - batchSize: this.iterBlocksBatchSize, - }), - ); - } - - public async getBestBlockHash(): Promise { - return this.mutableClient.getBestBlockHash(); - } - - public async getBlockCount(): Promise { - return this.mutableClient.getBlockCount(); - } - - public async getContract(address: AddressString): Promise { - const contract = await this.mutableClient.getContract(address); - - return convertContract(contract); - } - - public async getMemPool(): Promise { - return this.mutableClient.getMemPool(); - } - - public async getTransaction(hash: Hash256String): Promise { - const transaction = await this.mutableClient.getTransaction(hash); - - return convertTransaction(transaction); - } - - public async getOutput(input: Input): Promise { - return this.executeGetOutput(input); - } - - public async getConnectedPeers(): Promise { - return this.mutableClient.getConnectedPeers(); - } - - public async getNetworkSettings(): Promise { - throw new NeoNotImplementedError('getNetworkSettings'); - } - - public iterActionsRaw(_options: IterOptions = {}): AsyncIterable { - throw new NeoNotImplementedError('iterActionsRaw'); - } - - public async call( - contract: AddressString, - method: string, - params: ReadonlyArray, - ): Promise { - const testTransaction = new InvocationTransactionModel({ - version: 1, - gas: common.TEN_THOUSAND_FIXED8, - script: clientUtils.getInvokeMethodScript({ - address: contract, - method, - params, - }), - }); - - return this.testInvoke(testTransaction); - } - - public iterStorage(_address: AddressString): AsyncIterable { - throw new NeoNotImplementedError('iterStorage'); - } - - protected async getAccountInternal(address: AddressString): Promise { - return this.executeGetAccountInternal(address); - } - - protected abstract async executeGetUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }>; - - protected abstract async executeGetUnspentOutputs(address: AddressString): Promise; - - protected abstract async executeRelayTransaction( - transaction: TransactionBaseModel, - networkFee?: BigNumber, - ): Promise; - - protected abstract async executeRelayStrippedTransaction( - verificationTransaction: InvocationTransactionModel, - relayTransaction: InvocationTransactionModel, - networkFee?: BigNumber, - ): Promise; - - protected abstract async executeGetTransactionReceipt( - hash: Hash256String, - options?: GetOptions, - ): Promise; - - protected abstract async executeTestInvoke(transaction: InvocationTransactionModel): Promise; - - protected abstract async executeGetOutput(input: Input): Promise; - - protected abstract async executeGetAccountInternal(address: AddressString): Promise; - - protected abstract convertConfirmedTransaction(transaction: TransactionJSON, block: BlockJSON): ConfirmedTransaction; - - protected async capture(func: () => Promise, title: string): Promise { - try { - const result = await func(); - logger('%o', { level: 'debug', title }); - - return result; - } catch (error) { - logger('%o', { level: 'error', title, error: error.message }); - throw error; - } - } -} diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 33cfda0f85..471919b69c 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -1,20 +1,15 @@ import { - AccountJSON, AddressString, addressToScriptHash, - AssetJSON, + ApplicationLogDataJSON, BlockJSON, BufferString, CallReceiptJSON, ContractJSON, GetOptions, Hash256String, - InputJSON, InvocationDataJSON, - NeoClaimableJSON, - NeoUnspentJSON, NetworkSettingsJSON, - OutputJSON, Peer, PrivateNetworkSettings, RawInvocationResultJSON, @@ -22,8 +17,9 @@ import { StorageItemJSON, TransactionJSON, TransactionReceiptJSON, + UnclaimedGASJSON, + VersionJSON, } from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; import { RelayTransactionError } from '../errors'; import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; @@ -34,33 +30,6 @@ export class JSONRPCClient { this.provider = provider; } - public async getClaimable(address: AddressString): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'getclaimable', - params: [address], - }), - ); - } - - public async getAccount(address: AddressString): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'getaccountstate', - params: [address], - }), - ); - } - - public async getAsset(hash: Hash256String): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'getassetstate', - params: [hash], - }), - ); - } - public async getBlock(hashOrIndex: Hash256String | number, options: GetOptions = {}): Promise { const { timeoutMS } = options; @@ -103,24 +72,6 @@ export class JSONRPCClient { ); } - public async getUnspentOutput(input: InputJSON): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'gettxout', - params: [input.txid, input.vout], - }), - ); - } - - public async getUnspents(address: AddressString): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'getunspents', - params: [address], - }), - ); - } - public async testInvokeRaw( script: BufferString, verifications: readonly BufferString[] = [], @@ -187,26 +138,15 @@ export class JSONRPCClient { ); } - public async getOutput(input: InputJSON): Promise { + public async getUnclaimedGas(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'getoutput', - params: [input.txid, input.vout], + method: 'getunclaimedgas', + params: [address], }), ); } - public async getClaimAmount(input: InputJSON): Promise { - return this.withInstance(async (provider) => - provider - .request({ - method: 'getclaimamount', - params: [input.txid, input.vout], - }) - .then((res) => new BigNumber(res)), - ); - } - public async getAllStorage(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ @@ -246,6 +186,36 @@ export class JSONRPCClient { ); } + public async getBlockHash(index: number): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getblockhash', + params: [index], + }), + ); + } + + 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/NEODataProvider.ts b/packages/neo-one-client-core/src/provider/NEODataProvider.ts deleted file mode 100644 index da4be423af..0000000000 --- a/packages/neo-one-client-core/src/provider/NEODataProvider.ts +++ /dev/null @@ -1,307 +0,0 @@ -/// -import { - AccountJSON, - AddressString, - assertAttributeUsageJSON, - AttributeJSON, - AttributeModel, - AttributeUsageModel, - BlockJSON, - BufferAttributeModel, - ClaimTransactionModel, - common, - ConfirmedTransaction, - ECPointAttributeModel, - GetOptions, - Hash256String, - Input, - InputJSON, - InputOutput, - InvocationTransactionModel, - Output, - RawCallReceipt, - RelayTransactionResult, - scriptHashToAddress, - TransactionBaseJSON, - TransactionBaseModel, - TransactionJSON, - TransactionReceipt, - TransactionTypeModel, - UInt160AttributeModel, - UInt256AttributeModel, - utils, - VMState, -} from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; -import _ from 'lodash'; -import { interval } from 'rxjs'; -import { filter, switchMap, take, timeout } from 'rxjs/operators'; -import { NeoNotImplementedError, UnknownTransactionError } from '../errors'; -import { - convertCallReceipt, - convertInput, - convertInputs, - convertOutput, - convertRelayTransactionResult, - convertTransactionBase, -} from './convert'; -import { DataProviderBase } from './DataProviderBase'; - -/** - * Implements the methods required by the `NEOONEProvider` using a NEO node. - */ -export class NEODataProvider extends DataProviderBase { - protected async executeGetOutput(input: Input): Promise { - const transaction = await this.getTransaction(input.hash); - - return transaction.outputs[input.index]; - } - protected async executeTestInvoke(transaction: InvocationTransactionModel): Promise { - const scriptHashesForVerifying = await transaction.getScriptHashesForVerifying({ - getOutput: this.getOutput, - getAsset: this.getAsset, - }); - - const result = await this.mutableClient.testInvokeRaw(transaction.script.toString('hex'), scriptHashesForVerifying); - const gasConsumed = new BigNumber(result.gas_consumed).lt(utils.TEN_BIG_NUMBER) - ? '0' - : new BigNumber(result.gas_consumed).minus(utils.TEN_BIG_NUMBER).toString(); - - if (result.state === 'HALT') { - return convertCallReceipt({ - result: { - state: VMState.HALT, - gas_consumed: gasConsumed, - gas_cost: result.gas_consumed, - stack: result.stack, - }, - actions: [], - }); - } - - return convertCallReceipt({ - result: { - state: VMState.FAULT, - gas_consumed: gasConsumed, - gas_cost: result.gas_consumed, - stack: result.stack, - message: '', - }, - actions: [], - }); - } - protected async executeGetTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { - let watchTimeoutMS = 120000; - if (options !== undefined && options.timeoutMS !== undefined) { - watchTimeoutMS = options.timeoutMS; - } - - let height: number | undefined; - try { - height = await interval(5000) - .pipe( - switchMap(async () => { - try { - // tslint:disable-next-line prefer-immediate-return - const result = await this.mutableClient.getTransactionHeight(hash); - - // tslint:disable-next-line no-var-before-return - return result; - } catch { - return undefined; - } - }), - filter((transactionHeight) => transactionHeight !== undefined), - take(1), - timeout(new Date(Date.now() + watchTimeoutMS)), - ) - .toPromise(); - } catch { - throw new UnknownTransactionError(hash); - } - - if (height === undefined) { - throw new UnknownTransactionError(hash); - } - const block = await this.getBlock(height); - - return { - blockIndex: height, - blockHash: block.hash, - transactionIndex: block.transactions.findIndex((transaction) => - common.uInt256Equal(common.hexToUInt256(transaction.hash), common.hexToUInt256(hash)), - ), - globalIndex: new BigNumber(-1), - }; - } - protected async executeRelayTransaction( - transaction: TransactionBaseModel, - networkFee: BigNumber = utils.ZERO_BIG_NUMBER, - ): Promise { - const transactionSerialized = transaction.serializeWire(); - await this.mutableClient.sendRawTransaction(transactionSerialized.toString('hex')); - - const transactionBase: TransactionBaseJSON = { - txid: transaction.hashHex, - size: transactionSerialized.byteLength, - version: transaction.version, - attributes: transaction.attributes.map(this.convertAttributeModel), - vin: transaction.inputs.map((input) => ({ - txid: input.hashHex, - vout: input.index, - })), - vout: transaction.outputs.map((output, n) => ({ - n, - asset: common.uInt256ToHex(output.asset), - value: output.value.toString(), - address: scriptHashToAddress(common.uInt160ToHex(output.address)), - })), - scripts: transaction.scripts.map((script) => ({ - invocation: script.invocation.toString('hex'), - verification: script.verification.toString('hex'), - })), - sys_fee: utils.ZERO.toString(), - net_fee: networkFee.toString(), - data: undefined, - }; - - if (transaction.type === TransactionTypeModel.Claim) { - return convertRelayTransactionResult({ - transaction: { - ...transactionBase, - type: 'ClaimTransaction', - claims: (transaction as ClaimTransactionModel).claims.map((input) => ({ - txid: input.hashHex, - vout: input.index, - })), - }, - }); - } - if (transaction.type === TransactionTypeModel.Invocation) { - return convertRelayTransactionResult({ - transaction: { - ...transactionBase, - type: 'InvocationTransaction', - script: (transaction as InvocationTransactionModel).script.toString('hex'), - gas: (transaction as InvocationTransactionModel).gas.toString(), - }, - }); - } - - throw new NeoNotImplementedError('Transaction types besides Claim & Invocation are'); - } - - protected async executeRelayStrippedTransaction( - verificationTransaction: InvocationTransactionModel, - _relayTransaction: InvocationTransactionModel, - networkFee?: BigNumber, - ): Promise { - return this.executeRelayTransaction(verificationTransaction, networkFee); - } - - protected async executeGetUnspentOutputs(address: AddressString): Promise { - const unspents = await this.mutableClient.getUnspents(address); - - return _.flatten( - unspents.balance.map(({ unspent, asset_hash }) => - unspent.map(({ txid, n, value }) => { - const output = convertOutput({ address, asset: common.add0x(asset_hash), value, n }); - const input = convertInput({ txid, vout: n }); - - return { - ...input, - ...output, - }; - }), - ), - ); - } - protected async executeGetUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - const claimable = await this.mutableClient.getClaimable(address); - - return { - unclaimed: convertInputs( - claimable.claimable.map(({ txid, n }) => ({ txid, vout: n })), - ), - amount: new BigNumber(claimable.unclaimed), - }; - } - - protected async executeGetAccountInternal(address: AddressString): Promise { - const [account, { claimable }, unspents] = await Promise.all([ - this.mutableClient.getAccount(address), - this.mutableClient.getClaimable(address), - this.mutableClient.getUnspents(address), - ]); - - return { - version: account.version, - script_hash: account.script_hash, - frozen: account.frozen, - votes: account.votes, - balances: account.balances, - unspent: _.flatten( - unspents.balance.map(({ unspent }) => unspent.map(({ txid, n }) => ({ txid, vout: n }))), - ), - unclaimed: claimable.map(({ txid, n }) => ({ txid, vout: n })), - }; - } - - protected convertConfirmedTransaction(transaction: TransactionJSON, block: BlockJSON): ConfirmedTransaction { - const data = { - blockHash: block.hash, - blockIndex: block.index, - transactionIndex: block.tx.findIndex((tx) => tx.txid === transaction.txid), - globalIndex: new BigNumber(-1), - }; - - return convertTransactionBase( - transaction, - (invocation, transactionBase) => ({ - ...transactionBase, - type: 'InvocationTransaction', - script: invocation.script, - gas: new BigNumber(invocation.gas), - receipt: data, - }), - // tslint:disable-next-line no-any - (converted) => ({ ...converted, receipt: data } as any), - ); - } - - private convertAttributeModel(attribute: AttributeModel): AttributeJSON { - const usage = assertAttributeUsageJSON(AttributeUsageModel[attribute.usage]); - - if (attribute instanceof UInt160AttributeModel) { - return { - usage, - data: common.uInt160ToHex(attribute.value), - }; - } - - if (attribute instanceof UInt256AttributeModel) { - return { - usage, - data: common.uInt256ToHex(attribute.value), - }; - } - - if (attribute instanceof ECPointAttributeModel) { - return { - usage, - data: common.ecPointToHex(attribute.value), - }; - } - - if (attribute instanceof BufferAttributeModel) { - return { - usage, - data: attribute.value.toString('hex'), - }; - } - - throw new Error('For TS'); - } -} diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index f8a821bc5f..c5d948b144 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -1,29 +1,68 @@ /// import { - AccountJSON, AddressString, + Attribute, + AttributeJSON, Block, + BlockJSON, + common, ConfirmedTransaction, + Contract, + ContractABI, + ContractABIJSON, + ContractEventDescriptor, + ContractEventDescriptorJSON, + ContractGroup, + ContractGroupJSON, + ContractJSON, + ContractManifest, + ContractManifestJSON, + ContractMethodDescriptor, + ContractMethodDescriptorJSON, + ContractParameterDefinition, + ContractParameterDefinitionJSON, + ContractParameterType, + ContractParameterTypeJSON, + ContractPermission, + ContractPermissionDescriptor, + ContractPermissionDescriptorJSON, + ContractPermissionJSON, DeveloperProvider, GetOptions, Hash256String, - Input, - InputOutput, - InvocationTransactionModel, + InvocationDataJSON, IterOptions, + JSONHelper, NetworkSettings, - Output, + NetworkSettingsJSON, + NetworkType, + Peer, PrivateNetworkSettings, RawAction, RawCallReceipt, RawInvocationData, + RawStorageChange, RelayTransactionResult, + RelayTransactionResultJSON, + ScriptBuilderParam, + scriptHashToAddress, + Signer, + SignerJSON, + StorageChangeJSON, StorageItem, StorageItemJSON, - TransactionBaseModel, + toAttributeType, + Transaction, TransactionJSON, + TransactionModel, TransactionReceipt, + TransactionReceiptJSON, + TransactionWithInvocationDataJSON, utils, + VerifyTransactionResult, + VerifyTransactionResultJSON, + WildcardContainer, + WildcardContainerJSON, } from '@neo-one/client-common'; import { utils as commonUtils } from '@neo-one/utils'; import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; @@ -31,30 +70,63 @@ 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 { - convertCallReceipt, - convertConfirmedTransaction, - convertInputs, - convertInvocationData, - convertNetworkSettings, - convertOutput, - convertRelayTransactionResult, - convertStorageItem, -} from './convert'; -import { DataProviderBase } from './DataProviderBase'; +import { convertAction, convertCallReceipt, convertInvocationResult } from './convert'; +import { JSONRPCClient } from './JSONRPCClient'; +import { JSONRPCHTTPProvider } from './JSONRPCHTTPProvider'; +import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; + +const logger = debug('NEOONE:DataProvider'); + +export interface NEOONEDataProviderOptions { + readonly network: NetworkType; + readonly rpcURL: string | JSONRPCProvider | JSONRPCProviderManager; + readonly iterBlocksFetchTimeoutMS?: number; + readonly iterBlocksBatchSize?: number; +} /** * Implements the methods required by the `NEOONEProvider` as well as the `DeveloperProvider` interface using a NEO•ONE node. */ -export class NEOONEDataProvider extends DataProviderBase implements DeveloperProvider { - public async getClaimAmount(input: Input): Promise { - return this.capture( - async () => this.mutableClient.getClaimAmount({ txid: input.hash, vout: input.index }), - 'neo_get_claim_amount', - ); +export class NEOONEDataProvider implements DeveloperProvider { + public readonly network: NetworkType; + private mutableClient: JSONRPCClient; + private readonly iterBlocksFetchTimeoutMS: number | undefined; + private readonly iterBlocksBatchSize: number | undefined; + + public constructor({ network, rpcURL, iterBlocksFetchTimeoutMS, iterBlocksBatchSize }: NEOONEDataProviderOptions) { + this.network = network; + this.mutableClient = new JSONRPCClient(typeof rpcURL === 'string' ? new JSONRPCHTTPProvider(rpcURL) : rpcURL); + this.iterBlocksFetchTimeoutMS = iterBlocksFetchTimeoutMS; + this.iterBlocksBatchSize = iterBlocksBatchSize; + } + + public setRPCURL(rpcURL: string): void { + this.mutableClient = new JSONRPCClient(new JSONRPCHTTPProvider(rpcURL)); + } + + public async getUnclaimed(address: AddressString): Promise { + return this.capture(async () => { + const result = await this.mutableClient.getUnclaimedGas(address); + + return new BigNumber(result.unclaimed); + }, 'neo_get_unclaimed'); + } + + public async relayTransaction(transaction: TransactionModel): Promise { + const result = await this.mutableClient.relayTransaction(transaction.serializeWire().toString('hex')); + + return this.convertRelayTransactionResult(result); + } + + public async getTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { + const result = await this.mutableClient.getTransactionReceipt(hash, options); + + return { ...result, globalIndex: new BigNumber(result.globalIndex) }; } public async getInvocationData(hash: Hash256String): Promise { @@ -67,7 +139,7 @@ export class NEOONEDataProvider extends DataProviderBase implements DeveloperPro throw new MissingTransactionDataError(hash); } - return convertInvocationData( + return this.convertInvocationData( invocationData, transaction.data.blockHash, transaction.data.blockIndex, @@ -76,6 +148,18 @@ export class NEOONEDataProvider extends DataProviderBase implements DeveloperPro ); } + public async testInvoke(transaction: TransactionModel): Promise { + const receipt = await this.mutableClient.testInvocation(transaction.serializeWire().toString('hex')); + + return convertCallReceipt(receipt); + } + + public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { + const block = await this.mutableClient.getBlock(hashOrIndex, options); + + return this.convertBlock(block); + } + public iterBlocks(options: IterOptions = {}): AsyncIterable { return AsyncIterableX.from( new AsyncBlockIterator({ @@ -87,30 +171,67 @@ export class NEOONEDataProvider extends DataProviderBase implements DeveloperPro ); } + public async getBestBlockHash(): Promise { + return this.mutableClient.getBestBlockHash(); + } + + public async getBlockCount(): Promise { + return this.mutableClient.getBlockCount(); + } + + public async getContract(address: AddressString): Promise { + const contract = await this.mutableClient.getContract(address); + + return this.convertContract(contract); + } + + public async getMemPool(): Promise { + return this.mutableClient.getMemPool(); + } + + public async getTransaction(hash: Hash256String): Promise { + const transaction = await this.mutableClient.getTransaction(hash); + + return this.convertTransaction(transaction); + } + + public async getConnectedPeers(): Promise { + return this.mutableClient.getConnectedPeers(); + } + public async getNetworkSettings(): Promise { const settings = await this.mutableClient.getNetworkSettings(); - return convertNetworkSettings(settings); + 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 []; - }), - ); + const actions = _.flatten(block.transactions.map((transaction) => [...transaction?.invocationData?.actions])); return AsyncIterableX.of(...actions); }), ); } + public async call( + contract: AddressString, + method: string, + params: ReadonlyArray, + ): Promise { + const testTransaction = new TransactionModel({ + systemFee: utils.ZERO, // TODO: need to get the systemFee? + script: clientUtils.getInvokeMethodScript({ + address: contract, + method, + params, + }), + }); + + return this.testInvoke(testTransaction); + } + public async runConsensusNow(): Promise { return this.mutableClient.runConsensusNow(); } @@ -147,96 +268,338 @@ export class NEOONEDataProvider extends DataProviderBase implements DeveloperPro return AsyncIterableX.from(this.mutableClient.getAllStorage(address).then((res) => AsyncIterableX.from(res))).pipe( // tslint:disable-next-line no-any flatten() as any, - map(convertStorageItem), + map((storageItem) => this.convertStorageItem(storageItem)), ); } - protected async executeGetOutput(input: Input): Promise { - const output = await this.mutableClient.getOutput({ - txid: input.hash, - vout: input.index, - }); - - return convertOutput(output); + private convertStorageItem(storageItem: StorageItemJSON): StorageItem { + return { + address: scriptHashToAddress(storageItem.hash), + key: storageItem.key, + value: storageItem.value, + }; } - protected async executeTestInvoke(transaction: InvocationTransactionModel): Promise { - const receipt = await this.mutableClient.testInvocation(transaction.serializeWire().toString('hex')); + private convertBlock(block: BlockJSON): Block { + return { + version: block.version, + hash: block.hash, + previousBlockHash: block.previousblockhash, + merkleRoot: block.merkleroot, + time: new BigNumber(block.time), + consensusData: + block.consensusdata === undefined // TODO: check + ? undefined + : { + primaryIndex: block.consensusdata.primary, + nonce: block.consensusdata.nonce, + }, + index: block.index, + nextConsensus: block.nextconsensus, + witness: block.witnesses[0], + witnesses: block.witnesses, + size: block.size, + transactions: block.tx.map((transaction) => this.convertConfirmedTransaction(transaction)), + }; + } - return convertCallReceipt(receipt); + private convertTransaction(transaction: TransactionJSON): Transaction { + return { + version: transaction.version, + nonce: transaction.nonce, + sender: scriptHashToAddress(transaction.sender), + 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, + }; } - protected async executeRelayTransaction( - transaction: TransactionBaseModel, - _networkFee?: BigNumber, - ): Promise { - const result = await this.mutableClient.relayTransaction(transaction.serializeWire().toString('hex')); + 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 convertRelayTransactionResult(result); + private convertSigner(signer: SignerJSON): Signer { + return { + account: scriptHashToAddress(signer.account), + scopes: signer.scopes, + allowedContracts: signer.allowedcontracts?.map(scriptHashToAddress), + allowedGroups: signer.allowedgroups?.map((group) => common.stringToECPoint(group)), // TODO: check + }; } - protected async executeRelayStrippedTransaction( - verificationTransaction: InvocationTransactionModel, - relayTransaction: InvocationTransactionModel, - _networkFee?: BigNumber, - ): Promise { - const result = await this.mutableClient.relayStrippedTransaction( - verificationTransaction.serializeWire().toString('hex'), - relayTransaction.serializeWire().toString('hex'), + private convertConfirmedTransaction(transaction: TransactionWithInvocationDataJSON): ConfirmedTransaction { + if (transaction.data === undefined) { + /* istanbul ignore next */ + throw new Error('Unexpected undefined data'); + } + if (transaction.invocationData === undefined) { + throw new MissingTransactionDataError(transaction.hash); + } + + const invocationData = this.convertInvocationData( + transaction.invocationData, + transaction.data.blockHash, + transaction.data.blockIndex, + transaction.hash, + transaction.data.transactionIndex, ); - return convertRelayTransactionResult(result); + return { + ...this.convertTransaction(transaction), + invocationData, + receipt: this.convertTransactionReceipt(transaction.data), + }; } - protected async executeGetTransactionReceipt(hash: Hash256String, options?: GetOptions): Promise { - const result = await this.mutableClient.getTransactionReceipt(hash, options); + private convertAttributes(attributes: readonly AttributeJSON[]): readonly Attribute[] { + return attributes.map((attribute) => ({ + type: toAttributeType(attribute.type), + })); + } - return { ...result, globalIndex: new BigNumber(result.globalIndex) }; + private convertContract(contract: ContractJSON): Contract { + return { + id: contract.id, + script: contract.script, + manifest: this.convertContractManifest(contract.manifest), + hasStorage: contract.hasStorage, + payable: contract.payable, + }; + } + + private convertContractManifest(manifest: ContractManifestJSON): ContractManifest { + return { + hash: common.stringToUInt160(manifest.hash), + hashHex: common.uInt160ToHex(common.stringToUInt160(manifest.hashHex)), + groups: manifest.groups.map(this.convertContractGroup), + features: { + storage: manifest.features.storage, + payable: manifest.features.payable, + }, + supportedStandards: manifest.supportedStandards, + abi: this.convertContractABI(manifest.abi), + permissions: manifest.permissions.map(this.convertContractPermission), + trusts: this.convertWildcardContainer(manifest.trusts, common.stringToUInt160), + safeMethods: manifest.safeMethods, + extra: manifest.extra, + hasStorage: manifest.features.storage, + payable: manifest.features.payable, + }; + } + + private convertContractGroup(group: ContractGroupJSON): ContractGroup { + return { + publicKey: common.stringToECPoint(group.publicKey), // TODO: check this + signature: group.signature, + }; + } + + private convertContractPermission(permission: ContractPermissionJSON): ContractPermission { + return { + contract: this.convertContractPermissionDescriptor(permission.contract), + methods: this.convertWildcardContainer(permission.methods, (str) => str), + }; + } + + private convertWildcardContainer( + container: WildcardContainerJSON, + converter: (val: TJSON) => T, + ): WildcardContainer { + if (container === '*') { + return '*'; + } + + return container.map(converter); + } + + private convertContractPermissionDescriptor( + descriptor: ContractPermissionDescriptorJSON, + ): ContractPermissionDescriptor { + const hashOrGroup = descriptor.isWildcard + ? '*' + : descriptor.isGroup + ? common.stringToECPoint(descriptor.hashOrGroup) + : common.stringToUInt160(descriptor.hashOrGroup); // TODO: check + + return { + hashOrGroup, + isHash: descriptor.isHash, + isGroup: descriptor.isGroup, + isWildcard: descriptor.isWildcard, + }; + } + + private convertContractABI(abi: ContractABIJSON): ContractABI { + return { + hash: common.stringToUInt160(abi.hash), + methods: abi.methods.map(this.convertContractMethodDescriptor), + events: abi.events.map(this.convertContractEventDescriptor), + }; } - protected async executeGetUnspentOutputs(address: AddressString): Promise { - const account = await this.getAccountInternal(address); - const outputs = await Promise.all( - account.unspent.map( - async (input): Promise => { - const outputJSON = await this.mutableClient.getUnspentOutput(input); + private convertContractEventDescriptor(event: ContractEventDescriptorJSON): ContractEventDescriptor { + return { + name: event.name, + parameters: event.parameters.map(this.convertContractParameterDefinition), + }; + } - if (outputJSON === undefined) { - return undefined; - } + private convertContractMethodDescriptor(method: ContractMethodDescriptorJSON): ContractMethodDescriptor { + return { + name: method.name, + parameters: method.parameters.map(this.convertContractParameterDefinition), + returnType: this.convertContractParameterType(method.returnType), + offset: method.offset, + }; + } - const output = convertOutput(outputJSON); + 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': + return 'Boolean'; + case 'Integer': + return 'Integer'; + case 'Hash160': + return 'Hash160'; + case 'Hash256': + return 'Hash256'; + case 'ByteArray': + return 'Buffer'; + case 'PublicKey': + return 'PublicKey'; + case 'String': + return 'String'; + case 'Array': + return 'Array'; + case 'Map': + return 'Map'; + case 'InteropInterface': + return 'InteropInterface'; + case 'Void': + return 'Void'; + /* istanbul ignore next */ + default: + commonUtils.assertNever(param); + throw new Error('For TS'); + } + } - return { - asset: output.asset, - value: output.value, - address: output.address, - hash: input.txid, - index: input.vout, - }; - }, + private convertInvocationData( + data: InvocationDataJSON, + blockHash: string, + blockIndex: number, + transactionHash: string, + transactionIndex: number, + ): RawInvocationData { + return { + result: convertInvocationResult(data.result), + contracts: data.contracts.map((contract) => this.convertContract(contract)), + deletedContractAddresses: data.deletedContractHashes.map(scriptHashToAddress), + migratedContractAddresses: data.migratedContractHashes.map( + ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)], ), - ); + 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 outputs.filter(commonUtils.notNull); + return { + type: 'Delete', + address: scriptHashToAddress(storageChange.hash), + key: storageChange.key, + }; } - protected async executeGetUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - const account = await this.getAccountInternal(address); - const amounts = await Promise.all(account.unclaimed.map(async (input) => this.mutableClient.getClaimAmount(input))); + private convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { return { - unclaimed: convertInputs(account.unclaimed), - amount: amounts.reduce((acc, amount) => acc.plus(amount), utils.ZERO_BIG_NUMBER), + issueGASFee: new BigNumber(settings.issueGASFee), }; } - protected async executeGetAccountInternal(address: AddressString): Promise { - return this.mutableClient.getAccount(address); + private convertRelayTransactionResult(result: RelayTransactionResultJSON): RelayTransactionResult { + const transaction = this.convertTransaction(result.transaction); + const verifyResult = + result.verifyResult === undefined ? undefined : this.convertVerifyResult(transaction.hash, 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, + ), + ), + })), + }; } - protected convertConfirmedTransaction(transaction: TransactionJSON): ConfirmedTransaction { - return convertConfirmedTransaction(transaction); + private async capture(func: () => Promise, title: string): Promise { + try { + const result = await func(); + logger('%o', { level: 'debug', title }); + + return result; + } catch (error) { + logger('%o', { level: 'error', title, error: error.message }); + throw error; + } } } diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index 3ceec546a1..8ca89c831b 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -1,14 +1,40 @@ -import { NetworkType } from '@neo-one/client-common'; -import { DataProviderOptions } from './DataProviderBase'; -import { NEOONEDataProvider } from './NEOONEDataProvider'; -import { ProviderBase } from './ProviderBase'; +import { + AddressString, + Block, + GetOptions, + Hash256String, + IterOptions, + NetworkSettings, + NetworkType, + RawAction, + RawCallReceipt, + RawInvocationData, + RelayTransactionResult, + ScriptBuilderParam, + Transaction, + TransactionModel, + TransactionReceipt, +} from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { UnknownNetworkError } from '../errors'; +import { Provider } from '../user'; +import { NEOONEDataProvider, NEOONEDataProviderOptions } from './NEOONEDataProvider'; /** * Implements the `Provider` interface expected by a `LocalUserAccountProvider` using a NEO•ONE node. */ -export class NEOONEProvider extends ProviderBase { - public constructor(options: ReadonlyArray = []) { - super(); +export class NEOONEProvider implements Provider { + public readonly networks$: Observable; + private readonly networksInternal$: BehaviorSubject; + // tslint:disable-next-line readonly-keyword + private readonly mutableProviders: { [key: string]: NEOONEDataProvider | undefined }; + + public constructor(options: ReadonlyArray = []) { + this.networksInternal$ = new BehaviorSubject([]); + this.networks$ = this.networksInternal$; + this.mutableProviders = {}; + const networks = options.map((opts) => { this.mutableProviders[opts.network] = opts instanceof NEOONEDataProvider ? opts : new NEOONEDataProvider(opts); @@ -18,10 +44,80 @@ export class NEOONEProvider extends ProviderBase { this.networksInternal$.next(networks); } - protected createDataProvider(options: { - readonly network: NetworkType; - readonly rpcURL: string; - }): NEOONEDataProvider { - return new NEOONEDataProvider(options); + public getNetworks(): readonly NetworkType[] { + return this.networksInternal$.getValue(); + } + + public addNetwork(options: { readonly network: NetworkType; readonly rpcURL: string }): void { + const { network, rpcURL } = options; + this.mutableProviders[network] = new NEOONEDataProvider({ network, rpcURL }); + const networks = this.networksInternal$.value.filter((net) => network !== net).concat([network]); + this.networksInternal$.next(networks); + } + + public async getUnclaimed(network: NetworkType, address: AddressString): Promise { + return this.getProvider(network).getUnclaimed(address); + } + + public async relayTransaction(network: NetworkType, transaction: TransactionModel): Promise { + return this.getProvider(network).relayTransaction(transaction); + } + + public async getTransactionReceipt( + network: NetworkType, + hash: Hash256String, + options?: GetOptions, + ): Promise { + return this.getProvider(network).getTransactionReceipt(hash, options); + } + + public async getInvocationData(network: NetworkType, hash: Hash256String): Promise { + return this.getProvider(network).getInvocationData(hash); + } + + public async testInvoke(network: NetworkType, transaction: TransactionModel): Promise { + return this.getProvider(network).testInvoke(transaction); + } + + public async call( + network: NetworkType, + contract: AddressString, + method: string, + params: ReadonlyArray, + ): Promise { + return this.getProvider(network).call(contract, method, params); + } + + public async getNetworkSettings(network: NetworkType): Promise { + return this.getProvider(network).getNetworkSettings(); + } + + public async getBlockCount(network: NetworkType): Promise { + return this.getProvider(network).getBlockCount(); + } + + public async getTransaction(network: NetworkType, hash: Hash256String): Promise { + return this.getProvider(network).getTransaction(hash); + } + + public read(network: NetworkType): NEOONEDataProvider { + return this.getProvider(network); + } + + 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); + } + + private getProvider(network: NetworkType): NEOONEDataProvider { + const provider = this.mutableProviders[network]; + if (provider === undefined) { + throw new UnknownNetworkError(network); + } + + return provider; } } diff --git a/packages/neo-one-client-core/src/provider/NEOProvider.ts b/packages/neo-one-client-core/src/provider/NEOProvider.ts deleted file mode 100644 index 3f546146ee..0000000000 --- a/packages/neo-one-client-core/src/provider/NEOProvider.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NetworkType } from '@neo-one/client-common'; -import { DataProviderOptions } from './DataProviderBase'; -import { NEODataProvider } from './NEODataProvider'; -import { ProviderBase } from './ProviderBase'; - -/** - * Implements the `Provider` interface expected by a `LocalUserAccountProvider` using a NEO node. - */ -export class NEOProvider extends ProviderBase { - public constructor(options: ReadonlyArray = []) { - super(); - const networks = options.map((opts) => { - this.mutableProviders[opts.network] = opts instanceof NEODataProvider ? opts : new NEODataProvider(opts); - - return opts.network; - }); - - this.networksInternal$.next(networks); - } - - protected createDataProvider(options: { readonly network: NetworkType; readonly rpcURL: string }): NEODataProvider { - return new NEODataProvider(options); - } -} diff --git a/packages/neo-one-client-core/src/provider/ProviderBase.ts b/packages/neo-one-client-core/src/provider/ProviderBase.ts deleted file mode 100644 index 3475a9b15f..0000000000 --- a/packages/neo-one-client-core/src/provider/ProviderBase.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { - Account, - AddressString, - Block, - GetOptions, - Hash256String, - Input, - InputOutput, - InvocationTransactionModel, - IterOptions, - NetworkSettings, - NetworkType, - Output, - RawAction, - RawCallReceipt, - RawInvocationData, - RelayTransactionResult, - ScriptBuilderParam, - Transaction, - TransactionBaseModel, - TransactionReceipt, -} from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; -import { BehaviorSubject, Observable } from 'rxjs'; -import { UnknownNetworkError } from '../errors'; -import { Provider } from '../user'; -import { DataProviderBase } from './DataProviderBase'; - -/** - * Implements the `Provider` interface expected by a `LocalUserAccountProvider`. - */ -export abstract class ProviderBase implements Provider { - public readonly networks$: Observable; - protected readonly networksInternal$: BehaviorSubject; - // tslint:disable-next-line readonly-keyword - protected readonly mutableProviders: { [key: string]: TDataProvider | undefined }; - - public constructor() { - this.networksInternal$ = new BehaviorSubject([]); - this.networks$ = this.networksInternal$; - this.mutableProviders = {}; - } - - public getNetworks(): readonly NetworkType[] { - return this.networksInternal$.getValue(); - } - - public addNetwork(options: { readonly network: NetworkType; readonly rpcURL: string }): void { - const { network, rpcURL } = options; - this.mutableProviders[network] = this.createDataProvider({ network, rpcURL }); - const networks = this.networksInternal$.value.filter((net) => network !== net).concat([network]); - this.networksInternal$.next(networks); - } - - public async getUnclaimed( - network: NetworkType, - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { - 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: TransactionBaseModel, - networkFee?: BigNumber, - ): Promise { - return this.getProvider(network).relayTransaction(transaction, networkFee); - } - - public async relayStrippedTransaction( - network: NetworkType, - verificationTransaction: InvocationTransactionModel, - relayTransaction: InvocationTransactionModel, - networkFee?: BigNumber, - ): Promise { - return this.getProvider(network).relayStrippedTransaction(verificationTransaction, relayTransaction, networkFee); - } - - public async getTransactionReceipt( - network: NetworkType, - hash: Hash256String, - options?: GetOptions, - ): Promise { - return this.getProvider(network).getTransactionReceipt(hash, options); - } - - public async getInvocationData(network: NetworkType, hash: Hash256String): Promise { - return this.getProvider(network).getInvocationData(hash); - } - - public async testInvoke(network: NetworkType, transaction: InvocationTransactionModel): Promise { - return this.getProvider(network).testInvoke(transaction); - } - - public async call( - network: NetworkType, - contract: AddressString, - method: string, - params: ReadonlyArray, - ): Promise { - return this.getProvider(network).call(contract, method, params); - } - - public async getNetworkSettings(network: NetworkType): Promise { - return this.getProvider(network).getNetworkSettings(); - } - - public async getBlockCount(network: NetworkType): Promise { - return this.getProvider(network).getBlockCount(); - } - - public async getTransaction(network: NetworkType, hash: Hash256String): Promise { - 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): TDataProvider { - return this.getProvider(network); - } - - public async getAccount(network: NetworkType, address: AddressString): Promise { - 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); - } - - protected abstract createDataProvider(options: { - readonly network: NetworkType; - readonly rpcURL: string; - }): TDataProvider; - - private getProvider(network: NetworkType): TDataProvider { - const provider = this.mutableProviders[network]; - if (provider === undefined) { - throw new UnknownNetworkError(network); - } - - return provider; - } -} diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 48383010cc..68e9001ace 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -1,51 +1,14 @@ import { ActionJSON, - AddressString, - Asset, - AssetJSON, - AssetType, - AssetTypeJSON, - Attribute, - AttributeJSON, - Block, - BlockJSON, CallReceiptJSON, - common, - ConfirmedTransaction, - Contract, - ContractJSON, ContractParameter, ContractParameterJSON, - ContractParameterType, - ContractParameterTypeJSON, - Input, - InputJSON, - InvocationDataJSON, InvocationResultJSON, - InvocationTransactionJSON, JSONHelper, - NeoPreviewContractJSON, - NetworkSettings, - NetworkSettingsJSON, - Output, - OutputJSON, RawAction, RawCallReceipt, - RawInvocationData, RawInvocationResult, - RawStorageChange, - RelayTransactionResult, - RelayTransactionResultJSON, scriptHashToAddress, - StorageChangeJSON, - StorageItem, - StorageItemJSON, - Transaction, - TransactionBase, - TransactionJSON, - VerifyTransactionResult, - VerifyTransactionResultJSON, - VMState, } from '@neo-one/client-common'; import { utils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; @@ -105,13 +68,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, }; } @@ -120,6 +84,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, }; } @@ -129,10 +94,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; @@ -140,11 +112,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; @@ -152,6 +126,7 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont return { type: 'Integer', value: new BN(parameter.value, 10), + name: parameter.name, }; case 'InteropInterface': return parameter; @@ -162,6 +137,7 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont convertContractParameter(key), convertContractParameter(val), ]), + name: parameter.name, }; case 'PublicKey': return parameter; @@ -177,424 +153,3 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont throw new Error('For TS'); } } - -export function convertContractParameterType(param: ContractParameterTypeJSON): ContractParameterType { - switch (param) { - case 'Signature': - return 'Signature'; - case 'Boolean': - return 'Boolean'; - case 'Integer': - return 'Integer'; - case 'Hash160': - return 'Address'; - case 'Hash256': - return 'Hash256'; - case 'ByteArray': - return 'Buffer'; - case 'PublicKey': - return 'PublicKey'; - case 'String': - return 'String'; - case 'Array': - return 'Array'; - case 'Map': - return 'Map'; - case 'InteropInterface': - return 'InteropInterface'; - case 'Void': - return 'Void'; - /* istanbul ignore next */ - default: - utils.assertNever(param); - throw new Error('For TS'); - } -} - -export function convertStorageItem(storageItem: StorageItemJSON): StorageItem { - return { - address: scriptHashToAddress(storageItem.hash), - key: storageItem.key, - value: storageItem.value, - }; -} - -export function convertBlock( - block: BlockJSON, - convertTransactionHelp: (transaction: TransactionJSON, block: BlockJSON) => ConfirmedTransaction, -): Block { - return { - version: block.version, - hash: block.hash, - previousBlockHash: block.previousblockhash, - merkleRoot: block.merkleroot, - time: block.time, - index: block.index, - nonce: block.nonce, - nextConsensus: block.nextconsensus, - script: block.script, - size: block.size, - transactions: block.tx.map((transaction) => convertTransactionHelp(transaction, block)), - }; -} - -export function 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 */ - utils.assertNever(assetType); - /* istanbul ignore next */ - throw new Error('For TS'); - } -} - -export function 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; - } - - return { - hash: asset.id, - type: 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, - }; -} - -export function convertContract(contractIn: ContractJSON): Contract { - let contract = contractIn; - // tslint:disable-next-line no-any - if (typeof (contract.version as any) === 'string' && (contract.version as any).includes('preview')) { - // tslint:disable-next-line no-any - contract = convertPreviewContract(contract as any); - } - - return { - version: contract.version, - address: scriptHashToAddress(contract.hash), - script: contract.script, - parameters: contract.parameters.map(convertContractParameterType), - returnType: 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, - }; -} - -export function convertPreviewContract(contract: NeoPreviewContractJSON): ContractJSON { - return { - version: 0, - hash: contract.code.hash, - script: contract.code.script, - parameters: contract.code.parameters, - returntype: contract.code.returntype, - name: contract.name, - code_version: 'preview', - author: contract.author, - email: contract.email, - description: contract.description, - properties: { - storage: contract.needstorage, - dynamic_invoke: false, - payable: false, - }, - }; -} - -export function convertInputs(inputs: readonly InputJSON[]): readonly Input[] { - return inputs.map(convertInput); -} - -export function convertInput(input: InputJSON): Input { - return { - hash: input.txid, - index: input.vout, - }; -} - -export function convertOutputs(outputs: readonly OutputJSON[]): readonly Output[] { - return outputs.map(convertOutput); -} - -export function convertOutput(output: OutputJSON): Output { - return { - asset: output.asset, - address: output.address, - value: new BigNumber(output.value), - }; -} - -export function 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, - })); -} - -export function convertTransactionBase( - transaction: TransactionJSON, - convertInvocation: (invocation: InvocationTransactionJSON, transactionBase: TransactionBase) => Result, - convertTransactionHelp: (transaction: Transaction) => Result, -): Result { - const transactionBase = { - hash: transaction.txid, - size: transaction.size, - version: transaction.version, - attributes: convertAttributes(transaction.attributes), - inputs: convertInputs(transaction.vin), - outputs: convertOutputs(transaction.vout), - scripts: transaction.scripts, - systemFee: new BigNumber(transaction.sys_fee), - networkFee: new BigNumber(transaction.net_fee), - }; - - let converted: Transaction; - switch (transaction.type) { - case 'ClaimTransaction': - converted = { - ...transactionBase, - type: 'ClaimTransaction', - claims: 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: convertContract(transaction.contract), - }; - break; - case 'RegisterTransaction': - converted = { - ...transactionBase, - type: 'RegisterTransaction', - asset: { - type: 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: - utils.assertNever(transaction); - throw new Error('For TS'); - } - - return convertTransactionHelp(converted); -} - -export function convertTransaction(transaction: TransactionJSON): Transaction { - return convertTransactionBase( - transaction, - (invocation, transactionBase) => ({ - ...transactionBase, - type: 'InvocationTransaction', - script: invocation.script, - gas: new BigNumber(invocation.gas), - }), - /* istanbul ignore next */ - (converted) => converted, - ); -} - -export function 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), - }; - - return convertTransactionBase( - transaction, - (invocation, transactionBase) => { - /* istanbul ignore next */ - if (invocation.invocationData === undefined || transaction.data === undefined) { - throw new Error('Unexpected undefined data'); - } - - const invocationData = 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), - ); -} - -export function convertInvocationData( - data: InvocationDataJSON, - blockHash: string, - blockIndex: number, - transactionHash: string, - transactionIndex: number, -): RawInvocationData { - return { - result: convertInvocationResult(data.result), - asset: data.asset === undefined ? data.asset : convertAsset(data.asset), - contracts: data.contracts.map(convertContract), - deletedContractAddresses: data.deletedContractHashes.map(scriptHashToAddress), - migratedContractAddresses: data.migratedContractHashes.map( - ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)], - ), - actions: data.actions.map((action, idx) => - convertAction(blockHash, blockIndex, transactionHash, transactionIndex, idx, action), - ), - storageChanges: data.storageChanges.map(convertStorageChange), - }; -} - -export function 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, - }; -} - -export function convertRelayTransactionResult(result: RelayTransactionResultJSON): RelayTransactionResult { - const transaction = convertTransaction(result.transaction); - const verifyResult = - result.verifyResult === undefined ? undefined : convertVerifyResult(transaction.hash, result.verifyResult); - - return { transaction, verifyResult }; -} - -/* istanbul ignore next */ -export function 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, - ), - ), - })), - }; -} - -export function convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { - return { - issueGASFee: new BigNumber(settings.issueGASFee), - }; -} diff --git a/packages/neo-one-client-core/src/provider/index.ts b/packages/neo-one-client-core/src/provider/index.ts index d1bbd0a183..4723d6675d 100644 --- a/packages/neo-one-client-core/src/provider/index.ts +++ b/packages/neo-one-client-core/src/provider/index.ts @@ -1,10 +1,6 @@ export * from './convert'; -export * from './DataProviderBase'; export * from './JSONRPCClient'; export * from './JSONRPCHTTPProvider'; export * from './JSONRPCProvider'; -export * from './NEODataProvider'; export * from './NEOONEDataProvider'; -export * from './NEOProvider'; export * from './NEOONEProvider'; -export * from './ProviderBase'; diff --git a/packages/neo-one-client-core/src/sc/common.ts b/packages/neo-one-client-core/src/sc/common.ts index 71b4f22379..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, @@ -63,8 +63,7 @@ export const isTransactionOptions = (arg: any) => (arg.systemFee !== undefined && BigNumber.isBigNumber(arg.systemFee)) || (arg.sendFrom !== undefined && Array.isArray(arg.sendFrom)) || (arg.sendTo !== undefined && Array.isArray(arg.sendTo)) || - (arg.timeoutMS !== undefined && typeof arg.timeoutMS === 'number') || - (arg.skipSysFeeCheck !== undefined && typeof arg.skipSysFeeCheck === 'boolean')); + (arg.timeoutMS !== undefined && typeof arg.timeoutMS === 'number')); // tslint:disable-next-line:no-any export const isForwardValueOptions = (arg: any): boolean => @@ -83,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 && @@ -116,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 }); @@ -126,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, @@ -157,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 => { @@ -220,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; @@ -266,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, @@ -279,6 +281,7 @@ export const convertInvocationResult = async ({ gasConsumed, gasCost, message, + script, }; } @@ -290,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 ({ @@ -390,8 +393,8 @@ export const convertParams = ({ }; 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 a68ddb341c..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, @@ -452,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 61a89ac99e..f37b9f724b 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -1,19 +1,12 @@ import { AddressString, + addressToScriptHash, Attribute, - ClaimTransaction, - ClaimTransactionModel, common, crypto, GetOptions, - Input, - InputModel, - InputOutput, - InvocationTransaction, - InvocationTransactionModel, IterOptions, NetworkType, - Output, Param, RawAction, RelayTransactionResult, @@ -21,7 +14,7 @@ import { ScriptBuilderParam, SourceMaps, Transaction, - TransactionBaseModel, + TransactionModel, TransactionReceipt, TransactionResult, Transfer, @@ -37,6 +30,7 @@ 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 { Hash256 } from '../Hash256'; import { ExecuteInvokeMethodOptions, ExecuteInvokeScriptOptions, @@ -88,13 +82,7 @@ export interface KeyStore { export interface Provider extends ProviderBase { readonly relayTransaction: ( network: NetworkType, - transaction: TransactionBaseModel, - networkFee?: BigNumber | undefined, - ) => Promise; - readonly relayStrippedTransaction: ( - network: NetworkType, - verifcationTransaction: InvocationTransactionModel, - relayTransaction: InvocationTransactionModel, + transaction: TransactionModel, networkFee?: BigNumber | undefined, ) => Promise; } @@ -116,10 +104,10 @@ export class LocalUserAccountProvider 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 }); @@ -171,15 +159,13 @@ export class LocalUserAccountProvider({ - inputs, - transaction: transactionUnsignedIn, + transaction: transactionUnsigned, from, onConfirm, networkFee, sourceMaps, }: { - readonly inputs: readonly InputOutput[]; - readonly transaction: TransactionBaseModel; + readonly transaction: TransactionModel; readonly from: UserAccountID; readonly onConfirm: (options: { readonly transaction: Transaction; @@ -190,57 +176,10 @@ export class LocalUserAccountProvider> { 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.serializeUnsigned().toString('hex'), + }); const userAccount = this.getUserAccount(from); const witness = crypto.createWitnessForSignature( @@ -253,8 +192,6 @@ export class LocalUserAccountProvider - this.mutableUsedOutputs.add(`${common.uInt256ToString(transfer.hash)}:${transfer.index}`), - ); - const { transaction } = result; return { @@ -302,159 +235,9 @@ export class LocalUserAccountProvider({ - inputs, - transaction: transactionUnsignedIn, - from, - onConfirm, - networkFee, - sourceMaps, - }: { - readonly inputs: readonly InputOutput[]; - readonly transaction: InvocationTransactionModel; - readonly from: UserAccountID; - readonly onConfirm: (options: { - readonly transaction: Transaction; - readonly receipt: TransactionReceipt; - }) => Promise; - readonly networkFee?: BigNumber; - readonly sourceMaps?: SourceMaps; - }): Promise> { - // when this problem invocation comes in we need to strip the bad verification script and then sign that transaction - return this.capture( - async () => { - let transactionUnsigned = transactionUnsignedIn; - if (this.keystore.byteLimit !== undefined) { - transactionUnsigned = (await this.consolidate({ - inputs, - from, - transactionUnsignedIn, - byteLimit: this.keystore.byteLimit, - })) as InvocationTransactionModel; - } - 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 relayTransactionUnsigned = transactionUnsigned.clone({ - attributes: [], - scripts: [], - }); - - const [verificationSignature, relaySignature, inputOutputs] = await Promise.all([ - this.keystore.sign({ - account: from, - message: transactionUnsigned.serializeUnsigned().toString('hex'), - }), - this.keystore.sign({ - account: from, - message: relayTransactionUnsigned.serializeUnsigned().toString('hex'), - }), - Promise.all( - transactionUnsigned.inputs.map(async (input) => - this.provider.getOutput(from.network, { hash: common.uInt256ToString(input.hash), index: input.index }), - ), - ), - ]); - - const userAccount = this.getUserAccount(from); - - const verificationWitness = crypto.createWitnessForSignature( - Buffer.from(verificationSignature, 'hex'), - common.stringToECPoint(userAccount.publicKey), - WitnessModel, - ); - - const relayWitness = crypto.createWitnessForSignature( - Buffer.from(relaySignature, 'hex'), - common.stringToECPoint(userAccount.publicKey), - WitnessModel, - ); - - const signedVerificationTransaction = this.addWitness({ - transaction: transactionUnsigned, - inputOutputs, - address, - witness: verificationWitness, - }) as InvocationTransactionModel; - - const signedRelayTransaction = relayTransactionUnsigned.clone({ - scripts: [relayWitness], - }); - - const result = await this.provider.relayStrippedTransaction( - from.network, - signedVerificationTransaction, - signedRelayTransaction, - networkFee, - ); - - 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); - } - - transactionUnsigned.inputs.forEach((transfer) => - this.mutableUsedOutputs.add(`${common.uInt256ToString(transfer.hash)}:${transfer.index}`), - ); - - const { transaction } = result; - - return { - transaction: transaction as InvocationTransaction, - // tslint:disable-next-line no-unnecessary-type-annotation - confirmed: async (optionsIn: GetOptions = {}): Promise => { - const options = { - ...optionsIn, - timeoutMS: optionsIn.timeoutMS === undefined ? 120000 : optionsIn.timeoutMS, - }; - const receipt = await this.provider.getTransactionReceipt(from.network, transaction.hash, options); - - return onConfirm({ transaction, receipt }); - }, - }; - }, - { - name: 'neo_send_stripped_transaction', - }, - ); - } - protected async executeInvokeClaim({ contract, - inputs, - outputs, - unclaimed, - amount, + unclaimedAmount, attributes, method, params, @@ -463,40 +246,32 @@ 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)), - ), + }): Promise { + const script = new ScriptBuilder() + .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ + addressToScriptHash(contract), + common.GAS_CONTRACT_SCRIPT_HASH, + unclaimedAmount.toString(), + ]) + .build(); + + const { gas } = await this.getSystemFee({ from, script, attributes }); + + const transaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(gas, 8), // 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, }); - return this.sendTransaction({ - inputs, + return this.sendTransaction({ from, transaction, onConfirm: async ({ receipt }) => receipt, @@ -505,33 +280,40 @@ export class LocalUserAccountProvider> { - const { inputs, outputs } = await this.getTransfersInputOutputs({ - transfers: transfers.map((transfer) => ({ from, ...transfer })), - from, - gas: networkFee, - }); - - if (inputs.length === 0 && this.keystore.byteLimit === undefined) { + ): Promise { + if (this.keystore.byteLimit === undefined) { throw new NothingToTransferError(); } + // TODO: need to rebuild transfer script + const sb = new ScriptBuilder(); + transfers.forEach((transfer) => { + sb.emitSysCall( + 'System.Contract.Call', + transfer.asset === Hash256.NEO ? common.NEO_CONTRACT_SCRIPT_HASH : common.GAS_CONTRACT_SCRIPT_HASH, + 'transfer', + [addressToScriptHash(from.address), addressToScriptHash(transfer.to), transfer.amount.toString()], + ); + }); + const script = sb.build(); + + // TODO: can probably cache certain scripts if they call the same method on the same contract + const { gas } = await this.getSystemFee({ from, attributes, script }); - const transaction = new InvocationTransactionModel({ - inputs: this.convertInputs(inputs), - outputs: this.convertOutputs(outputs), + const transaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(gas, 8), // TODO: check. fee for transfer method is 0.08 GAS + networkFee: utils.bigNumberToBN(networkFee, 8), // TODO: check attributes: this.convertAttributes(attributes), - gas: utils.ZERO, - script: new ScriptBuilder().emitOp('PUSH1').build(), + script, }); - return this.sendTransaction({ + return this.sendTransaction({ from, transaction, - inputs, onConfirm: async ({ receipt }) => receipt, networkFee, }); @@ -539,39 +321,34 @@ export class LocalUserAccountProvider> { - const [{ unclaimed, amount }, { inputs, outputs }] = await Promise.all([ - this.provider.getUnclaimed(from.network, from.address), - this.getTransfersInputOutputs({ - from, - gas: networkFee, - transfers: [], - }), - ]); - - if (unclaimed.length === 0) { + ): Promise { + const unclaimedAmount = await this.provider.getUnclaimed(from.network, from.address); + if (unclaimedAmount.eq(new BigNumber('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 script = new ScriptBuilder() + .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ + addressToScriptHash(from.address), + common.GAS_CONTRACT_SCRIPT_HASH, + unclaimedAmount.toString(), + ]) + .build(); + + const { gas } = await this.getSystemFee({ script, from, attributes }); + + const transaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(gas, 8), // TODO: check this. check decimals + networkFee: utils.bigNumberToBN(networkFee, 8), // TODO: check decimals + signers: undefined, // ? + witnesses: undefined, // ? + script, attributes: this.convertAttributes(attributes), }); - return this.sendTransaction({ - inputs, + return this.sendTransaction({ from, transaction, onConfirm: async ({ receipt }) => receipt, @@ -583,51 +360,33 @@ export class LocalUserAccountProvider): Promise> { - const invokeTransaction = new InvocationTransactionModel({ - version: 1, - inputs: this.convertInputs(rawInputs.concat(inputs)), - outputs: this.convertOutputs(reorderOutputs(rawOutputs.concat(outputs))), + }: ExecuteInvokeScriptOptions): Promise> { + // TODO: check + const { gas: systemFee } = await this.getSystemFee({ attributes, script, from }); + const invokeTransaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(systemFee, 8), // TODO: check + networkFee: utils.bigNumberToBN(gas, 8), // TODO: check attributes: this.convertAttributes(attributes), - gas: utils.bigNumberToBN(gas, 8), + signers: [], // TODO: ? script, - scripts, + witnesses, }); - const inputsFrom = inputs.filter((input) => input.address === from.address); - try { - return scripts.length === 1 && scripts[0].verification.length === 0 && inputsFrom.length > 0 - ? this.sendStrippedTransaction({ - from, - inputs, - transaction: invokeTransaction, - onConfirm: async ({ transaction, receipt }) => { - const data = await this.provider.getInvocationData(from.network, transaction.hash); - - return onConfirm({ transaction, receipt, data }); - }, - }) - : this.sendTransaction({ - from, - inputs, - transaction: invokeTransaction, - onConfirm: async ({ transaction, receipt }) => { - const data = await this.provider.getInvocationData(from.network, transaction.hash); - - return onConfirm({ transaction, receipt, data }); - }, - sourceMaps, - }); + return this.sendTransaction({ + from, + transaction: invokeTransaction, + onConfirm: async ({ transaction, receipt }) => { + const data = await this.provider.getInvocationData(from.network, transaction.hash); + + return onConfirm({ transaction, receipt, data }); + }, + sourceMaps, + }); } catch (error) { const message = await processActionsAndMessage({ actions: [], diff --git a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts index ca0cabdf8c..c97429304e 100644 --- a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts @@ -1,11 +1,8 @@ import { - Account, AddressString, Block, - ClaimTransaction, GetOptions, Hash256String, - InvocationTransaction, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, NetworkType, @@ -16,7 +13,6 @@ import { ScriptBuilderParam, SourceMaps, TransactionOptions, - TransactionReceipt, TransactionResult, Transfer, UpdateAccountNameOptions, @@ -196,17 +192,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 +211,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 +226,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 +241,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 +256,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 +270,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 ac0737122a..f46ca07a0c 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -1,27 +1,16 @@ import { - Account, AddressString, addressToScriptHash, Attribute, AttributeModel, - AttributeUsageModel, Block, - ClaimTransaction, common, - ContractTransaction, ForwardValue, GetOptions, Hash256String, - Input, - InputModel, - InputOutput, - InvocationTransaction, - InvocationTransactionModel, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, NetworkType, - Output, - OutputModel, Param, ParamJSON, RawAction, @@ -31,12 +20,11 @@ import { ScriptBuilderParam, SourceMaps, Transaction, - TransactionBaseModel, + TransactionModel, TransactionOptions, TransactionReceipt, TransactionResult, Transfer, - UInt160AttributeModel, UserAccount, UserAccountID, utils, @@ -47,19 +35,13 @@ import { processActionsAndMessage } from '@neo-one/client-switch'; 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'; @@ -83,26 +65,18 @@ export interface InvokeRawOptions { 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[]; } 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 witnesses: readonly WitnessModel[]; readonly verify: boolean; - readonly reorderOutputs: (outputs: readonly Output[]) => readonly Output[]; readonly onConfirm: (options: { readonly transaction: Transaction; readonly data: RawInvocationData; @@ -117,10 +91,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; @@ -132,18 +103,14 @@ 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: InvocationTransactionModel) => Promise; + readonly testInvoke: (network: NetworkType, transaction: TransactionModel) => Promise; readonly call: ( network: NetworkType, contract: AddressString, @@ -152,9 +119,7 @@ export interface Provider { ) => Promise; readonly getBlockCount: (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; } @@ -163,14 +128,8 @@ interface TransactionOptionsFull { readonly attributes: readonly Attribute[]; readonly networkFee: BigNumber; readonly systemFee: BigNumber; - readonly skipSysFeeCheck: boolean; } -const NEO_ONE_ATTRIBUTE: Attribute = { - usage: 'Remark15', - data: Buffer.from('neo-one', 'utf8').toString('hex'), -}; - interface FullTransfer extends Transfer { readonly from: UserAccountID; } @@ -178,14 +137,12 @@ interface FullTransfer extends Transfer { 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) { @@ -217,14 +174,7 @@ export abstract class UserAccountProviderBase { return this.provider.getBlockCount(network); } - public async getAccount(network: NetworkType, address: AddressString): Promise { - return this.provider.getAccount(network, address); - } - - public async transfer( - transfers: readonly Transfer[], - options?: TransactionOptions, - ): Promise> { + 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), { @@ -232,7 +182,7 @@ export abstract class UserAccountProviderBase { }); } - public async claim(options?: TransactionOptions): Promise> { + public async claim(options?: TransactionOptions): Promise { const { from, attributes, networkFee } = this.getTransactionOptions(options); return this.capture(async () => this.executeClaim(from, attributes, networkFee), { @@ -248,7 +198,7 @@ export abstract class UserAccountProviderBase { verify: boolean, options: InvokeSendUnsafeReceiveTransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const { attributes = [] } = options; const transactionOptions = this.getTransactionOptions(options); const { from } = transactionOptions; @@ -287,12 +237,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), @@ -313,7 +266,7 @@ export abstract class UserAccountProviderBase { transfer: Transfer, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const transactionOptions = this.getTransactionOptions(options); const { from, attributes } = transactionOptions; @@ -337,12 +290,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(method, params, true), + witnesses: this.getInvokeScripts(method, params, true), transfers: [ { ...transfer, @@ -350,18 +306,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, @@ -378,19 +322,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: { @@ -405,14 +341,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(method, params, true), - rawInputs: [sendInput], - rawOutputs: [sendOutput], + witnesses: this.getInvokeScripts(method, params, true), method: 'invokeCompleteSend', labels: { [Labels.INVOKE_METHOD]: method, @@ -429,29 +366,15 @@ 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(); - } + // TODO: not sure how this will be handled now without UTXO. Can smart contracts receive native assets the same way? + // in order to refund assets we would have to invoke a "refundAssets" method on the smart contract, which would have to + // then call a transfer on the native NEO/GAS token contracts. We might have to construct a transaction here where + // one paramter of the "refundAssets" method is the refundTransaction hash and a valid signature??? return this.invokeRaw({ invokeMethodOptionsOrScript: { @@ -466,14 +389,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(method, params, true), - rawInputs: inputs, - rawOutputs: outputs, + witnesses: this.getInvokeScripts(method, params, true), method: 'invokeRefundAssets', labels: { [Labels.INVOKE_METHOD]: method, @@ -489,30 +413,21 @@ export abstract class UserAccountProviderBase { paramsZipped: ReadonlyArray, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise { + // TODO: what to do with networkfee? const { from, attributes, networkFee } = 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, @@ -537,12 +452,7 @@ export abstract class UserAccountProviderBase { } protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { - const { - attributes = [], - networkFee = utils.ZERO_BIG_NUMBER, - systemFee = utils.ZERO_BIG_NUMBER, - skipSysFeeCheck = false, - } = options; + const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER } = options; const { from: fromIn } = options; let from = fromIn; @@ -556,43 +466,21 @@ export abstract class UserAccountProviderBase { return { from, - attributes: attributes.concat([NEO_ONE_ATTRIBUTE]), + attributes, networkFee, systemFee, - skipSysFeeCheck, }; } + // 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( @@ -613,443 +501,16 @@ 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 - */ + // TODO: check this 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( @@ -1088,14 +549,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); } @@ -1116,7 +569,7 @@ export abstract class UserAccountProviderBase { 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'); } } @@ -1132,19 +585,49 @@ export abstract class UserAccountProviderBase { } } + protected async getSystemFee({ + script, + from, + attributes = [], + witnesses = [], + }: { + readonly script: Buffer; + readonly from: UserAccountID; + readonly attributes?: ReadonlyArray; + readonly witnesses?: ReadonlyArray; + }): Promise<{ + readonly gas: BigNumber; + readonly attributes: ReadonlyArray; + }> { + const testTransaction = new TransactionModel({ + systemFee: common.TEN_THOUSAND_FIXED8, + attributes: this.convertAttributes(attributes), + networkFee: common.TEN_THOUSAND_FIXED8, + script, + witnesses, + }); + + const callReceipt = await this.provider.testInvoke(from.network, testTransaction); + if (callReceipt.result.state === 'FAULT') { + const message = await processActionsAndMessage({ + actions: callReceipt.actions, + message: callReceipt.result.message, + }); + throw new InvokeError(message); + } + + const gas = callReceipt.result.gasConsumed.integerValue(BigNumber.ROUND_UP); + + return { gas, attributes }; + } + protected async checkSystemFees({ script, - transfers = [], from, - networkFee, systemFee, - attributes: attributesIn = [], - rawInputs = [], - rawOutputs = [], - scripts = [], + attributes = [], + witnesses = [], sourceMaps, - reorderOutputs = (outputs) => outputs, - skipSysFeeCheck = false, }: { readonly script: Buffer; readonly transfers?: ReadonlyArray; @@ -1152,46 +635,18 @@ export abstract class UserAccountProviderBase { readonly networkFee: BigNumber; readonly systemFee: BigNumber; readonly attributes?: ReadonlyArray; - readonly rawInputs?: ReadonlyArray; - readonly rawOutputs?: ReadonlyArray; - readonly scripts?: ReadonlyArray; + readonly witnesses?: ReadonlyArray; readonly sourceMaps?: SourceMaps; - readonly reorderOutputs?: (outputs: ReadonlyArray) => ReadonlyArray; - readonly skipSysFeeCheck?: boolean; }): 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'), - }); - - if (skipSysFeeCheck) { - return { gas: utils.ZERO_BIG_NUMBER, attributes }; - } - - const testTransaction = new InvocationTransactionModel({ - version: 1, - inputs: this.convertInputs(rawInputs.concat(testInputs)), - outputs: this.convertOutputs(reorderOutputs(rawOutputs.concat(testOutputs))), - attributes: this.convertAttributes( - attributes.concat([ - { - usage: 'Script', - data: from.address, - }, - ]), - ), - gas: common.TEN_THOUSAND_FIXED8, + const testTransaction = new TransactionModel({ + systemFee: common.TEN_THOUSAND_FIXED8, + attributes: this.convertAttributes(attributes), + networkFee: common.TEN_THOUSAND_FIXED8, script, - scripts, + witnesses, }); const callReceipt = await this.provider.testInvoke(from.network, testTransaction); @@ -1214,28 +669,26 @@ export abstract class UserAccountProviderBase { 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>; + ): Promise; protected abstract async executeClaim( from: UserAccountID, attributes: readonly Attribute[], networkFee: BigNumber, - ): Promise>; + ): Promise; protected async invokeRaw({ invokeMethodOptionsOrScript, @@ -1244,16 +697,11 @@ export abstract class UserAccountProviderBase { onConfirm, method, verify = true, - scripts = [], + witnesses = [], labels = {}, - rawInputs = [], - rawOutputs = [], sourceMaps, - reorderOutputs = (outputs) => outputs, }: InvokeRawOptions) { - const { from, attributes: attributesIn, networkFee, systemFee, skipSysFeeCheck } = this.getTransactionOptions( - options, - ); + const { from, attributes: attributesIn, networkFee, systemFee } = this.getTransactionOptions(options); const { script, invokeMethodOptions } = this.getScriptAndInvokeMethodOptions(invokeMethodOptionsOrScript); return this.capture( @@ -1265,33 +713,23 @@ export abstract class UserAccountProviderBase { networkFee, systemFee, attributes: attributesIn, - rawInputs, - rawOutputs, - scripts, + witnesses, sourceMaps, - reorderOutputs, - skipSysFeeCheck, }); - const { inputs, outputs } = await this.getTransfersInputOutputs({ - transfers, - from, - gas: networkFee.plus(gas), - }); + // TODO: instead of using inputs/outputs do we just use `transfers`? + // TODO: do we need to use networkFee.plus(gas); ? + // 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, verify, - scripts, - reorderOutputs, + witnesses, onConfirm, sourceMaps, }) @@ -1300,14 +738,9 @@ export abstract class UserAccountProviderBase { invokeMethodOptions, from, attributes, - inputs, - outputs, - rawInputs, - rawOutputs, gas, verify, - scripts, - reorderOutputs, + witnesses, onConfirm, sourceMaps, }); 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-full-common/src/__data__/models.ts b/packages/neo-one-client-full-common/src/__data__/models.ts index 0d04c7087d..ad343a0b07 100644 --- a/packages/neo-one-client-full-common/src/__data__/models.ts +++ b/packages/neo-one-client-full-common/src/__data__/models.ts @@ -7,13 +7,17 @@ import { ContractGroupModel, ContractManifestModel, ContractMethodDescriptorModel, - ContractModel, 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', @@ -68,7 +72,8 @@ export const contractMethodDescriptorModel = ( parameters: readonly ContractParameterDefinitionModel[] = [contractParamDefinitionModel.boolean], returnType: ContractParameterTypeModel = ContractParameterTypeModel.Void, name = 'function', -) => new ContractMethodDescriptorModel({ name, parameters, returnType }); + offset = 0, +) => new ContractMethodDescriptorModel({ name, parameters, returnType, offset }); export const contractEventDescriptorModel = ( parameters: readonly ContractParameterDefinitionModel[] = [contractParamDefinitionModel.boolean], @@ -83,7 +88,10 @@ export const contractAbiModel = ( export const contractGroupModel = ( publicKey: ECPoint = common.stringToECPoint(constants.PRIVATE_NET_PUBLIC_KEY), - signature: SignatureString = 'ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67', + signature: Buffer = Buffer.from( + 'ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67', + 'hex', + ), ) => new ContractGroupModel({ publicKey, signature }); export const contractPermissionDescriptorModel = (hashOrGroupType: 'uint160' | 'ecpoint' | undefined) => { @@ -116,4 +124,4 @@ export const contractModel = ( id = 1, script: Buffer = Buffer.alloc(25), manifest: ContractManifestModel = contractManifestModel(), -) => new ContractModel({ id, script, manifest }); +) => new ContractStateModel({ id, script, manifest }); 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 index 499977ad2f..7fac8169a7 100644 --- 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 @@ -3,16 +3,16 @@ import { contractPermissionDescriptorModel } from '../../__data__'; describe('ContractPermissionDescriptorModel - serializeJSON', () => { test('UInt160', () => { const permission = contractPermissionDescriptorModel('uint160'); - expect(permission.isHash()).toBeTruthy(); - expect(permission.isGroup()).toBeFalsy(); + 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.isGroup).toBeTruthy(); + expect(permission.isHash).toBeFalsy(); expect(permission.isWildcard()).toBeFalsy(); expect(permission.serializeJSON()).toMatchSnapshot(); }); @@ -20,8 +20,8 @@ describe('ContractPermissionDescriptorModel - serializeJSON', () => { test('undefined', () => { const permission = contractPermissionDescriptorModel(undefined); expect(permission.isWildcard()).toBeTruthy(); - expect(permission.isHash()).toBeFalsy(); - expect(permission.isGroup()).toBeFalsy(); + expect(permission.isHash).toBeFalsy(); + expect(permission.isGroup).toBeFalsy(); expect(permission.serializeJSON()).toMatchSnapshot(); }); }); 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 index a0e6f9e3e5..645002c33e 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -3,7 +3,6 @@ import { common, ContractManifestJSON, createSerializeWire, - Extra, JSONHelper, SerializableJSON, SerializableWire, @@ -13,6 +12,7 @@ import { utils, WildcardContainer, } from '@neo-one/client-common'; +import { JSONObject } from '@neo-one/utils'; import { ContractABIModel } from './ContractABIModel'; import { ContractFeaturesModel, HasPayable, HasStorage } from './ContractFeaturesModel'; import { ContractGroupModel } from './ContractGroupModel'; @@ -30,7 +30,7 @@ export interface ContractManifestModelAdd< readonly permissions: readonly TContractPermission[]; readonly trusts: WildcardContainer; readonly safeMethods: WildcardContainer; - readonly extra?: Extra; + readonly extra?: JSONObject; } export class ContractManifestModel< @@ -46,7 +46,7 @@ export class ContractManifestModel< public readonly permissions: readonly TContractPermission[]; public readonly trusts: WildcardContainer; public readonly safeMethods: WildcardContainer; - public readonly extra: Extra | undefined; + public readonly extra: JSONObject | undefined; public readonly hasStorage: boolean; public readonly payable: boolean; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); @@ -85,6 +85,10 @@ export class ContractManifestModel< public serializeJSON(): ContractManifestJSON { return { + // TODO: not sure if hash and hashHex should be returned here + // we serialize hash but not hashHex in old `Contract.ts` + hash: JSONHelper.writeUInt160(this.hash), + hashHex: this.hashHex, groups: this.groups.map((group) => group.serializeJSON()), features: { storage: this.hasStorage, 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 index 055b1e4c33..80b6300e0c 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts @@ -18,11 +18,11 @@ export class ContractPermissionDescriptorModel implements SerializableJSON 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: ContractManifest, 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..da27c54f7a 100644 --- a/packages/neo-one-client-full-core/src/ReadClient.ts +++ b/packages/neo-one-client-full-core/src/ReadClient.ts @@ -1,14 +1,10 @@ import { - Account, AddressString, - Asset, Block, Contract, GetOptions, Hash256String, - Input, IterOptions, - Output, Peer, Transaction, } from '@neo-one/client-common'; @@ -27,10 +23,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') { @@ -64,10 +56,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 7e5da6dea3..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()], 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__/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 96a0de45f8..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(); @@ -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,15 +597,15 @@ 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, transactionModel) => { @@ -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,13 +648,13 @@ 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, transactionModel) => { @@ -818,15 +692,15 @@ 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, transactionModel) => { @@ -871,15 +745,15 @@ 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, transactionModel) => { @@ -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,15 +797,15 @@ 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, transactionModel) => { @@ -980,15 +849,15 @@ 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, transactionModel) => { 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..99cb08aef8 100644 --- a/packages/neo-one-client-full-core/src/types.ts +++ b/packages/neo-one-client-full-core/src/types.ts @@ -1,25 +1,16 @@ 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 +19,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,7 +52,6 @@ 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; @@ -100,7 +59,6 @@ export interface DataProvider { readonly getContract: (address: AddressString) => Promise; readonly getMemPool: () => Promise; 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..5ce24d5d62 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,64 @@ 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, + }), + ), + }), + ), + 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') }), + ), + features: getContractProperties({ + hasStorage: contractIn.manifest.features.storage, + payable: contractIn.manifest.features.payable, + }), + 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, + safeMethods: contractIn.manifest.safeMethods, + extra: contractIn.manifest.extra, + }); + + return new ContractStateModel({ + script: Buffer.from(contractIn.script, 'hex'), + id: contractIn.id, + manifest, + }); }; export interface Provider extends ProviderLite { @@ -125,7 +162,7 @@ export class LocalUserAccountProvider> { + ): Promise> { return this.publishBase( 'publish', contract, @@ -139,16 +176,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 +199,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 +221,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 +240,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 +272,9 @@ export class LocalUserAccountProvider { + ): Promise { const message = await processActionsAndMessage({ actions: data.actions, message: result.message, @@ -374,16 +298,17 @@ export class LocalUserAccountProvider( data: RawInvocationData, - result: RawInvocationResultSuccess, + result: RawTransactionResultSuccess, value: T, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { await processConsoleLogMessages({ actions: data.actions, sourceMaps, @@ -393,6 +318,7 @@ export class LocalUserAccountProvider { throw new JSONRPCError(-101, 'Not implemented'); @@ -496,8 +495,21 @@ export const createHandler = ({ return header.serializeWire().toString('hex'); }, - [RPC_METHODS.getunclaimedgas]: async () => { - throw new JSONRPCError(-101, 'Not implemented'); + [RPC_METHODS.getunclaimedgas]: async (args) => { + const address = JSONHelper.readUInt160(args[0]); + const isValidAddress = common.isUInt160(address); + if (!isValidAddress) { + throw new JSONRPCError(-100, 'Invalid address'); + } + + // TODO: implement native contracts in blockchain for getting unclaimed gas + // const unclaimed = await blockchain.getUnclaimedGas(address); + // result = unclaimed.toString(); + + return { + unclaimed: '0', // TODO: replace + address: JSONHelper.writeUInt160(address), + }; }, [RPC_METHODS.closewallet]: async () => { throw new JSONRPCError(-101, 'Not implemented'); @@ -612,23 +624,6 @@ export const createHandler = ({ throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); } }, - [RPC_METHODS.getclaimamount]: async (args) => { - const hash = JSONHelper.readUInt256(args[0]); - const index = args[1]; - try { - // TODO: figure out how we're going to implement calculateClaimAmount in blockchain - const value = await blockchain.calculateClaimAmount([ - { - 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 contract = await blockchain.contract.tryGet({ hash }); @@ -713,6 +708,7 @@ export const createHandler = ({ [RPC_METHODS.getvalidators]: async () => { // TODO: implement with NativeContract.NEO // blockchain.getValidators() + const validators = await blockchain.validator.all$.pipe(toArray()).toPromise(); return validators.map((validator) => validator.serializeJSON(blockchain.serializeJSONContext)); diff --git a/packages/neo-one-smart-contract-compiler/src/compileContract.ts b/packages/neo-one-smart-contract-compiler/src/compileContract.ts index 1343c9b634..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'; @@ -17,7 +17,7 @@ export interface CompileContractOptions extends WithLinked { } export interface CompileContractResult { - readonly abi: ABI; + readonly manifest: ContractManifestClient; readonly diagnostics: ReadonlyArray; readonly contract: ContractRegister; readonly sourceMap: Promise; @@ -41,7 +41,7 @@ export const compileContract = ({ ? transpileContext : updateContext(transpileContext, { [filePath]: transpileResult.text }); - const { abi, sourceMap: finalSourceMap, contract, debugInfo } = compile({ + const { manifest, sourceMap: finalSourceMap, contract, debugInfo } = compile({ sourceFile: tsUtils.file.getSourceFileOrThrow(context.program, filePath), context, linked, @@ -51,7 +51,7 @@ export const compileContract = ({ return { diagnostics: context.diagnostics, sourceMap: finalSourceMap, - abi, + manifest, contract, debugInfo, }; 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'; From 4e5d6e9a7759397b6c88624d33afe7fefb5bf678 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 29 Sep 2020 14:55:42 -0700 Subject: [PATCH 099/141] feat(blockchain): able to persist the genesis block and retrieve it from storage (#2166) --- .../src/BaseScriptBuilder.ts | 8 +- packages/neo-one-client-common/src/common.ts | 2 + packages/neo-one-client-common/src/crypto.ts | 34 +- .../models/transaction/TransactionModel.ts | 32 +- packages/neo-one-node-blockchain/package.json | 8 +- .../neo-one-node-blockchain/src/Blockchain.ts | 148 ++++++++- .../src/PersistingBlockchain.ts | 45 +-- .../src/__tests__/Blockchain.test.ts | 282 ++++++++++------ .../src/__tests__/BlockchainE2E.test.ts | 31 ++ packages/neo-one-node-blockchain/src/utils.ts | 12 +- .../neo-one-node-blockchain/src/verify.ts | 2 +- .../src/wrapExecuteScripts.ts | 21 ++ packages/neo-one-node-core/src/Block.ts | 8 +- packages/neo-one-node-core/src/BlockBase.ts | 23 +- packages/neo-one-node-core/src/Blockchain.ts | 15 +- packages/neo-one-node-core/src/Contract.ts | 58 ++++ packages/neo-one-node-core/src/Settings.ts | 5 +- packages/neo-one-node-core/src/Storage.ts | 9 +- .../neo-one-node-core/src/TrimmedBlock.ts | 49 ++- packages/neo-one-node-core/src/Verifiable.ts | 10 +- packages/neo-one-node-core/src/index.ts | 1 + .../src/transaction/Transaction.ts | 4 +- packages/neo-one-node-core/src/vm.ts | 37 ++- .../neo-one-node-neo-settings/src/common.ts | 271 ++++++++------- .../src/createMain.ts | 90 ++--- .../src/cacheStorage.ts | 25 +- .../neo-one-node-storage-cache/src/read.ts | 6 +- .../neo-one-node-storage-common/src/keys.ts | 222 ++++++------- .../neo-one-node-storage-levelup/package.json | 1 + .../src/__tests__/levelUpStorage.test.ts | 23 +- .../src/convertChange.ts | 186 ++--------- .../src/levelUpStorage.ts | 314 +++++++----------- .../neo-one-node-storage-levelup/src/read.ts | 146 ++++---- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 17 +- .../lib/Dispatcher.Snapshot.cs | 21 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 25 ++ packages/neo-one-node-vm/lib/ReturnHelpers.cs | 278 ++++++++-------- .../neo-one-node-vm/src/ApplicationEngine.ts | 20 +- packages/neo-one-node-vm/src/Dispatcher.ts | 13 +- .../src/Methods/EngineMethods.ts | 3 +- .../src/Methods/SnapshotMethods.ts | 8 +- .../neo-one-node-vm/src/SnapshotHandler.ts | 25 +- .../src/StackItems/StackItemReturn.ts | 76 ----- .../neo-one-node-vm/src/StackItems/index.ts | 2 - .../neo-one-node-vm/src/StackItems/parse.ts | 105 ------ .../src/__tests__/Dispatcher.test.ts | 4 + .../neo-one-node-vm/src/converters/changes.ts | 90 +++++ .../neo-one-node-vm/src/converters/index.ts | 3 + .../src/converters/notifications.ts | 20 ++ .../src/converters/stackItems.ts | 179 ++++++++++ packages/neo-one-node-vm/src/types.ts | 3 - 51 files changed, 1724 insertions(+), 1296 deletions(-) create mode 100644 packages/neo-one-node-blockchain/src/__tests__/BlockchainE2E.test.ts create mode 100644 packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts create mode 100644 packages/neo-one-node-core/src/Contract.ts delete mode 100644 packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts delete mode 100644 packages/neo-one-node-vm/src/StackItems/index.ts delete mode 100644 packages/neo-one-node-vm/src/StackItems/parse.ts create mode 100644 packages/neo-one-node-vm/src/converters/changes.ts create mode 100644 packages/neo-one-node-vm/src/converters/index.ts create mode 100644 packages/neo-one-node-vm/src/converters/notifications.ts create mode 100644 packages/neo-one-node-vm/src/converters/stackItems.ts diff --git a/packages/neo-one-client-common/src/BaseScriptBuilder.ts b/packages/neo-one-client-common/src/BaseScriptBuilder.ts index 11e3f4f038..db7d5ed0dc 100644 --- a/packages/neo-one-client-common/src/BaseScriptBuilder.ts +++ b/packages/neo-one-client-common/src/BaseScriptBuilder.ts @@ -122,10 +122,6 @@ export class BaseScriptBuilder { return this; } - public emitSysCallInternal(hash: Buffer) { - return this.emitOp('SYSCALL', hash); - } - public emitUInt8(value: number): this { const buff = Buffer.allocUnsafe(1); buff.writeUInt8(value, 0); @@ -167,4 +163,8 @@ export class BaseScriptBuilder { 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/common.ts b/packages/neo-one-client-common/src/common.ts index b480bf3aec..48d4d39098 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -61,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; @@ -233,6 +234,7 @@ export const common = { UINT256_BUFFER_BYTES, ZERO_UINT160, ZERO_UINT256, + MAX_UINT256, NEGATIVE_SATOSHI_FIXED8, TEN_FIXED8, ONE_HUNDRED_FIXED8, diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index c5feec55f0..829a9abd04 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -268,6 +268,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, @@ -346,9 +355,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 => { @@ -800,10 +830,12 @@ export const crypto = { createVerificationScript, createWitness, createWitnessForSignature, + createSignatureRedeemScript, getVerificationScriptHash, createMultiSignatureInvocationScript, createMultiSignatureVerificationScript, createMultiSignatureWitness, + createMultiSignatureRedeemScript, getConsensusAddress, privateKeyToWIF, wifToPrivateKey, 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 c17a1930ba..f8c2b8d91c 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -9,6 +9,12 @@ import { SignerModel } from '../SignerModel'; import { WitnessModel } from '../WitnessModel'; import { AttributeModel } from './attribute'; +export interface TransactionConsensusOptions { + readonly nonce: number; + readonly validUntilBlock: number; + readonly networkFee: BN; +} + export interface TransactionModelAdd< TAttribute extends AttributeModel = AttributeModel, TWitness extends WitnessModel = WitnessModel, @@ -43,8 +49,8 @@ export class TransactionModel< protected static readonly WitnessConstructor: Constructor = WitnessModel; public readonly version: number; - public readonly nonce: number; - public readonly validUntilBlock: number; + public readonly nonce?: number; + public readonly validUntilBlock?: number; public readonly signers: readonly TSigner[]; public readonly sender?: UInt160; public readonly attributes: readonly TAttribute[]; @@ -78,7 +84,7 @@ export class TransactionModel< this.witnesses = witnesses; this.signers = signers; this.systemFeeInternal = utils.lazy(() => systemFee); - this.networkFeeInternal = utils.lazy(() => networkFee); + this.networkFeeInternal = utils.lazy(() => (networkFee ? networkFee : new BN(0))); this.validUntilBlock = validUntilBlock; this.script = script; const hashIn = hash; @@ -127,6 +133,22 @@ export class TransactionModel< }); } + public cloneWithConsensusOptions(options: TransactionConsensusOptions): this { + // tslint:disable-next-line: no-any + return new (this.constructor as any)({ + version: this.version, + systemFee: this.systemFee, + attributes: this.attributes, + signers: this.signers, + script: this.script, + hash: this.hash, + witnesses: this.witnesses, + nonce: options.nonce, + networkFee: options.networkFee, + validUntilBlock: options.validUntilBlock, + }); + } + public sign(key: PrivateKey): this { return this.clone({ witnesses: this.witnesses.concat([ @@ -147,10 +169,10 @@ export class TransactionModel< public serializeUnsignedBase(writer: BinaryWriter): void { writer.writeUInt8(this.version); - writer.writeUInt32LE(this.nonce); + writer.writeUInt32LE(this.nonce ? this.nonce : 0); writer.writeUInt64LE(this.systemFee); writer.writeUInt64LE(this.networkFee); - writer.writeUInt32LE(this.validUntilBlock); + writer.writeUInt32LE(this.validUntilBlock ? this.validUntilBlock : 0); writer.writeArray(this.signers, (signer) => { signer.serializeWireBase(writer); }); diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 51c6419c49..004676b3b3 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -14,7 +14,6 @@ "dependencies": { "@neo-one/client-common": "^2.7.0", "@neo-one/node-core": "^2.7.0", - "@neo-one/node-vm": "^2.7.0", "@neo-one/logger": "^2.6.1", "@neo-one/utils": "^2.6.1", "bn.js": "^5.0.0", @@ -24,9 +23,16 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", + "@neo-one/node-neo-settings": "^2.7.0", + "@neo-one/node-storage-levelup": "^2.7.0", + "@neo-one/node-vm": "^2.7.0", "@types/jest": "^24.0.18", "@types/js-priority-queue": "^0.0.5", + "@types/levelup": "^3.1.1", + "@types/leveldown": "^4.0.0", "@types/lodash": "^4.14.138", + "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 947cc235f8..fb94edd3e9 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,12 +1,25 @@ import { UInt256 } from '@neo-one/client-common'; -import { Block, Blockchain as BlockchainType, BlockchainSettings, Header, Storage, VM } from '@neo-one/node-core'; +import { + Block, + Blockchain as BlockchainType, + BlockchainSettings, + CallReceipt, + DeserializeWireContext, + Header, + Storage, + Transaction, + TransactionState, + TriggerType, + VM, +} from '@neo-one/node-core'; import PriorityQueue from 'js-priority-queue'; -import { Subject } from 'rxjs'; +import { Observable, Subject } from 'rxjs'; import { flatMap, map, toArray } from 'rxjs/operators'; import { GenesisBlockNotRegisteredError } from './errors'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; +import { wrapExecuteScripts } from './wrapExecuteScripts'; // TODO: bring logger over when its time; const logger = console; @@ -34,8 +47,7 @@ interface Entry { // TODO: revisit this with more context into how the headerIndex is being used. export const recoverHeaderIndex = async (storage: Storage) => { - const initHeaderIndex = await storage.headerHashList - .getAll$() + const initHeaderIndex = await storage.headerHashList.all$ .pipe( flatMap((value) => value.hashes), toArray(), @@ -61,8 +73,7 @@ export const recoverHeaderIndex = async (storage: Storage) => { } } - return storage.blocks - .getAll$() + return storage.blocks.all$ .pipe( map((block) => block.header.hash), toArray(), @@ -87,15 +98,19 @@ export class Blockchain { } // TODO: see if we need something similar and how we'll implement it. - blockchain.loadMempoolPolicy(storage); + // blockchain.loadMempoolPolicy(storage); return blockchain; } + public readonly deserializeWireContext: DeserializeWireContext; + + public readonly verifyWitnesses = verifyWitnesses; + public readonly settings: BlockchainSettings; + // tslint:disable-next-line: readonly-array private readonly headerIndex: UInt256[]; private readonly onPersistNativeContractScript: Buffer; - private readonly settings: BlockchainSettings; private readonly storage: Storage; private readonly vm: VM; @@ -120,6 +135,10 @@ export class Blockchain { this.vm = options.vm; this.onPersistNativeContractScript = options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); + this.deserializeWireContext = { + messageMagic: this.settings.messageMagic, + }; + this.start(); } public get currentBlock(): Block { @@ -130,6 +149,10 @@ export class Blockchain { return this.mutableCurrentBlock; } + public get previousBlock(): Block | undefined { + return this.mutablePreviousBlock; + } + public get storedHeaderCount(): number { return this.mutableStoredHeaderCount; } @@ -138,8 +161,83 @@ export class Blockchain { return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; } + public get currentHeaderIndex(): number { + return this.headerIndex.length; + } + + public get block$(): Observable { + return this.mutableBlock$; + } + + public get isPersistingBlock(): boolean { + return this.mutablePersistingBlocks; + } + + public get blocks() { + return this.storage.blocks; + } + + public get transactions() { + return this.storage.transactions; + } + + public get contracts() { + return this.storage.contracts; + } + + public get storages() { + return this.storage.storages; + } + + public get headerHashList() { + return this.storage.headerHashList; + } + + public get blockHashIndex() { + return this.storage.blockHashIndex; + } + + public get headerHashIndex() { + return this.storage.headerHashIndex; + } + + public get contractID() { + return this.storage.contractID; + } + + public async stop(): Promise { + if (!this.mutableRunning) { + return; + } + + if (this.mutablePersistingBlocks) { + // tslint:disable-next-line promise-must-complete + const doneRunningPromise = new Promise((resolve) => { + this.mutableDoneRunningResolve = resolve; + }); + this.mutableRunning = false; + + await doneRunningPromise; + this.mutableDoneRunningResolve = undefined; + } else { + this.mutableRunning = false; + } + + logger.info({ name: 'neo_blockchain_stop' }, 'NEO blockchain stopped.'); + } + + 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.storage, verifyWitnesses); + const verification = await block.verify(this.vm, this.storage, this.verifyWitnesses); if (!verification) { // TODO: implement a makeError throw new Error('Block Verification Failed'); @@ -161,7 +259,6 @@ export class Blockchain { return; } this.mutableInQueue.add(block.hashHex); - this.mutableBlockQueue.queue({ block, resolve, @@ -174,6 +271,32 @@ export class Blockchain { }); } + public invokeScript(script: Buffer): CallReceipt { + const transaction = { script }; + + return this.invokeTransaction(transaction, 100); + } + + public invokeTransaction( + transaction: TTransaction, + gas: number, + ): CallReceipt { + return this.vm.withApplicationEngine( + { + trigger: TriggerType.Application, + gas, + // container: transaction, TODO: implement this + snapshot: 'main', + testMode: true, + }, + (engine) => { + engine.loadScript(transaction.script); + + return wrapExecuteScripts(engine); + }, + ); + } + private async persistBlocksAsync(): Promise { if (this.mutablePersistingBlocks || !this.mutableRunning) { return; @@ -193,7 +316,6 @@ export class Blockchain { }; try { await this.persistBlockInternal(entryNonNull.block, entryNonNull.verify); - logger.debug(logData); } catch (err) { logger.error({ err, ...logData }); @@ -284,8 +406,8 @@ export class Blockchain { * it is the already serialized changeSet coming from the C# VM Snapshot. There won't need to be as much storage * change conversion with this changeSet so will probably make 2 different `commit` methods, 1 for each. */ - const { changeSet, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); - await this.storage.commit(changeSet); + const { changeBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); + await this.storage.commitBatch(changeBatch); await this.saveHeaderHashList(); this.mutablePreviousBlock = this.mutableCurrentBlock; diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index 0ff6b6043d..fa0d92d96c 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -68,7 +68,8 @@ export class PersistingBlockchain { public persistBlock( block: Block, currentHeaderIndexCount: number, - ): { readonly changeSet: readonly any[]; readonly applicationsExecuted: readonly ApplicationExecuted[] } { + // 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); @@ -103,17 +104,12 @@ export class PersistingBlockchain { main.addBlock(block); main.clone(); - const { changeSet: transactionsChangeSet, executed: executedTransactions } = this.persistTransactions( - block, - main, - clone, - ); + const executedTransactions = this.persistTransactions(block, main, clone); main.changeBlockHashIndex(block.index, block.hash); - const finalChangeSet = new Set([...transactionsChangeSet, ...main.getChangeSet()]); const finalApplicationsExecuted = appsExecuted.concat(executedTransactions); - return { changeSet: [...finalChangeSet], applicationsExecuted: finalApplicationsExecuted }; + return { changeBatch: main.getChangeSet(), applicationsExecuted: finalApplicationsExecuted }; }); } @@ -146,26 +142,12 @@ export class PersistingBlockchain { block: Block, main: SnapshotHandler, clone: Omit, - ): { readonly changeSet: readonly any[]; readonly executed: readonly ApplicationExecuted[] } { - return block.transactions.reduce<{ - readonly changeSet: any[]; - readonly executed: readonly ApplicationExecuted[]; - }>( - (acc, transaction) => { - const { changeSet: nextChangeSet, appExecuted } = this.persistTransaction( - transaction, - block.index, - main, - clone, - ); + ): readonly ApplicationExecuted[] { + return block.transactions.reduce((acc, transaction) => { + const appExecuted = this.persistTransaction(transaction, block.index, main, clone); - return { - changeSet: acc.changeSet.concat(nextChangeSet), - executed: acc.executed.concat(appExecuted), - }; - }, - { changeSet: [], executed: [] }, - ); + return acc.concat(appExecuted); + }, []); } private persistTransaction( @@ -173,9 +155,8 @@ export class PersistingBlockchain { index: number, main: SnapshotHandler, clone: Omit, - ): { readonly appExecuted: ApplicationExecuted; readonly changeSet: readonly any[] } { + ): ApplicationExecuted { clone.addTransaction(transaction, index); - let changeSet = clone.getChangeSet(); clone.commit('transactions'); return this.vm.withApplicationEngine( @@ -192,16 +173,12 @@ export class PersistingBlockchain { if (state === 'HALT') { clone.deleteTransaction(transaction.hash); clone.addTransaction(transaction, index, VMState.HALT); - changeSet = changeSet.concat(clone.getChangeSet()); clone.commit(); } else { main.clone(); } - return { - changeSet, - appExecuted: blockchainUtils.getApplicationExecuted(engine), - }; + return blockchainUtils.getApplicationExecuted(engine); }, ); } 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 d599d05923..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,140 +1,212 @@ -// tslint:disable no-any no-object-mutation -import { Transaction, Witness } from '@neo-one/node-core'; -import { BN } from 'bn.js'; +// // 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.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(), - }, +// 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 }); - - 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.'); - } - }); + }, }); }); 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/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index 8e3dfad47b..4d09841b9a 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -1,4 +1,4 @@ -import { ScriptBuilder, UInt160 } from '@neo-one/client-common'; +import { common, ScriptBuilder, UInt160 } from '@neo-one/client-common'; import { ApplicationEngine, Transaction, utils as coreUtils } from '@neo-one/node-core'; interface BaseNativeContract { @@ -7,8 +7,12 @@ interface BaseNativeContract { // TODO: Implement class NativeContract implements BaseNativeContract { - public static readonly GAS: BaseNativeContract; - public static readonly NEO: BaseNativeContract; + public static readonly GAS: BaseNativeContract = { + hash: common.stringToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), + }; + public static readonly NEO: BaseNativeContract = { + hash: common.stringToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), + }; public readonly hash: UInt160; public constructor(hash: UInt160) { @@ -35,7 +39,7 @@ const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transac state: engine.state, gasConsumed: engine.gasConsumed, stack: engine.resultStack, - notifications: [] /* engine.notifications TODO: implement this */, + // notifications: engine.notifications, }); export const utils = { diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index 61de4968a3..bf77e4ffc0 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -65,7 +65,7 @@ export const verifyWithApplicationEngine = ( init?: ContractMethodDescriptor, ): VerifyResult => vm.withApplicationEngine( - { trigger: TriggerType.Verification, container: verifiable, snapshot: 'main', gas }, + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'main', gas, testMode: true }, (engine) => { engine.loadScript(verification, CallFlags.None); engine.loadClonedContext(offset); diff --git a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts new file mode 100644 index 0000000000..51fe294852 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts @@ -0,0 +1,21 @@ +import { ApplicationEngine, CallReceipt } from '@neo-one/node-core'; + +// TODO: we might need to visit this again if we implement error handling in the VM +export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallReceipt => { + const result = applicationEngine.execute(); + if (result === 'HALT') { + return { + state: 'HALT', + gasConsumed: applicationEngine.gasConsumed, + stack: applicationEngine.resultStack, + notifications: applicationEngine.notifications, + }; + } + + return { + state: result, + gasConsumed: applicationEngine.gasConsumed, + stack: applicationEngine.resultStack, + notifications: [], + }; +}; diff --git a/packages/neo-one-node-core/src/Block.ts b/packages/neo-one-node-core/src/Block.ts index 2cb619f85a..ec41729e6c 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -2,9 +2,9 @@ import { BinaryWriter, BlockJSON, common, + createSerializeWire, InvalidFormatError, IOHelper, - TransactionJSON, UInt256, } from '@neo-one/client-common'; import _ from 'lodash'; @@ -92,7 +92,7 @@ export class Block extends BlockBase implements SerializableWire, SerializableJS throw new InvalidFormatError('Invalid merkle root'); } - return new this({ + return new Block({ version: blockBase.version, previousHash: blockBase.previousHash, merkleRoot: blockBase.merkleRoot, @@ -112,6 +112,8 @@ export class Block extends BlockBase implements SerializableWire, SerializableJS }); } + 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(() => @@ -202,7 +204,7 @@ export class Block extends BlockBase implements SerializableWire, SerializableJS return { ...blockBaseJSON, consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, - tx: this.transactions.map((transaction) => transaction.serializeJSON(context) as TransactionJSON), + tx: this.transactions.map((transaction) => transaction.serializeJSON(context)), // confirmations: blockBaseJSON.confirmations, TODO: is this our own property? }; } diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 34d1c739fe..e67f2dcf73 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -7,6 +7,7 @@ import { InvalidFormatError, IOHelper, JSONHelper, + SerializableWire, UInt160, UInt256, UInt256Hex, @@ -15,8 +16,10 @@ import { BN } from 'bn.js'; import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; +import { BlockchainStorage } from './Storage'; import { utils } from './utils'; -import { StorageMethods, VerifyWitnesses } from './Verifiable'; +import { Verifiable, VerifyWitnesses } from './Verifiable'; +import { VM } from './vm'; import { Witness } from './Witness'; export interface BlockBaseAdd { @@ -30,7 +33,7 @@ export interface BlockBaseAdd { readonly hash?: UInt256; } -export abstract class BlockBase implements EquatableKey { +export abstract class BlockBase implements EquatableKey, SerializableWire, Verifiable { public static deserializeWireBase(options: DeserializeWireBaseOptions): BlockBaseAdd { const { version, previousHash, merkleRoot, timestamp, index, nextConsensus } = this.deserializeWireBaseUnsigned( options, @@ -78,12 +81,13 @@ export abstract class BlockBase implements EquatableKey { public readonly timestamp: BN; public readonly index: number; public readonly nextConsensus: UInt160; - public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ tryGetHeader }: StorageMethods) => { + public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ blocks }: BlockchainStorage) => { if (this.previousHash === common.ZERO_UINT256) { return [this.witness.scriptHash]; } - const prevHeader = await tryGetHeader(this.previousHash); + const prevBlock = await 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`); @@ -96,8 +100,8 @@ export abstract class BlockBase implements EquatableKey { common.uInt256Equal(this.hash, other.hash), ); public readonly toKeyString = utils.toKeyString(BlockBase, () => this.hashHex); - public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + 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(() => createGetHashData(this.serializeUnsigned)()); @@ -198,8 +202,9 @@ export abstract class BlockBase implements EquatableKey { }; } - public async verify(storage: StorageMethods, verifyWitnesses: VerifyWitnesses) { - const prevHeader = await storage.tryGetHeader(this.previousHash); + public async verify(vm: VM, storage: BlockchainStorage, verifyWitnesses: VerifyWitnesses) { + const prevBlock = await storage.blocks.tryGet({ hashOrIndex: this.previousHash }); + const prevHeader = prevBlock?.header; if (prevHeader === undefined) { return false; } @@ -212,7 +217,7 @@ export abstract class BlockBase implements EquatableKey { return false; } - return verifyWitnesses(this, storage, 1); + return verifyWitnesses(vm, this, storage, 1); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index a617f2497a..70c0653421 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -13,25 +13,28 @@ type CallReceipt = any; export interface Blockchain extends BlockchainStorage { readonly settings: BlockchainSettings; readonly deserializeWireContext: DeserializeWireContext; - readonly serializeJSONContext: SerializeJSONContext; + // readonly serializeJSONContext: SerializeJSONContext; // readonly feeContext: FeeContext; readonly currentBlock: Block; readonly previousBlock: Block | undefined; - readonly currentHeaderIndex: Header; + readonly currentHeaderIndex: number; readonly currentBlockIndex: number; readonly block$: Observable; readonly isPersistingBlock: boolean; readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; - readonly persistHeaders: (headers: readonly Header[]) => Promise; + // readonly persistHeaders: (headers: readonly Header[]) => Promise; readonly verifyWitnesses: VerifyWitnesses; - readonly invokeScript: (script: Buffer) => Promise; - readonly invokeTransaction: (transaction: Transaction) => Promise; + readonly invokeScript: (script: Buffer) => CallReceipt; + readonly invokeTransaction: ( + transaction: TTransaction, + gas: number, + ) => CallReceipt; - readonly updateSettings: (settings: BlockchainSettings) => void; + // readonly updateSettings: (settings: BlockchainSettings) => void; readonly stop: () => Promise; readonly reset: () => Promise; } diff --git a/packages/neo-one-node-core/src/Contract.ts b/packages/neo-one-node-core/src/Contract.ts new file mode 100644 index 0000000000..003bf6378e --- /dev/null +++ b/packages/neo-one-node-core/src/Contract.ts @@ -0,0 +1,58 @@ +import { + common, + ContractParameterTypeModel, + crypto, + ECPoint, + scriptHashToAddress, + UInt160, +} from '@neo-one/client-common'; +import _ from 'lodash'; +import { utils } from './utils'; + +export interface ContractAdd { + readonly script: Buffer; + readonly parameterList: readonly ContractParameterTypeModel[]; + readonly scriptHash?: UInt160; + readonly address?: string; +} + +/* I implemented this but then didn't need it since I can just use the underlying crypto function I need. + * It might come up later so we will keep it around for now. TODO: revist + **/ +export class Contract { + public static createMultiSigContract(m: number, publicKeys: readonly ECPoint[]): Contract { + return new Contract({ + script: crypto.createMultiSignatureRedeemScript(m, publicKeys), + parameterList: _.range(m).map(() => ContractParameterTypeModel.Signature), + }); + } + + public static createSignatureContract(publicKey: ECPoint): Contract { + return new Contract({ + script: crypto.createSignatureRedeemScript(publicKey), + parameterList: [ContractParameterTypeModel.Signature], + }); + } + + 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 }: ContractAdd) { + 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(); + } +} diff --git a/packages/neo-one-node-core/src/Settings.ts b/packages/neo-one-node-core/src/Settings.ts index 76ea62d9e9..eea57b3f86 100644 --- a/packages/neo-one-node-core/src/Settings.ts +++ b/packages/neo-one-node-core/src/Settings.ts @@ -8,12 +8,11 @@ export interface BlockchainSettings extends ProtocolSettings { readonly generationAmount: readonly number[]; readonly privateKeyVersion: number; readonly standbyValidators: readonly ECPoint[]; - readonly memPoolSize: number; } export interface ProtocolSettings { readonly messageMagic: number; readonly addressVersion: number; - readonly standbyCommittee: readonly string[]; + readonly standbyCommittee: readonly ECPoint[]; readonly committeeMembersCount: number; readonly validatorsCount: number; readonly millisecondsPerBlock: number; @@ -30,3 +29,5 @@ export interface PolicySettings { export interface NetworkSettings { readonly seeds: readonly string[]; } + +export interface Settings extends BlockchainSettings {} diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 0b31fa8dcf..378d9fbfa6 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -8,6 +8,9 @@ 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 ReadMetadataStorage { readonly get: () => Promise; readonly tryGet: () => Promise; @@ -117,9 +120,11 @@ export interface BlockchainStorage { } export interface Storage extends BlockchainStorage { - readonly blocks: ReadGetAllStorage; - readonly headerHashList: ReadGetAllStorage; + readonly blocks: ReadAllStorage; + readonly headerHashList: 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/TrimmedBlock.ts b/packages/neo-one-node-core/src/TrimmedBlock.ts index ab75c19cbc..1eb8bf8c74 100644 --- a/packages/neo-one-node-core/src/TrimmedBlock.ts +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -1,5 +1,6 @@ import { BinaryWriter, + createSerializeWire, InvalidFormatError, IOHelper, JSONHelper, @@ -27,21 +28,15 @@ export interface BlockKey { export class TrimmedBlock extends BlockBase implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { - const { - version, - previousHash, - merkleRoot, - timestamp, - index, - nextConsensus, - witness, - } = BlockBase.deserializeWireBase(options); const { reader } = options; + const { version, previousHash, merkleRoot, timestamp, index, nextConsensus, witness } = super.deserializeWireBase( + options, + ); - const hashes = reader.readArray(reader.readUInt256, Block.MaxContentsPerBlock); + const hashes = reader.readArray(reader.readUInt256.bind(reader), Block.MaxContentsPerBlock); const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; - return new this({ + return new TrimmedBlock({ version, previousHash, merkleRoot, @@ -61,6 +56,8 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { }); } + 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; @@ -82,10 +79,30 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { }), ); - public constructor(options: TrimmedBlockAdd) { - super(options); - this.consensusData = options.consensusData; - this.hashes = options.hashes; + public constructor({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + consensusData, + hashes, + }: TrimmedBlockAdd) { + super({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + }); + this.consensusData = consensusData; + this.hashes = hashes; this.isBlock = this.hashes.length > 0; } @@ -131,7 +148,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); - writer.writeArray(this.hashes, writer.writeUInt256); + writer.writeArray(this.hashes, writer.writeUInt256.bind(writer)); if (this.hashes.length > 0) { if (this.consensusData === undefined) { throw new InvalidFormatError( diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts index 920f34fa33..0377464960 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -1,5 +1,6 @@ -import { UInt160 } from '@neo-one/client-common'; +import { SerializableWire, UInt160 } from '@neo-one/client-common'; import { BlockchainStorage } from './Storage'; +import { VM } from './vm'; import { Witness } from './Witness'; export interface Verifiable { @@ -14,4 +15,9 @@ export interface VerifyResult { readonly result: boolean; } -export type VerifyWitnesses = (verifiable: Verifiable, storage: BlockchainStorage, gasIn: number) => Promise; +export type VerifyWitnesses = ( + vm: VM, + verifiable: Verifiable & SerializableWire, + storage: BlockchainStorage, + gasIn: number, +) => Promise; diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 67ce78732c..b3910731d1 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -3,6 +3,7 @@ export * from './BlockBase'; export * from './Blockchain'; export * from './ConsensusData'; export * from './manifest'; +export * from './ContractIDState'; export * from './ContractState'; export * from './constants'; export * from './crypto'; diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 75da776311..0166637e8c 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -182,11 +182,11 @@ export class Transaction hash: JSONHelper.writeUInt256(this.hash), size: this.size, version: this.version, - nonce: this.nonce, + nonce: this.nonce ? this.nonce : 0, sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, sysfee: JSONHelper.writeUInt64LE(this.systemFee), netfee: JSONHelper.writeUInt64LE(this.networkFee), - validuntilblock: this.validUntilBlock, + validuntilblock: this.validUntilBlock ? this.validUntilBlock : 0, signers: this.signers.map((signer) => signer.serializeJSON(options)), attributes: this.attributes.map((attr) => attr.serializeJSON(options)), script: JSONHelper.writeBuffer(this.script), diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 71b83f3b28..3e1dfb5e62 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,9 +1,9 @@ -import { SerializableWire, UInt256, VMState } from '@neo-one/client-common'; +import { SerializableWire, UInt160, UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; +import { CallFlags } from './CallFlags'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; import { Verifiable } from './Verifiable'; -import { CallFlags } from './CallFlags'; export enum TriggerType { Verification = 0x00, @@ -11,6 +11,20 @@ export enum TriggerType { Application = 0x10, } +export interface Notification { + readonly scriptContainer: Buffer; + readonly scriptHash: UInt160; + readonly eventName: string; + readonly state: readonly StackItem[]; +} + +export interface CallReceipt { + readonly state: keyof typeof VMState; + readonly gasConsumed: number; + readonly stack: readonly StackItem[]; + readonly notifications: readonly Notification[]; +} + export type SnapshotName = 'main' | 'clone'; export interface ApplicationEngineOptions { @@ -18,14 +32,15 @@ export interface ApplicationEngineOptions { readonly container?: Verifiable & SerializableWire; readonly snapshot?: SnapshotName; readonly gas: number; - readonly testMode?: boolean; + readonly testMode: boolean; } export interface ApplicationEngine { - readonly trigger: TriggerType; + readonly trigger: keyof typeof TriggerType; readonly gasConsumed: number; readonly resultStack: readonly StackItem[]; - readonly state: VMState; + readonly state: keyof typeof VMState; + readonly notifications: readonly Notification[]; readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; readonly execute: () => keyof typeof VMState; readonly loadClonedContext: (position: number) => boolean; @@ -38,24 +53,22 @@ export interface SnapshotHandler { readonly addTransaction: (transaction: Transaction, index: number, state?: VMState) => boolean; readonly deleteTransaction: (hash: UInt256) => boolean; readonly commit: (partial?: SnapshotPartial) => boolean; - readonly reset: () => boolean; + // readonly reset: () => boolean; readonly changeBlockHashIndex: (index: number, hash: UInt256) => boolean; readonly changeHeaderHashIndex: (index: number, hash: UInt256) => boolean; readonly setPersistingBlock: (block: Block) => boolean; + // TODO: type the returning changeSet readonly getChangeSet: () => any; readonly clone: () => void; } -// tslint:disable-next-line no-any TODO: implement -export type Notification = any; - export interface ApplicationExecuted { readonly transaction?: Transaction; - readonly trigger: TriggerType; - readonly state: VMState; + readonly trigger: keyof typeof TriggerType; + readonly state: keyof typeof VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; - readonly notifications: readonly Notification[]; + // readonly notifications: readonly Notification[]; } export interface VM { diff --git a/packages/neo-one-node-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 2cbe54b15b..52e4d155c5 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -1,14 +1,5 @@ -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]; @@ -16,129 +7,183 @@ export const GENERATION_AMOUNT: readonly number[] = [8, 7, 6, 5, 4, 3, 2, 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; } -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 = () => { 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), + signers: [ + new Signer({ + account: crypto.hash160(Buffer.from([Op.PUSH1])), + scopes: WitnessScopeModel.None, + }), + ], + attributes: [], + witnesses: [getDeployWitness()], }); }; -interface GensisBlockOptions { - readonly privateNet?: boolean; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; - readonly address: UInt160; +interface GetGenesisBlockOptions { readonly consensusAddress: UInt160; } -const getGenesisBlock = ({ privateNet, governingToken, utilityToken, address, consensusAddress }: GensisBlockOptions) => +const getGenesisBlock = ({ consensusAddress }: GetGenesisBlockOptions) => new Block({ previousHash: clientCommon.ZERO_UINT256, - timestamp: 1468595301, + timestamp: new BN(Date.UTC(2016, 7, 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: [getDeployNativeContracts()], }); -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 }: Options) => ({ + genesisBlock: getGenesisBlock({ + consensusAddress, + }), + 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..614b8a0ad3 100644 --- a/packages/neo-one-node-neo-settings/src/createMain.ts +++ b/packages/neo-one-node-neo-settings/src/createMain.ts @@ -1,5 +1,5 @@ -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 DEFAULT_VALIDATORS: readonly string[] = [ @@ -12,68 +12,74 @@ 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, }); 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), - }, + millisecondsPerBlock: + millisecondsPerBlock === undefined ? commonSettings.millisecondsPerBlock : millisecondsPerBlock, + // maxTransactionsPerBlock: commonSettings.maxTransactionsPerBlock, + standbyCommittee, + committeeMembersCount: standbyCommittee.length, + memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, + validatorsCount: standbyValidators.length, + // 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, + // registerValidatorFee: clientCommon.fixed8FromDecimal(1000), + messageMagic: 5195086, addressVersion: clientCommon.NEO_ADDRESS_VERSION, privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, standbyValidators, - vm: { - storageContext: { - v0: { - index: 0, - }, - }, - }, + // vm: { + // storageContext: { + // v0: { + // index: 0, + // }, + // }, + // }, }; }; 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-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index ac32d5565f..2ebcbbd1c3 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -1,132 +1,98 @@ -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 { BinaryWriter, common, UInt160, UInt256 } from '@neo-one/client-common'; +import { BlockKey, StorageKey } from '@neo-one/node-core'; + +enum Prefix { + Block = 0x01, + Transaction = 0x02, + Contract = 0x50, + Storage = 0x70, + HeaderHashList = 0x80, + CurrentBlock = 0xc0, + CurrentHeader = 0xc1, + ContractID = 0xc2, + + // 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; +}) => (key: Key) => Buffer.concat([Buffer.from([prefix]), serializeKey(key)]); + +const getMetadataKey = ({ prefix }: { readonly prefix: Prefix }) => Buffer.from([prefix]); + +const serializeHeaderHashListKey = (key: number) => { + const writer = new BinaryWriter(); + writer.writeUInt32LE(key); + + return writer.toBuffer(); }; +const createBlockKey = getCreateKey({ + serializeKey: ({ hashOrIndex }) => { + if (typeof hashOrIndex === 'number') { + // TODO: implement getting a block by its index + 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 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 minBlockKey = createBlockKey({ hashOrIndex: common.ZERO_UINT256 }); +const maxBlockKey = createBlockKey({ hashOrIndex: common.MAX_UINT256 }); + +const minHeaderHashListKey = createHeaderHashListKey(0); +const maxHeaderHashListKey = createHeaderHashListKey(0xffffffff); + export const keys = { - validatorsCountKey, - serializeHeaderIndexHashKey, - maxHeaderHashKey, - maxBlockHashKey, - getAccountUnclaimedKeyMin, - getAccountUnclaimedKeyMax, - getAccountUnspentKeyMin, - getAccountUnspentKeyMax, - getStorageItemKeyMin, - getStorageItemKeyMax, - serializeActionKey, - getActionKeyMin, - getActionKeyMax, - validatorMinKey, - validatorMaxKey, - accountMinKey, - accountMaxKey, - typeKeyToSerializeKey, + createBlockKey, + createTransactionKey, + createContractKey, + createStorageKey, + createHeaderHashListKey, + blockHashIndexKey, + headerHashIndexKey, + contractIDKey, + minBlockKey, + maxBlockKey, + minHeaderHashListKey, + maxHeaderHashListKey, }; diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 41014513f4..96a879ec0f 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -18,6 +18,7 @@ "@neo-one/node-storage-common": "^2.7.0", "@neo-one/utils": "^2.6.1", "@types/levelup": "^3.1.1", + "@types/abstract-leveldown": "^5.0.1", "levelup": "4.1.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" 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..924389c609 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,5 @@ import { common } from '@neo-one/client-common'; -import { AddChange, DeleteChange, Storage, StorageFlags, StorageItem } from '@neo-one/node-core'; +import { AddChange, DeleteChange, Storage, StorageItem, StorageKey } from '@neo-one/node-core'; import LevelUp from 'levelup'; import MemDown from 'memdown'; import { storage as levelUpStorage } from '../'; @@ -11,33 +11,34 @@ 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); }); }); diff --git a/packages/neo-one-node-storage-levelup/src/convertChange.ts b/packages/neo-one-node-storage-levelup/src/convertChange.ts index c588480e41..d2453276eb 100644 --- a/packages/neo-one-node-storage-levelup/src/convertChange.ts +++ b/packages/neo-one-node-storage-levelup/src/convertChange.ts @@ -1,241 +1,107 @@ 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': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.account(change.value), - value: change.value.serializeWire(), - }, - ]; - - case 'accountUnspent': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.accountUnspent({ - hash: change.value.hash, - input: change.value.input, - }), - - value: change.value.serializeWire(), - }, - ]; - - case 'accountUnclaimed': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.accountUnclaimed({ - hash: change.value.hash, - input: change.value.input, - }), - - value: change.value.serializeWire(), - }, - ]; - - case 'action': - 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), - value: change.value.serializeWire(), - }, - ]; - case 'block': 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), - }; - - case 'storageItem': - return { - type: 'del', - key: keys.typeKeyToSerializeKey.storageItem(change.key), + key: keys.createContractKey(change.key), }; - case 'validator': + case 'storage': return { type: 'del', - key: keys.typeKeyToSerializeKey.validator(change.key), + key: keys.createStorageKey(change.key), }; default: diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index ccbb61b8e0..b6f921b1b2 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,30 +1,22 @@ -import { UInt256 } from '@neo-one/client-common'; import { - Account, - AccountUnclaimed, - AccountUnspent, - Asset, - Block, - BlockData, + BinaryReader, BlockKey, - Contract, - deserializeActionWire, + ContractIDState, + ContractState, DeserializeWireContext, - Header, - HeaderKey, - InvocationData, - Output, + HashIndexState, + // InvocationData, + HeaderHashList, Storage, + // TransactionData, StorageItem, - TransactionData, - Validator, - ValidatorsCount, + 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'; interface LevelUpStorageOptions { @@ -33,230 +25,118 @@ interface LevelUpStorageOptions { } export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): 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, - }), - }); - - 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, - }), - }; + // 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; + // } + // } + + // 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({ - db, - latestKey: keys.maxBlockHashKey, - deserializeResult: (result) => ({ - hash: common.deserializeBlockHash(result), - }), - - get: blockBase.get, - }), - }; - - 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({ - db, - serializeKey: keys.typeKeyToSerializeKey.blockData, - deserializeValue: (buffer) => - BlockData.deserializeWire({ - context, - buffer, - }), - }), - - account: read.createReadAllStorage({ + all$: read.createAll$({ db, - serializeKey: keys.typeKeyToSerializeKey.account, - minKey: keys.accountMinKey, - maxKey: keys.accountMaxKey, + range: { gte: keys.minBlockKey, lte: keys.maxBlockKey }, deserializeValue: (buffer) => - Account.deserializeWire({ - context, - buffer, - }), - }), - - accountUnclaimed: read.createReadGetAllStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.accountUnclaimed, - getMinKey: keys.getAccountUnclaimedKeyMin, - getMaxKey: keys.getAccountUnclaimedKeyMax, - deserializeValue: (buffer) => - AccountUnclaimed.deserializeWire({ + TrimmedBlock.deserializeWire({ context, buffer, }), }), + }; - accountUnspent: read.createReadGetAllStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.accountUnspent, - getMinKey: keys.getAccountUnspentKeyMin, - getMaxKey: keys.getAccountUnspentKeyMax, - deserializeValue: (buffer) => - AccountUnspent.deserializeWire({ - context, - buffer, - }), - }), + return { + blocks, - 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.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.transactionData, - deserializeValue: (buffer) => TransactionData.deserializeWire({ context, buffer }), - }), - - output, - contract: read.createReadStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.contract, + serializeKey: keys.createStorageKey, deserializeValue: (buffer) => - Contract.deserializeWire({ + StorageItem.deserializeWire({ context, buffer, }), }), - storageItem: read.createReadGetAllStorage({ + headerHashList: read.createReadAllStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.storageItem, - getMinKey: keys.getStorageItemKeyMin, - getMaxKey: keys.getStorageItemKeyMax, + range: { gte: keys.minHeaderHashListKey, lte: keys.maxHeaderHashListKey }, + serializeKey: keys.createHeaderHashListKey, deserializeValue: (buffer) => - StorageItem.deserializeWire({ + HeaderHashList.deserializeWire({ context, buffer, }), }), - validator: read.createReadAllStorage({ + blockHashIndex: read.createReadMetadataStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.validator, - minKey: keys.validatorMinKey, - maxKey: keys.validatorMaxKey, - deserializeValue: (buffer) => - Validator.deserializeWire({ - context, - buffer, - }), + key: keys.blockHashIndexKey, + deserializeValue: (buffer) => HashIndexState.deserializeWire({ context, buffer }), }), - invocationData: read.createReadStorage({ + headerHashIndex: read.createReadMetadataStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.invocationData, - deserializeValue: (buffer) => - InvocationData.deserializeWire({ - context, - buffer, - }), + key: keys.headerHashIndexKey, + deserializeValue: (buffer) => HashIndexState.deserializeWire({ context, buffer }), }), - validatorsCount: read.createReadMetadataStorage({ + contractID: read.createReadMetadataStorage({ db, - key: keys.validatorsCountKey, - deserializeValue: (buffer) => - ValidatorsCount.deserializeWire({ - context, - buffer, - }), + key: keys.headerHashIndexKey, + deserializeValue: (buffer) => ContractIDState.deserializeWire({ context, buffer }), }), async close(): Promise { @@ -273,6 +153,9 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage }, []); 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[] = []; @@ -293,3 +176,62 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage }, }; }; +// 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..642632a166 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -1,12 +1,13 @@ // tslint:disable no-var-before-return prefer-immediate-return -import { ReadAllStorage, ReadGetAllStorage, ReadMetadataStorage, ReadStorage } from '@neo-one/node-core'; +import { ReadAllStorage, ReadMetadataStorage, ReadStorage } 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'; +import { StreamOptions } from './types'; -type SerializeKey = (key: Key) => string; +type SerializeKey = (key: Key) => Buffer; export function createTryGet({ get, @@ -27,31 +28,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)); - - return value; - } catch (error) { - if (error.notFound || error.code === 'KEY_NOT_FOUND') { - return undefined; - } - throw error; - } - }; -} +// 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; +// } +// }; +// } export function createReadStorage({ db, @@ -70,7 +72,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 +84,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,41 +114,42 @@ export function createReadAllStorage({ return { get: readStorage.get, tryGet: readStorage.tryGet, - all$: createAll$({ db, minKey, maxKey, deserializeValue }), + all$: createAll$({ db, range, deserializeValue }), }; } -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, - }), - }; -} +// 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 +176,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 +186,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-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index d50f158946..46cda39068 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using System.Threading; using Neo.Network.P2P.Payloads; using Neo.Persistence; using Neo.SmartContract; @@ -22,6 +21,7 @@ private enum EngineMethod getresultstack, gettrigger, getgasconsumed, + getnotifications, dispose_engine, } @@ -59,6 +59,9 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) case EngineMethod.getgasconsumed: return this._getGasConsumed(); + case EngineMethod.getnotifications: + return this._getNotifications(); + case EngineMethod.dispose_engine: this.disposeEngine(); @@ -128,6 +131,18 @@ private long _getGasConsumed() return this.engine != null ? this.engine.GasConsumed : 0; } + private ReturnHelpers.NotifyEventReturn[] _getNotifications() + { + this.isEngineInitialized(); + var events = this.engine.Notifications; + if (events == null || events.Count == 0) + { + return new ReturnHelpers.NotifyEventReturn[] { }; + } + + return events.Select((p) => new ReturnHelpers.NotifyEventReturn(p)).ToArray(); + } + private bool isEngineInitialized() { if (this.engine == null) diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 91e4d5184e..e92c7507e1 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Threading; using Neo; using Neo.Ledger; using Neo.Network.P2P.Payloads; @@ -27,6 +28,7 @@ enum SnapshotMethod snapshot_change_header_hash_index, snapshot_set_persisting_block, snapshot_get_change_set, + snapshot_transactions_delete, } private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) @@ -48,6 +50,7 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) 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)) @@ -56,7 +59,12 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) ((IVerifiable)tx).Deserialize(reader); } - return this._snapshotTransactionsAdd(this.selectSnapshot(args.snapshot), tx, blockIndex); + 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(); @@ -130,7 +138,7 @@ private StoreView selectSnapshot(string snapshot, bool required = true) } } - private void _snapshotCommit(SnapshotView snapshot, string partial) + private void _snapshotCommit(StoreView snapshot, string partial) { switch (partial) { @@ -161,6 +169,13 @@ private bool _snapshotTransactionsAdd(StoreView snapshot, Transaction tx, uint i return true; } + private bool _snapshotTransactionsDelete(StoreView snapshot, UInt256 hash) + { + snapshot.Transactions.Delete(hash); + + return true; + } + private bool _snapshotChangeBlockHashIndex(StoreView snapshot, uint index, UInt256 hash) { var hashIndex = snapshot.BlockHashIndex.GetAndChange(); @@ -179,7 +194,7 @@ private bool _snapshotChangeHeaderHashIndex(StoreView snapshot, uint index, UInt return true; } - private dynamic _snapshotGetChangeSet(SnapshotView snapshot) + private dynamic _snapshotGetChangeSet(StoreView snapshot) { return new ChangeSet(snapshot).set.ToArray(); } diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index 34c6877cf9..d136748df4 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -5,6 +5,10 @@ using System.Collections.Generic; using NEOONE.Storage; using Neo.Persistence; +using LevelHelper = NEOONE.Storage.LevelDB.Helper; +using Neo.IO; +using Neo.SmartContract.Native; +using Neo.Network.P2P.Payloads; namespace NEOONE { @@ -19,6 +23,7 @@ private enum BaseMethod { init, dispose, + test, } private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) @@ -36,6 +41,9 @@ private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) case BaseMethod.dispose: return this._dispose(); + case BaseMethod.test: + return this._test(); + default: throw new InvalidOperationException(); @@ -80,6 +88,23 @@ private bool _dispose() return true; } + private dynamic _test() + { + var tx = new Transaction() + { + Script = new byte[] { 0x01 }, + Attributes = Array.Empty(), + Signers = Array.Empty(), + NetworkFee = 0x02, + SystemFee = 0x03, + Nonce = 0x04, + ValidUntilBlock = 0x05, + Version = 0x06, + Witnesses = new Witness[] { new Witness() { VerificationScript = new byte[] { 0x07 } } }, + }; + return tx.Hash.ToArray(); + } + #pragma warning disable 1998 public async Task Invoke(dynamic input) { diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index b512157725..4f48fa5511 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -1,142 +1,160 @@ using System; using System.Linq; +using Neo.IO; +using Neo.SmartContract; using Neo.VM.Types; namespace NEOONE { - public class ReturnHelpers - { - public class PrimitiveReturn + public class ReturnHelpers { - 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) => + public class PrimitiveReturn { - return new KeyValueReturn( - convertStackItem(keyValue.Key), - convertStackItem(keyValue.Value) - ); - }).ToArray(); - } - } + 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 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 KeyValueReturn(PrimitiveReturn key, dynamic value) + { + this.key = key; + this.value = value; + } + } - 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 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 NotifyEventReturn + { + public byte[] scriptContainer; + public byte[] scriptHash; + public string eventName; + public dynamic[] state; + + public NotifyEventReturn(NotifyEventArgs notifyEvent) + { + this.scriptContainer = ((ISerializable)notifyEvent.ScriptContainer).ToArray(); + this.scriptHash = notifyEvent.ScriptHash.ToArray(); + this.eventName = notifyEvent.EventName; + this.state = convertStackItem(notifyEvent.State); + } + } } - } } diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index 31f5f3ffb7..90f65ca459 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,9 +1,9 @@ -import { common, VMState } from '@neo-one/client-common'; +import { common } from '@neo-one/client-common'; import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; +import { parseNotifications, parseStackItems } from './converters'; import { EngineMethods } from './Methods'; -import { parse as parseStackItems } from './StackItems'; import { DispatcherFunc } from './types'; export interface CreateOptions { @@ -44,11 +44,9 @@ export class ApplicationEngine { } public get state() { - return VMState[ - this.dispatch({ - method: 'getvmstate', - }) - ]; + return this.dispatch({ + method: 'getvmstate', + }); } public get resultStack() { @@ -61,6 +59,14 @@ export class ApplicationEngine { ); } + public get notifications() { + return parseNotifications( + this.dispatch({ + method: 'getnotifications', + }), + ); + } + public create({ trigger, container, gas, snapshot, testMode }: CreateOptions) { return this.dispatch({ method: 'create', diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index e7ae791e4d..11a9b74f82 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -30,7 +30,7 @@ export class Dispatcher { this.init = this.initialize(this.options.levelDBPath); } - public withSnapshots( + public withSnapshots( func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, ) { this.resetSnapshots(); @@ -40,7 +40,10 @@ export class Dispatcher { return func({ main, clone }); } - public withApplicationEngine(options: CreateOptions, func: (engine: Omit) => T) { + public withApplicationEngine( + options: CreateOptions, + func: (engine: Omit) => T, + ) { const engine = new ApplicationEngine(this); engine.create(options); const result = func(engine); @@ -72,6 +75,12 @@ export class Dispatcher { this.initialize(this.options.levelDBPath); } + public test(): any { + return this.dispatch({ + method: 'test', + }); + } + private initialize(path?: string): boolean { return this.dispatch({ method: 'init', diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index dbd6353e84..8ee5577520 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,6 +1,6 @@ import { VMState } from '@neo-one/client-common'; import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; -import { StackItemReturn } from '../StackItems'; +import { NotificationReturn, StackItemReturn } from '../converters'; import { DefaultMethods, DispatchMethod } from '../types'; interface CreateEngineArgs { @@ -19,6 +19,7 @@ export interface EngineMethods extends DefaultMethods { readonly getgasconsumed: DispatchMethod; readonly getvmstate: DispatchMethod; readonly getresultstack: DispatchMethod; + readonly getnotifications: DispatchMethod; // methods readonly execute: DispatchMethod; readonly loadclonedcontext: DispatchMethod; diff --git a/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts index 7a4a8ca6bc..4d7b703b2a 100644 --- a/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts @@ -1,5 +1,6 @@ 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 { @@ -16,6 +17,10 @@ interface TransactionsAddArgs extends SnapshotChoice { readonly state?: VMState; } +interface TransactionsDeleteArgs extends SnapshotChoice { + readonly hash: UInt256; +} + interface CommitArgs extends Partial { readonly partial?: SnapshotPartial; } @@ -32,10 +37,11 @@ interface SetPersistingBlockArgs extends SnapshotChoice { 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_get_change_set: DispatchMethod; + readonly snapshot_get_change_set: DispatchMethod; } diff --git a/packages/neo-one-node-vm/src/SnapshotHandler.ts b/packages/neo-one-node-vm/src/SnapshotHandler.ts index 9137468a98..62e5887ed1 100644 --- a/packages/neo-one-node-vm/src/SnapshotHandler.ts +++ b/packages/neo-one-node-vm/src/SnapshotHandler.ts @@ -1,5 +1,6 @@ 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'; @@ -51,6 +52,16 @@ export class SnapshotHandler { }); } + 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', @@ -96,12 +107,14 @@ export class SnapshotHandler { } public getChangeSet() { - return this.dispatch({ - method: 'snapshot_get_change_set', - args: { - snapshot: this.snapshot, - }, - }); + return parseChangeReturns( + this.dispatch({ + method: 'snapshot_get_change_set', + args: { + snapshot: this.snapshot, + }, + }), + ); } public clone() { diff --git a/packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts b/packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts deleted file mode 100644 index 9adba36b31..0000000000 --- a/packages/neo-one-node-vm/src/StackItems/StackItemReturn.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { StackItemType } from '@neo-one/node-core'; - -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; // TODO: it might just be one? - 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; diff --git a/packages/neo-one-node-vm/src/StackItems/index.ts b/packages/neo-one-node-vm/src/StackItems/index.ts deleted file mode 100644 index cded9da4df..0000000000 --- a/packages/neo-one-node-vm/src/StackItems/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './StackItemReturn'; -export * from './parse'; diff --git a/packages/neo-one-node-vm/src/StackItems/parse.ts b/packages/neo-one-node-vm/src/StackItems/parse.ts deleted file mode 100644 index aaefed024e..0000000000 --- a/packages/neo-one-node-vm/src/StackItems/parse.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { PrimitiveStackItem, StackItem } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { PrimitiveStackItemReturn, StackItemReturn } from './StackItemReturn'; - -export const parse = (stack: readonly StackItemReturn[]): readonly StackItem[] => stack.map(parseStackItem); - -const parseStackItem = (item: StackItemReturn): StackItem => { - const isNull = item.IsNull; - switch (item.Type) { - case 'Any': - return { - type: 'Any', - value: undefined, - isNull, - }; - - case 'Pointer': - return { - type: 'Pointer', - value: item.value, - position: item.Position, - isNull, - }; - - case 'Buffer': - return { - type: 'Buffer', - value: item.value, - size: item.Size, - isNull, - }; - - case 'Array': - return { - type: 'Array', - value: parse(item.value), - count: item.Count, - isNull, - }; - - case 'Struct': - return { - type: 'Struct', - value: parse(item.value), // TODO: how should StructStackItem look? - count: item.Count, - isNull, - }; - - case 'Map': - return { - type: 'Map', - value: item.value.reduce((acc, { key, value }) => { - acc.set(parsePrimitiveStackItem(key), parseStackItem(value)); - - return acc; - }, new Map()), - count: item.Count, - isNull, - }; - - case 'InteropInterface': - return { - type: 'InteropInterface', - value: item.value, - isNull, - }; - - default: - return parsePrimitiveStackItem(item); - } -}; - -const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStackItem => { - const isNull = item.IsNull; - switch (item.Type) { - case 'Boolean': - return { - type: 'Boolean', - value: item.value, - size: item.Size, - isNull, - }; - - case 'Integer': - return { - type: 'Integer', - value: new BN(item.value), - size: item.Size, - isNull, - }; - - case 'ByteString': - return { - type: 'ByteString', - value: item.value, - asString: () => item.value.toString('utf8'), - size: item.Size, - isNull, - }; - - default: - // TODO: create an error here - throw new Error('Invalid StackItem'); - } -}; diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 27cda8b626..8faaeefcb8 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -37,4 +37,8 @@ describe('Dispatcher Tests', () => { expect(postEngine.state).toEqual('BREAK'); expect(() => postEngine.execute()).toThrow(); }); + + test.only('test', () => { + console.log(dispatcher.test()); + }); }); 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..ce149289ea --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/changes.ts @@ -0,0 +1,90 @@ +// import { PutBatch, DeleteBatch } from '@neo-one/node-core'; + +type ChangeType = 'Added' | 'Changed' | 'Deleted'; +type ItemType = 'block' | 'transaction' | 'contract' | '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, + Contract = 0x50, + 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 'contract': + return addPrefix(Prefix.Contract, 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. + */ +interface PutBatch { + readonly type: 'put'; + readonly key: Buffer; + readonly value: Buffer; +} + +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..944619d6d0 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/index.ts @@ -0,0 +1,3 @@ +export * from './changes'; +export * from './stackItems'; +export * from './notifications'; diff --git a/packages/neo-one-node-vm/src/converters/notifications.ts b/packages/neo-one-node-vm/src/converters/notifications.ts new file mode 100644 index 0000000000..35f486812f --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/notifications.ts @@ -0,0 +1,20 @@ +import { common } from '@neo-one/client-common'; +import { Notification } from '@neo-one/node-core'; +import { parseStackItems, StackItemReturn } from './stackItems'; + +export interface NotificationReturn { + readonly scriptContainer: Buffer; + readonly scriptHash: Buffer; + readonly eventName: string; + readonly state: readonly StackItemReturn[]; +} + +const parseNotification = (notification: NotificationReturn): Notification => ({ + scriptContainer: notification.scriptContainer, + scriptHash: common.asUInt160(notification.scriptHash), + eventName: notification.eventName, + state: parseStackItems(notification.state), +}); + +export const parseNotifications = (notifications: readonly NotificationReturn[]): readonly Notification[] => + notifications.map(parseNotification); 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..b13c0305a8 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/stackItems.ts @@ -0,0 +1,179 @@ +import { PrimitiveStackItem, StackItem, StackItemType } 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; // TODO: it might just be one? + 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); + +const parseStackItem = (item: StackItemReturn): StackItem => { + const isNull = item.IsNull; + switch (item.Type) { + case 'Any': + return { + type: 'Any', + value: undefined, + isNull, + }; + + case 'Pointer': + return { + type: 'Pointer', + value: item.value, + position: item.Position, + isNull, + }; + + case 'Buffer': + return { + type: 'Buffer', + value: item.value, + size: item.Size, + isNull, + }; + + case 'Array': + return { + type: 'Array', + value: parseStackItems(item.value), + count: item.Count, + isNull, + }; + + case 'Struct': + return { + type: 'Struct', + value: parseStackItems(item.value), // TODO: how should StructStackItem look? + count: item.Count, + isNull, + }; + + case 'Map': + return { + type: 'Map', + value: item.value.reduce((acc, { key, value }) => { + acc.set(parsePrimitiveStackItem(key), parseStackItem(value)); + + return acc; + }, new Map()), + count: item.Count, + isNull, + }; + + case 'InteropInterface': + return { + type: 'InteropInterface', + value: item.value, + isNull, + }; + + default: + return parsePrimitiveStackItem(item); + } +}; + +const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStackItem => { + const isNull = item.IsNull; + switch (item.Type) { + case 'Boolean': + return { + type: 'Boolean', + value: item.value, + size: item.Size, + isNull, + }; + + case 'Integer': + return { + type: 'Integer', + value: new BN(item.value), + size: item.Size, + isNull, + }; + + case 'ByteString': + return { + type: 'ByteString', + value: item.value, + asString: () => item.value.toString('utf8'), + size: item.Size, + isNull, + }; + + default: + // TODO: create an error here + throw new Error('Invalid StackItem'); + } +}; diff --git a/packages/neo-one-node-vm/src/types.ts b/packages/neo-one-node-vm/src/types.ts index 8dd1fdfd58..4a08996439 100644 --- a/packages/neo-one-node-vm/src/types.ts +++ b/packages/neo-one-node-vm/src/types.ts @@ -3,9 +3,6 @@ // TODO: not implemented export type ExecutionContext = any; -// TODO: not implemented -export type Notifications = any; - export interface DispatchMethodNoArgs { readonly returnType: Return; } From 8677e752465f78c10f0975b807bf43dc5b293e22 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 2 Oct 2020 10:43:44 -0700 Subject: [PATCH 100/141] fix(tests): revert jest setup change (#2173) --- packages/neo-one-build-tests/jest/unit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neo-one-build-tests/jest/unit.js b/packages/neo-one-build-tests/jest/unit.js index cae20e4e24..973ad39a48 100644 --- a/packages/neo-one-build-tests/jest/unit.js +++ b/packages/neo-one-build-tests/jest/unit.js @@ -12,6 +12,6 @@ module.exports = { '/packages/neo-one-smart-contract/src/index.d.ts', '^@neo-one/(.*)$': '/packages/neo-one-$1/src/index', }, - testRegex: '^neo-one-client-core/__tests__/.*\\.test\\.tsx?$', + testRegex: '^.*/__tests__/.*\\.test\\.tsx?$', coverageReporters: ['json'], }; From 1bfab9c7ef132de5bce2633286e7e6a7ee4d5d1b Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 5 Oct 2020 12:30:05 -0700 Subject: [PATCH 101/141] feat(node): Add NativeContract models, more storage implementations (#2170) --- .../rush/browser-approved-packages.json | 4 + .../neo-one-node-blockchain/src/Blockchain.ts | 25 ++- .../src/PersistingBlockchain.ts | 4 +- .../neo-one-node-blockchain/src/errors.ts | 16 ++ packages/neo-one-node-blockchain/src/index.ts | 1 + packages/neo-one-node-blockchain/src/utils.ts | 31 +--- .../neo-one-node-blockchain/src/verify.ts | 16 +- .../neo-one-node-core/src/ConsensusContext.ts | 3 + packages/neo-one-node-core/src/Native.ts | 59 ++++++ packages/neo-one-node-core/src/Settings.ts | 11 +- .../src/StackItems/ArrayStackItem.ts | 28 +++ .../src/StackItems/BooleanStackItem.ts | 36 ++++ .../src/StackItems/BufferStackItem.ts | 24 +++ .../src/StackItems/ByteStringStackItem.ts | 43 +++++ .../src/StackItems/IntegerStackItem.ts | 44 +++++ .../src/StackItems/InteropInterface.ts | 33 ++++ .../src/StackItems/MapStackItem.ts | 38 ++++ .../src/StackItems/NullStackItem.ts | 37 ++++ .../src/StackItems/PointerStackItem.ts | 41 +++++ .../src/StackItems/PrimitiveStackItemBase.ts | 35 ++++ .../src/StackItems/StackItem.ts | 79 -------- .../src/StackItems/StackItemBase.ts | 38 ++++ .../src/StackItems/StackItemType.ts | 13 ++ .../src/StackItems/StackItems.ts | 123 +++++++++++++ .../src/StackItems/StructStackItem.ts | 20 ++ .../neo-one-node-core/src/StackItems/index.ts | 14 +- packages/neo-one-node-core/src/Storage.ts | 16 +- packages/neo-one-node-core/src/StorageKey.ts | 7 +- packages/neo-one-node-core/src/errors.ts | 28 +++ packages/neo-one-node-core/src/index.ts | 1 + .../src/payload/ChangeViewPayloadCompact.ts | 55 ++++++ .../src/payload/CommitPayloadCompact.ts | 54 ++++++ .../src/payload/ConsensusPayload.ts | 96 ++++++++++ .../src/payload/PreparationPayloadCompact.ts | 42 +++++ .../src/payload/UnsignedConsensusPayload.ts | 104 +++++++++++ .../message/ChangeViewConsensusMessage.ts | 47 +++++ .../src/payload/message/ChangeViewReason.ts | 21 +++ .../payload/message/CommitConsensusMessage.ts | 37 ++++ .../src/payload/message/ConsensusMessage.ts | 57 ++++++ .../payload/message/ConsensusMessageBase.ts | 56 ++++++ .../payload/message/ConsensusMessageType.ts | 21 +++ .../message/PrepareRequestConsensusMessage.ts | 51 ++++++ .../PrepareResponseConsensusMessage.ts | 38 ++++ .../message/RecoveryConsensusMessage.ts | 159 ++++++++++++++++ .../RecoveryRequestConsensusMessage.ts | 38 ++++ .../src/utils/BinaryReader.ts | 3 +- packages/neo-one-node-native/.npmignore | 22 +++ packages/neo-one-node-native/gulpfile.js | 5 + packages/neo-one-node-native/package.json | 30 +++ .../neo-one-node-native/src/AccountStates.ts | 87 +++++++++ packages/neo-one-node-native/src/GASToken.ts | 13 ++ .../neo-one-node-native/src/KeyBuilder.ts | 54 ++++++ packages/neo-one-node-native/src/NEOToken.ts | 150 +++++++++++++++ .../src/NativeContainer.ts | 16 ++ .../neo-one-node-native/src/NativeContract.ts | 30 +++ packages/neo-one-node-native/src/Nep5.ts | 41 +++++ packages/neo-one-node-native/src/Policy.ts | 69 +++++++ packages/neo-one-node-native/src/index.ts | 8 + packages/neo-one-node-native/src/utils.ts | 172 ++++++++++++++++++ packages/neo-one-node-native/tsconfig.json | 3 + .../neo-one-node-neo-settings/src/common.ts | 2 +- .../src/levelUpStorage.ts | 8 +- .../neo-one-node-storage-levelup/src/read.ts | 53 +++++- .../src/streamToObservable.ts | 6 +- .../neo-one-node-storage-levelup/src/types.ts | 4 - packages/neo-one-node-vm/lib/Dispatcher.cs | 16 +- packages/neo-one-node-vm/src/Dispatcher.ts | 1 + .../src/__tests__/Dispatcher.test.ts | 4 +- .../src/__tests__/storage.test.ts | 20 +- .../src/__tests__/syscalls.test.ts | 19 +- .../src/converters/stackItems.ts | 120 +++++------- packages/neo-one-node/package.json | 1 + packages/neo-one-node/src/startFullNode.ts | 9 +- rush.json | 7 + 74 files changed, 2457 insertions(+), 260 deletions(-) create mode 100644 packages/neo-one-node-blockchain/src/index.ts create mode 100644 packages/neo-one-node-core/src/ConsensusContext.ts create mode 100644 packages/neo-one-node-core/src/Native.ts create mode 100644 packages/neo-one-node-core/src/StackItems/ArrayStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/BooleanStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/BufferStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/InteropInterface.ts create mode 100644 packages/neo-one-node-core/src/StackItems/MapStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/NullStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/PointerStackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts delete mode 100644 packages/neo-one-node-core/src/StackItems/StackItem.ts create mode 100644 packages/neo-one-node-core/src/StackItems/StackItemBase.ts create mode 100644 packages/neo-one-node-core/src/StackItems/StackItems.ts create mode 100644 packages/neo-one-node-core/src/StackItems/StructStackItem.ts create mode 100644 packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts create mode 100644 packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts create mode 100644 packages/neo-one-node-core/src/payload/ConsensusPayload.ts create mode 100644 packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts create mode 100644 packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts create mode 100644 packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/ChangeViewReason.ts create mode 100644 packages/neo-one-node-core/src/payload/message/CommitConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts create mode 100644 packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts create mode 100644 packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts create mode 100644 packages/neo-one-node-core/src/payload/message/RecoveryRequestConsensusMessage.ts create mode 100644 packages/neo-one-node-native/.npmignore create mode 100644 packages/neo-one-node-native/gulpfile.js create mode 100644 packages/neo-one-node-native/package.json create mode 100644 packages/neo-one-node-native/src/AccountStates.ts create mode 100644 packages/neo-one-node-native/src/GASToken.ts create mode 100644 packages/neo-one-node-native/src/KeyBuilder.ts create mode 100644 packages/neo-one-node-native/src/NEOToken.ts create mode 100644 packages/neo-one-node-native/src/NativeContainer.ts create mode 100644 packages/neo-one-node-native/src/NativeContract.ts create mode 100644 packages/neo-one-node-native/src/Nep5.ts create mode 100644 packages/neo-one-node-native/src/Policy.ts create mode 100644 packages/neo-one-node-native/src/index.ts create mode 100644 packages/neo-one-node-native/src/utils.ts create mode 100644 packages/neo-one-node-native/tsconfig.json delete mode 100644 packages/neo-one-node-storage-levelup/src/types.ts diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 310a7cde8f..156ea3c116 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -286,6 +286,10 @@ "name": "@neo-one/node-http-rpc", "allowedCategories": [ "production" ] }, + { + "name": "@neo-one/node-native", + "allowedCategories": [ "production" ] + }, { "name": "@neo-one/node-neo-settings", "allowedCategories": [ "production", "web" ] diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index fb94edd3e9..4461e59af8 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -6,16 +6,16 @@ import { CallReceipt, DeserializeWireContext, Header, + NativeContainer, Storage, - Transaction, - TransactionState, TriggerType, VM, } from '@neo-one/node-core'; +import { Labels } from '@neo-one/utils'; import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; import { flatMap, map, toArray } from 'rxjs/operators'; -import { GenesisBlockNotRegisteredError } from './errors'; +import { BlockVerifyError, GenesisBlockNotRegisteredError } from './errors'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; @@ -28,6 +28,7 @@ export interface CreateBlockchainOptions { readonly onPersistNativeContractScript?: Buffer; readonly settings: BlockchainSettings; readonly storage: Storage; + readonly native: NativeContainer; readonly vm: VM; } @@ -61,9 +62,8 @@ export const recoverHeaderIndex = async (storage: Storage) => { let extraHashes: readonly UInt256[] = []; if (hashIndex.index >= storedHeaderCount) { let hash = hashIndex.hash; - // tslint:disable-next-line + // tslint:disable-next-line: no-loop-statement possible-timing-attack while (hash !== initHeaderIndex[storedHeaderCount - 1]) { - // tslint:disable-next-line: no-array-mutation extraHashes = [hash].concat(extraHashes); const { previousHash } = await storage.blocks.get({ hashOrIndex: hash }); hash = previousHash; @@ -82,12 +82,13 @@ export const recoverHeaderIndex = async (storage: Storage) => { }; export class Blockchain { - public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { + public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { const headerIndex = await recoverHeaderIndex(storage); const blockchain = new Blockchain({ headerIndex, settings, storage, + native, vm, }); @@ -112,6 +113,7 @@ export class Blockchain { private readonly headerIndex: UInt256[]; private readonly onPersistNativeContractScript: Buffer; private readonly storage: Storage; + private readonly native: NativeContainer; private readonly vm: VM; private mutableStoredHeaderCount: number; @@ -132,6 +134,7 @@ export class Blockchain { this.mutableStoredHeaderCount = this.headerIndex.length; this.settings = options.settings; this.storage = options.storage; + this.native = options.native; this.vm = options.vm; this.onPersistNativeContractScript = options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); @@ -239,8 +242,7 @@ export class Blockchain { public async verifyBlock(block: Block): Promise { const verification = await block.verify(this.vm, this.storage, this.verifyWitnesses); if (!verification) { - // TODO: implement a makeError - throw new Error('Block Verification Failed'); + throw new BlockVerifyError(block.hashHex); } } @@ -311,7 +313,7 @@ export class Blockchain { while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { const entryNonNull = entry; const logData = { - // [Labels.NEO_BLOCK_INDEX]: entry.block.index, // TODO: bring Label over + [Labels.NEO_BLOCK_INDEX]: entry.block.index, name: 'neo_blockchain_persist_block_top_level', }; try { @@ -401,11 +403,6 @@ export class Blockchain { this.headerIndex.push(block.hash); } - /** - * TODO: this changeSet is NOT the `ChangeSet` type we expect for a `.commit(...)` like in `saveHeaderHashList` - * it is the already serialized changeSet coming from the C# VM Snapshot. There won't need to be as much storage - * change conversion with this changeSet so will probably make 2 different `commit` methods, 1 for each. - */ const { changeBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); await this.storage.commitBatch(changeBatch); await this.saveHeaderHashList(); diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index fa0d92d96c..75f242bcb1 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -26,6 +26,7 @@ import { TriggerType, VM, } from '@neo-one/node-core'; +import { PersistNativeContractsError } from './errors'; import { ReadAddStorageCache } from './StorageCache'; import { utils, utils as blockchainUtils } from './utils'; @@ -90,8 +91,7 @@ export class PersistingBlockchain { engine.loadScript(this.onPersistNativeContractScript); const result = engine.execute(); if (result !== 'HALT') { - // TODO: Implement a real error; - throw new Error('Failed to persist native contract changes'); + throw new PersistNativeContractsError(); } return blockchainUtils.getApplicationExecuted(engine); diff --git a/packages/neo-one-node-blockchain/src/errors.ts b/packages/neo-one-node-blockchain/src/errors.ts index 16f8529ae4..97bafd123d 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -16,3 +16,19 @@ export const CoinClaimedError = makeErrorWithCode( 'COIN_CLAIMED', (asset: string, value: string) => `Coin with asset: ${asset}, value: ${value} is already claimed.`, ); +export const BlockVerifyError = makeErrorWithCode( + 'BLOCK_VERIFICATION_FAILED', + (hash: string) => `Block with hash: ${hash} failed to verify.`, +); +export const PersistNativeContractsError = makeErrorWithCode( + 'PERSIST_NATIVE_CONTRACTS_FAILED', + () => 'Engine state !== HALT when persisting native contract 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}.`, +); diff --git a/packages/neo-one-node-blockchain/src/index.ts b/packages/neo-one-node-blockchain/src/index.ts new file mode 100644 index 0000000000..1d0dd9bd23 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/index.ts @@ -0,0 +1 @@ +export * from './Blockchain'; diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index 4d09841b9a..aa154d0515 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -1,30 +1,11 @@ -import { common, ScriptBuilder, UInt160 } from '@neo-one/client-common'; -import { ApplicationEngine, Transaction, utils as coreUtils } from '@neo-one/node-core'; +import { ScriptBuilder } from '@neo-one/client-common'; +import { ApplicationEngine, NativeHashes, Transaction, utils as coreUtils } from '@neo-one/node-core'; -interface BaseNativeContract { - readonly hash: UInt160; -} - -// TODO: Implement -class NativeContract implements BaseNativeContract { - public static readonly GAS: BaseNativeContract = { - hash: common.stringToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), - }; - public static readonly NEO: BaseNativeContract = { - hash: common.stringToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), - }; - public readonly hash: UInt160; - - public constructor(hash: UInt160) { - this.hash = hash; - } -} - -export const getOnPersistNativeContractScript = coreUtils.lazy(() => { - const contracts = [NativeContract.GAS, NativeContract.NEO]; +const getOnPersistNativeContractScript = coreUtils.lazy(() => { + const hashes = [NativeHashes.GAS, NativeHashes.NEO]; const script = new ScriptBuilder(); - contracts.forEach((contract) => { - script.emitAppCall(contract.hash, 'onPersist'); + hashes.forEach((hash) => { + script.emitAppCall(hash, 'onPersist'); script.emitOp('DROP'); }); diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index bf77e4ffc0..d729e41ec7 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -1,7 +1,6 @@ -import { UInt160 } from '@neo-one/client-common'; +import { common, UInt160 } from '@neo-one/client-common'; import { BlockchainStorage, - BooleanStackItem, CallFlags, ContractMethodDescriptor, SerializableWire, @@ -10,6 +9,7 @@ import { VerifyResult, VM, } from '@neo-one/node-core'; +import { ContractMethodError, ContractStateFetchError, WitnessVerifyError } from './errors'; const maxVerificationGas = 0.5; @@ -28,13 +28,11 @@ const getApplicationEngineVerifyOptions = async ( if (verification.length === 0) { const contractState = await storage.contracts.tryGet(hash); if (contractState === undefined) { - // TODO: implement an error - throw new Error('Failed to fetch contract from storage'); + throw new ContractStateFetchError(common.uInt160ToHex(hash)); } const methodDescriptor = contractState.manifest.abi.getMethod('verify'); if (methodDescriptor === undefined) { - // TODO: implement an error - throw new Error('Failed to get contract verify method'); + throw new ContractMethodError('verify', common.uInt160ToHex(hash)); } return { @@ -44,9 +42,9 @@ const getApplicationEngineVerifyOptions = async ( }; } - // TODO: look into this `possible-timing-attack` warning + // tslint:disable-next-line: possible-timing-attack TODO: look into this `possible-timing-attack` warning if (hash !== scriptHash) { - throw new Error('Witness hash does not match verification hash'); + throw new WitnessVerifyError(); } return { @@ -80,7 +78,7 @@ export const verifyWithApplicationEngine = ( } const stack = engine.resultStack; - if (stack.length !== 1 || !(stack[0] as BooleanStackItem).value) { + if (stack.length !== 1 || !stack[0].getBoolean()) { return { result: false, gas }; } diff --git a/packages/neo-one-node-core/src/ConsensusContext.ts b/packages/neo-one-node-core/src/ConsensusContext.ts new file mode 100644 index 0000000000..77d45f276e --- /dev/null +++ b/packages/neo-one-node-core/src/ConsensusContext.ts @@ -0,0 +1,3 @@ +export const CONSENSUS_STATE_PREFIX = 0xf4; + +export class ConsensusContext {} 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..06557d2355 --- /dev/null +++ b/packages/neo-one-node-core/src/Native.ts @@ -0,0 +1,59 @@ +import { common, ECPoint, UInt160 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { ReadFindStorage } from './Storage'; +import { StorageItem } from './StorageItem'; +import { StorageKey } from './StorageKey'; + +export interface NativeContractStorageContext { + readonly storages: ReadFindStorage; +} + +export interface NativeContract { + readonly id: number; + readonly name: string; +} + +export interface NEP5NativeContract extends NativeContract { + readonly symbol: string; + readonly decimals: number; +} + +export interface GASContract extends NEP5NativeContract {} + +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 getBlockedAccounts: (storage: NativeContractStorageContext) => Promise; +} + +export interface Candidate { + readonly publicKey: ECPoint; + readonly votes: BN; +} + +export interface NEOContract extends NEP5NativeContract { + readonly totalAmount: BN; + readonly effectiveVoterTurnout: number; + + readonly totalSupply: () => Promise; + readonly getCandidates: (storage: NativeContractStorageContext) => Promise; + readonly getValidators: (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 NativeContainer { + readonly GAS: GASContract; + readonly NEO: NEOContract; + readonly Policy: PolicyContract; +} + +export const NativeHashes = { + GAS: common.hexToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), + NEO: common.hexToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), + Policy: common.hexToUInt160('e9ff4ca7cc252e1dfddb26315869cd79505906ce'), +}; diff --git a/packages/neo-one-node-core/src/Settings.ts b/packages/neo-one-node-core/src/Settings.ts index eea57b3f86..d2ee38dde2 100644 --- a/packages/neo-one-node-core/src/Settings.ts +++ b/packages/neo-one-node-core/src/Settings.ts @@ -1,6 +1,8 @@ import { ECPoint } from '@neo-one/client-common'; import { Block } from './Block'; -import { BlockchainStorage } from './Storage'; + +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 BlockchainSettings extends ProtocolSettings { readonly genesisBlock: Block; @@ -19,13 +21,6 @@ export interface ProtocolSettings { readonly memoryPoolMaxTransactions: number; } -export interface PolicySettings { - readonly getMaxBlockSize: (storages: BlockchainStorage['storages']) => Promise; - readonly getMaxTransactionsPerBlock: (storages: BlockchainStorage['storages']) => Promise; - readonly getMaxBlockSystemFee: (storages: BlockchainStorage['storages']) => Promise; - readonly getValidators: (storages: BlockchainStorage['storages']) => Promise; -} - export interface NetworkSettings { readonly seeds: readonly string[]; } 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..759ddd824b --- /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()); + } +} 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..3ff9c82bcd --- /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(), + 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..322e89558b --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts @@ -0,0 +1,35 @@ +import { BN } from 'bn.js'; +import { InvalidStackItemCastError } from 'src/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/StackItem.ts b/packages/neo-one-node-core/src/StackItems/StackItem.ts deleted file mode 100644 index 274c6ee6b5..0000000000 --- a/packages/neo-one-node-core/src/StackItems/StackItem.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { BN } from 'bn.js'; -import { StackItemType } from './StackItemType'; - -export interface StackItemBase { - readonly type: keyof typeof StackItemType; - readonly isNull: boolean; -} - -export interface AnyStackItem extends StackItemBase { - readonly type: 'Any'; - readonly value: undefined; -} - -export interface PointerStackItem extends StackItemBase { - readonly type: 'Pointer'; - readonly value: Buffer; - readonly position: number; -} - -export interface BooleanStackItem extends StackItemBase { - readonly type: 'Boolean'; - readonly value: boolean; - readonly size: number; -} - -export interface IntegerStackItem extends StackItemBase { - readonly type: 'Integer'; - readonly value: BN; - readonly size: number; -} - -export interface ByteStringStackItem extends StackItemBase { - readonly type: 'ByteString'; - readonly value: Buffer; - readonly size: number; - readonly asString: () => string; -} - -export interface BufferStackItem extends StackItemBase { - readonly type: 'Buffer'; - readonly value: Buffer; - readonly size: number; -} - -export interface ArrayStackItem extends StackItemBase { - readonly type: 'Array'; - readonly value: readonly StackItem[]; - readonly count: number; -} - -export interface StructStackItem extends StackItemBase { - readonly type: 'Struct'; - readonly value: readonly StackItem[]; - readonly count: number; -} - -export interface MapStackItem extends StackItemBase { - readonly type: 'Map'; - readonly value: Map; - readonly count: number; -} - -// tslint:disable-next-line: no-any TODO: need to investigate how this is typed -export interface InteropInterface extends StackItemBase { - readonly type: 'InteropInterface'; - readonly value: T; -} - -export type PrimitiveStackItem = BooleanStackItem | IntegerStackItem | ByteStringStackItem; - -export type StackItem = - | AnyStackItem - | PointerStackItem - | PrimitiveStackItem - | BufferStackItem - | ArrayStackItem - | StructStackItem - | MapStackItem - | InteropInterface; 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 index 73fa88bc23..766b569e9c 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItemType.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItemType.ts @@ -1,3 +1,5 @@ +import { InvalidFormatError } from '@neo-one/client-common'; + export enum StackItemType { Any = 0x00, Pointer = 0x10, @@ -10,3 +12,14 @@ export enum StackItemType { 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..60d38e30a8 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -0,0 +1,123 @@ +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]); +}; + +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 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 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(); +}; 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 index 035c6b2dbf..71c6ed6755 100644 --- a/packages/neo-one-node-core/src/StackItems/index.ts +++ b/packages/neo-one-node-core/src/StackItems/index.ts @@ -1,2 +1,14 @@ -export * from './StackItem'; 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 378d9fbfa6..1db09b642f 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -11,6 +11,16 @@ 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; @@ -25,6 +35,10 @@ export interface ReadAllStorage extends ReadStorage { readonly all$: Observable; } +export interface ReadFindStorage extends ReadStorage { + readonly find$: (range: StreamOptions) => Observable>; +} + export interface ReadGetAllStorage extends ReadStorage { readonly getAll$: (key?: Partial) => Observable; } @@ -112,7 +126,7 @@ export interface BlockchainStorage { readonly blocks: ReadStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; - readonly storages: ReadStorage; + readonly storages: ReadFindStorage; readonly headerHashList: ReadStorage; readonly blockHashIndex: ReadMetadataStorage; readonly headerHashIndex: ReadMetadataStorage; diff --git a/packages/neo-one-node-core/src/StorageKey.ts b/packages/neo-one-node-core/src/StorageKey.ts index 56d2de7b72..4609501b1a 100644 --- a/packages/neo-one-node-core/src/StorageKey.ts +++ b/packages/neo-one-node-core/src/StorageKey.ts @@ -27,9 +27,12 @@ export class StorageKey implements Equatable, SerializableWire { }); } - // TODO: Verify this public static createSearchPrefix(id: number, prefix: Buffer) { - return Buffer.concat([Buffer.from([id]), prefix]); + const writer = new BinaryWriter(); + writer.writeInt32LE(id); + const buffer = writer.toBuffer(); + + return Buffer.concat([buffer, prefix]); } public readonly id: number; diff --git a/packages/neo-one-node-core/src/errors.ts b/packages/neo-one-node-core/src/errors.ts index 6facad3624..11223ed9ec 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,27 @@ 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) => `Invalid StackItemType, expected: ${type}`, +); +export const InvalidPrimitiveStackItemError = makeErrorWithCode( + 'INVALID_PRIMITIVE_STACK_ITEM_ERROR', + () => 'Invalid PrimitiveStackItem found; expected one of [Boolean, ByteString, Integer].', +); diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index b3910731d1..a1561fdb9d 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -11,6 +11,7 @@ export * from './Equatable'; export * from './HashIndexState'; export * from './Header'; export * from './HeaderHashList'; +export * from './Native'; export * from './Serializable'; export * from './Settings'; export * from './Signer'; 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..4e2bb07232 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts @@ -0,0 +1,55 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; + +export interface ChangeViewPayloadCompactAdd { + readonly validatorIndex: number; + readonly originalViewNumber: number; + readonly timestamp: BN; + readonly invocationScript: Buffer; +} + +export class ChangeViewPayloadCompact implements SerializableWire { + 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); + + 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..6d1f56b0fb --- /dev/null +++ b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts @@ -0,0 +1,54 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; + +export interface CommitPayloadCompactAdd { + readonly viewNumber: number; + readonly validatorIndex: number; + readonly signature: Buffer; + readonly invocationScript: Buffer; +} + +export class CommitPayloadCompact implements SerializableWire { + 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); + + 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 new file mode 100644 index 0000000000..764d09f6ee --- /dev/null +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -0,0 +1,96 @@ +import { BinaryWriter, createSerializeWire, crypto, InvalidFormatError } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; +import { BlockchainStorage } from '../Storage'; +import { BinaryReader, utils } from '../utils'; +import { Verifiable, VerifyWitnesses } from '../Verifiable'; +import { VM } from '../vm'; +import { Witness } from '../Witness'; +import { UnsignedConsensusPayload, UnsignedConsensusPayloadAdd } from './UnsignedConsensusPayload'; + +interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { + readonly witness: Witness; +} + +export class ConsensusPayload extends UnsignedConsensusPayload implements SerializableWire, Verifiable { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusPayload { + const { reader } = options; + const { + version, + previousHash, + blockIndex, + validatorIndex, + data, + } = super.deserializeUnsignedConsensusPayloadWireBase(options); + const count = reader.readInt8(); + if (count !== 1) { + throw new InvalidFormatError(`expected exactly 1 witness`); + } + + const witness = Witness.deserializeWireBase(options); + + return new ConsensusPayload({ + version, + previousHash, + blockIndex, + validatorIndex, + data, + witness, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): ConsensusPayload { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly witness: Witness; + public readonly serializeUnsigned = createSerializeWire(this.serializeWireBaseUnsigned); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly getScriptHashesForVerifying = utils.lazyAsync(async (storage: BlockchainStorage) => { + const validators = NativeNEO.getNextBlockValidators(storage); + if (validators.length <= this.validatorIndex) { + // TODO: implement a real error + throw new Error(`${validators.length} <= ${this.validatorIndex}`); + } + + return [crypto.toScriptHash(crypto.createSignatureRedeemScript(validators[this.validatorIndex]))]; + }); + + private readonly consensusMessageInternal = utils.lazy(() => ConsensusMessage.deserializeFrom(this.data)); + + public constructor(options: ConsensusPayloadAdd) { + super(options); + this.witness = options.witness; + } + + public get witnesses() { + return [this.witness]; + } + + public get consensusMessage() { + return this.consensusMessageInternal(); + } + + public serializeWireBase(writer: BinaryWriter) { + this.serializeWireBaseUnsigned(writer); + writer.writeUInt8(1); + this.witness.serializeWireBase(writer); + } + + public serializeWireBaseUnsigned(writer: BinaryWriter) { + super.serializeWireBase(writer); + } + + public async verify(vm: VM, storage: BlockchainStorage, verifyWitnesses: VerifyWitnesses) { + const blockHashIndex = await storage.blockHashIndex.get(); + const height = blockHashIndex.index; + + if (this.blockIndex <= height) { + return false; + } + + return verifyWitnesses(vm, this, storage, 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..36026cdb67 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts @@ -0,0 +1,42 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; + +export interface PreparationPayloadCompactAdd { + readonly validatorIndex: number; + readonly invocationScript: Buffer; +} + +export class PreparationPayloadCompact implements SerializableWire { + 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 new file mode 100644 index 0000000000..0cadfa1692 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts @@ -0,0 +1,104 @@ +import { BinaryWriter, createSerializeWire, 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 data?: Buffer; + readonly getConsensusMessage?: () => ConsensusMessage; + readonly consensusMessage?: ConsensusMessage; +} + +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 data = reader.readVarBytesLE(); + + const getConsensusMessage = utils.lazy(() => + deserializeConsensusMessageWire({ context: options.context, buffer: data }, validatorCount), + ); + + return { + version, + previousHash, + blockIndex, + validatorIndex, + data, + getConsensusMessage, + }; + } + + public static deserializeWireBase(options: DeserializeWireBaseOptions): UnsignedConsensusPayload { + return new this(this.deserializeUnsignedConsensusPayloadWireBase(options)); + } + + public static deserializeWire(options: DeserializeWireOptions): UnsignedConsensusPayload { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly version: number; + public readonly previousHash: UInt256; + public readonly blockIndex: number; + public readonly validatorIndex: number; + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly consensusMessageInternal: (() => ConsensusMessage) | undefined; + private readonly dataInternal?: Buffer; + + public constructor({ + version, + previousHash, + blockIndex, + validatorIndex, + data, + getConsensusMessage, + consensusMessage, + }: UnsignedConsensusPayloadAdd) { + this.version = version; + this.previousHash = previousHash; + this.blockIndex = blockIndex; + this.validatorIndex = validatorIndex; + this.dataInternal = data; + + this.consensusMessageInternal = consensusMessage ? () => consensusMessage : getConsensusMessage; + } + + 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 serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.version); + writer.writeUInt256(this.previousHash); + writer.writeUInt32LE(this.blockIndex); + writer.writeUInt16LE(this.validatorIndex); + writer.writeVarBytesLE(this.data); + } +} diff --git a/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts new file mode 100644 index 0000000000..1f309fee96 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts @@ -0,0 +1,47 @@ +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 timestamp: BN; + readonly reason: ChangeViewReason; +} + +export class ChangeViewConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ChangeViewConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const timestamp = reader.readUInt64LE(); + const reason = assertChangeViewReason(reader.readUInt8()); + + return new ChangeViewConsensusMessage({ + viewNumber, + timestamp, + reason, + }); + } + + public readonly newViewNumber: number; + public readonly timestamp: BN; + public readonly reason: ChangeViewReason; + + public constructor({ viewNumber, timestamp, reason }: ChangeViewAdd) { + const options = { + type: ConsensusMessageType.ChangeView, + viewNumber, + }; + super(options); + this.timestamp = timestamp; + this.reason = reason; + this.newViewNumber = viewNumber + 1; + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + 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 new file mode 100644 index 0000000000..0eabc90203 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts @@ -0,0 +1,57 @@ +import { utils } from '@neo-one/utils'; +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 + | RecoveryConsensusMessage + | RecoveryRequestConsensusMessage; + +export const deserializeConsensusMessageWireBase = ( + { reader, context }: DeserializeWireBaseOptions, + validatorsCount = 7, +): ConsensusMessage => { + const options = { + context, + reader, + validatorsCount, + }; + + 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 = ({ 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 new file mode 100644 index 0000000000..a5409c4cc9 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts @@ -0,0 +1,56 @@ +import { BinaryWriter } from '@neo-one/client-common'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, + SerializeWire, +} from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { ConsensusMessageType } from './ConsensusMessageType'; + +export interface ConsensusMessageBaseAdd { + readonly viewNumber: number; +} + +export interface ConsensusMessageBaseAddWithType extends ConsensusMessageBaseAdd { + readonly type: ConsensusMessageType; +} + +export class ConsensusMessageBase implements SerializableWire { + public static readonly VERSION = 0; + public static readonly deserializeConsensusMessageBaseWireBase = ({ reader }: DeserializeWireBaseOptions) => { + const type = reader.readUInt8(); + const viewNumber = reader.readUInt8(); + + return { + type, + viewNumber, + }; + }; + + public static deserializeWireBase(_options: DeserializeWireBaseOptions): ConsensusMessageBase { + throw new Error('Not Implemented'); + } + + public static deserializeWire(options: DeserializeWireOptions): ConsensusMessageBase { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly type: ConsensusMessageType; + public readonly viewNumber: number; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ type, viewNumber }: ConsensusMessageBaseAddWithType) { + this.type = type; + this.viewNumber = viewNumber; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt8(this.type); + writer.writeUInt8(this.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 new file mode 100644 index 0000000000..2923e34c8f --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts @@ -0,0 +1,21 @@ +import { InvalidConsensusMessageTypeError } from '../../errors'; + +export enum ConsensusMessageType { + ChangeView = 0x00, + PrepareRequest = 0x20, + PrepareResponse = 0x21, + Commit = 0x30, + RecoveryRequest = 0x40, + RecoveryMessage = 0x41, +} + +const isConsensusMessageType = (value: number): value is ConsensusMessageType => + // tslint:disable-next-line strict-type-predicates + ConsensusMessageType[value] !== undefined; + +export const assertConsensusMessageType = (value: number): ConsensusMessageType => { + if (isConsensusMessageType(value)) { + return value; + } + throw new InvalidConsensusMessageTypeError(value); +}; diff --git a/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts new file mode 100644 index 0000000000..7070d860d0 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts @@ -0,0 +1,51 @@ +import { BinaryWriter, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Block } from '../../Block'; +import { DeserializeWireBaseOptions } from '../../Serializable'; +import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; +import { ConsensusMessageType } from './ConsensusMessageType'; + +export interface PrepareRequestConsensusMessageAdd extends ConsensusMessageBaseAdd { + readonly timestamp: BN; + readonly nonce: BN; + readonly transactionHashes: readonly UInt256[]; +} + +export class PrepareRequestConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareRequestConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const timestamp = reader.readUInt64LE(); + const nonce = reader.readUInt64LE(); + const transactionHashes = reader.readArray(reader.readUInt256.bind(reader), Block.MaxTransactionsPerBlock); + + return new PrepareRequestConsensusMessage({ + viewNumber, + timestamp, + nonce, + transactionHashes, + }); + } + + public readonly timestamp: BN; + public readonly nonce: BN; + public readonly transactionHashes: readonly UInt256[]; + + public constructor({ viewNumber, timestamp, nonce, transactionHashes }: PrepareRequestConsensusMessageAdd) { + const options = { + type: ConsensusMessageType.PrepareRequest, + viewNumber, + }; + super(options); + this.timestamp = timestamp; + this.nonce = nonce; + this.transactionHashes = transactionHashes; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeUInt64LE(this.timestamp); + writer.writeUInt64LE(this.nonce); + 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 new file mode 100644 index 0000000000..cf902e3bf0 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts @@ -0,0 +1,38 @@ +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 preparationHash: UInt256; +} + +export class PrepareResponseConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareResponseConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const preparationHash = reader.readUInt256(); + + return new this({ + viewNumber, + preparationHash, + }); + } + + public readonly preparationHash: UInt256; + + public constructor({ viewNumber, preparationHash }: PrepareResponseAdd) { + const options = { + type: ConsensusMessageType.PrepareResponse, + viewNumber, + }; + super(options); + + this.preparationHash = preparationHash; + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + 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..ff0493646d --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts @@ -0,0 +1,159 @@ +import { BinaryWriter, common, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +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'; + +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); + + 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, + }), + 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]), + }), + }), + ); + } +} 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/utils/BinaryReader.ts b/packages/neo-one-node-core/src/utils/BinaryReader.ts index 7014d576d4..f68f034b94 100644 --- a/packages/neo-one-node-core/src/utils/BinaryReader.ts +++ b/packages/neo-one-node-core/src/utils/BinaryReader.ts @@ -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-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/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..de8f60b8f2 --- /dev/null +++ b/packages/neo-one-node-native/package.json @@ -0,0 +1,30 @@ +{ + "name": "@neo-one/node-native", + "version": "2.7.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": "^2.7.0", + "@neo-one/client-full-common": "^2.7.0", + "@neo-one/node-core": "^2.7.0", + "@neo-one/utils": "^2.6.1", + "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..77b754e17f --- /dev/null +++ b/packages/neo-one-node-native/src/AccountStates.ts @@ -0,0 +1,87 @@ +import { common, ECPoint } from '@neo-one/client-common'; +import { + assertBooleanStackItem, + assertBufferStackItem, + 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 = assertIntegerStackItem(structItem.array[1]).getInteger(); + const voteTo = structItem.array[2].isNull + ? undefined + : common.bufferToECPoint(assertBufferStackItem(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 = assertBooleanStackItem(structItem.array[0]).getBoolean(); + const votes = assertIntegerStackItem(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/GASToken.ts b/packages/neo-one-node-native/src/GASToken.ts new file mode 100644 index 0000000000..d372c899e4 --- /dev/null +++ b/packages/neo-one-node-native/src/GASToken.ts @@ -0,0 +1,13 @@ +import { NEP5NativeContract } from './Nep5'; + +export class GASToken extends NEP5NativeContract { + public static readonly decimals: 8; + public constructor() { + super({ + id: -2, + name: 'GAS', + 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..b3cd75131a --- /dev/null +++ b/packages/neo-one-node-native/src/KeyBuilder.ts @@ -0,0 +1,54 @@ +import { SerializableWire, StorageKey, StreamOptions } from '@neo-one/node-core'; + +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 toSearchPrefix(): Buffer { + return StorageKey.createSearchPrefix(this.id, this.mutableBuffer); + } + + public toSearchRange(): StreamOptions { + const prefix = this.mutableBuffer; + const lastBit = prefix[prefix.length - 1]; + const ltePrefix = Buffer.concat([prefix.slice(0, prefix.length - 1), Buffer.from([lastBit + 1])]); + if (ltePrefix.length !== prefix.length) { + // TODO: implement a real error, this is a failsafe because buffer manipulation + throw new Error('Unexpected error constructing search range'); + } + + return { + gte: StorageKey.createSearchPrefix(this.id, prefix), + lte: StorageKey.createSearchPrefix(this.id, ltePrefix), + }; + } + + public toStorageKey(): StorageKey { + return new StorageKey({ + id: this.id, + key: this.mutableBuffer, + }); + } +} 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..cf48d4652c --- /dev/null +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -0,0 +1,150 @@ +import { common, crypto, ECPoint, UInt160 } from '@neo-one/client-common'; +import { BlockchainSettings, Candidate, NativeContractStorageContext } 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 { GASToken } from './GASToken'; +import { NEP5NativeContract } from './Nep5'; +import { utils } from './utils'; + +export class NEOToken extends NEP5NativeContract { + 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]), + nextValidators: Buffer.from([14]), + }; + + public constructor(settings: BlockchainSettings) { + super({ + id: -1, + name: 'NEO', + 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 searchRange = this.createStorageKey(this.prefixes.candidate).toSearchRange(); + + return storage.storages + .find$(searchRange) + .pipe( + map(({ key, value }) => ({ + point: common.bufferToECPoint(key.key.slice(1)), + state: utils.getInteroperable(value, CandidateState.fromStackItem), + })), + filter((value) => value.state.registered), + // tslint:disable-next-line: no-useless-cast + map(({ point, state }) => ({ publicKey: point, votes: state.votes })), + toArray(), + ) + .toPromise(); + } + + public async getValidators(storage: NativeContractStorageContext): Promise { + const members = await this.getCommitteeMembers(storage); + + return members.slice(0, this.settings.validatorsCount).sort(common.ecPointCompare); + } + + public async getCommittee(storage: NativeContractStorageContext): Promise { + // tslint:disable-next-line: prefer-immediate-return + const members = await this.getCommitteeMembers(storage); + + return members.slice().sort(common.ecPointCompare); + } + + public async getCommitteeAddress(storage: NativeContractStorageContext): Promise { + const committees = await this.getCommittee(storage); + + return crypto.toScriptHash( + crypto.createMultiSignatureRedeemScript(committees.length - (committees.length - 1) / 2, committees), + ); + } + + public async unclaimedGas({ storages }: NativeContractStorageContext, account: UInt160, end: number) { + const storage = await storages.tryGet(this.createStorageKey(this.accountPrefix).addBuffer(account).toStorageKey()); + if (storage === undefined) { + return new BN(0); + } + + const state = utils.getInteroperable(storage, NEOAccountState.fromStackItem); + + return this.calculateBonus(state.balance, state.balanceHeight.toNumber(), end); + } + + public async getNextBlockValidators({ storages }: NativeContractStorageContext): Promise { + const storage = await storages.tryGet(this.createStorageKey(this.prefixes.nextValidators).toStorageKey()); + if (storage === undefined) { + return this.settings.standbyValidators; + } + + return utils.getSerializableArrayFromStorageItem(storage, (reader) => reader.readECPoint()); + } + + private async getCommitteeMembers(storage: NativeContractStorageContext): Promise { + const item = await storage.storages.get(this.createStorageKey(this.prefixes.votersCount).toStorageKey()); + const votersCount = new BN(item.value).toNumber(); + const voterTurnout = votersCount / this.totalAmount.toNumber(); + if (voterTurnout < this.effectiveVoterTurnout) { + return this.settings.standbyCommittee; + } + + const candidates = await this.getCandidates(storage); + if (candidates.length < this.settings.committeeMembersCount) { + return this.settings.standbyCommittee; + } + + return _.sortBy(candidates, ['votes', ({ publicKey }) => common.ecPointToHex(publicKey)]) + .map(({ publicKey }) => publicKey) + .slice(0, this.settings.committeeMembersCount); + } + + private calculateBonus(value: BN, start: number, end: number) { + 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'); + } + + let amount = new BN(0); + let ustart = start / this.settings.decrementInterval; + if (ustart < this.settings.generationAmount.length) { + let istart = start % this.settings.decrementInterval; + let uend = end / this.settings.decrementInterval; + let iend = end % this.settings.decrementInterval; + if (uend >= this.settings.generationAmount.length) { + uend = this.settings.generationAmount.length; + iend = 0; + } + if (iend === 0) { + uend -= 1; + iend = this.settings.decrementInterval; + } + // tslint:disable-next-line: no-loop-statement + while (ustart < uend) { + amount = amount.addn((this.settings.decrementInterval - istart) * this.settings.generationAmount[ustart]); + ustart += 1; + istart = 0; + } + amount = amount.addn((iend - istart) * this.settings.generationAmount[ustart]); + } + + return common.fixedFromDecimal(amount.mul(value), GASToken.decimals).div(this.totalAmount); + } +} 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..3f17aa255e --- /dev/null +++ b/packages/neo-one-node-native/src/NativeContainer.ts @@ -0,0 +1,16 @@ +import { BlockchainSettings } from '@neo-one/node-core'; +import { GASToken } from './GASToken'; +import { NEOToken } from './NEOToken'; +import { PolicyContract } from './Policy'; + +export class NativeContainer { + public readonly NEO: NEOToken; + public readonly GAS: GASToken; + public readonly Policy: PolicyContract; + + public constructor(settings: BlockchainSettings) { + this.NEO = new NEOToken(settings); + this.GAS = new GASToken(); + this.Policy = new PolicyContract(); + } +} 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..363d4ea68d --- /dev/null +++ b/packages/neo-one-node-native/src/NativeContract.ts @@ -0,0 +1,30 @@ +import { crypto, ScriptBuilder, UInt160 } 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; + + public constructor({ name, id }: NativeContractAdd) { + this.name = name; + this.id = id; + + const builder = new ScriptBuilder(); + builder.emitPushString(this.name); + builder.emitSysCall('Neo.Native.Call'); + this.script = builder.build(); + + this.hash = crypto.toScriptHash(this.script); + } + + protected createStorageKey(prefix: Buffer) { + return new KeyBuilder(this.id, prefix); + } +} diff --git a/packages/neo-one-node-native/src/Nep5.ts b/packages/neo-one-node-native/src/Nep5.ts new file mode 100644 index 0000000000..b2061f16e3 --- /dev/null +++ b/packages/neo-one-node-native/src/Nep5.ts @@ -0,0 +1,41 @@ +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 NEP5NativeContractAdd extends NativeContractAdd { + readonly symbol: string; + readonly decimals: number; +} + +export abstract class NEP5NativeContract extends NativeContract { + public readonly symbol: string; + public readonly decimals: number; + + protected readonly totalSupplyPrefix = Buffer.from([11]); + protected readonly accountPrefix = Buffer.from([20]); + + public constructor(options: NEP5NativeContractAdd) { + super(options); + this.symbol = options.symbol; + this.decimals = options.decimals; + } + + public async totalSupply({ storages }: NativeContractStorageContext): Promise { + const storage = await storages.tryGet(this.createStorageKey(this.totalSupplyPrefix).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.accountPrefix).addBuffer(account).toStorageKey()); + if (storage === undefined) { + return new BN(0); + } + + return new BN(storage.value); + } +} 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..1111f93c14 --- /dev/null +++ b/packages/neo-one-node-native/src/Policy.ts @@ -0,0 +1,69 @@ +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'; +import { utils } from './utils'; + +// 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]), + }; + + public constructor() { + super({ + id: -3, + name: 'Policy', + }); + } + + 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).toNumber(); + } + + return new BN(item.value).toNumber(); + } + + public async getFeePerByte({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.feePerByte).toStorageKey()); + if (item === undefined) { + return 1000; + } + + return new BN(item.value).toNumber(); + } + + public async getBlockedAccounts({ storages }: NativeContractStorageContext): Promise { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.blockedAccounts).toStorageKey()); + if (item !== undefined) { + return utils.getSerializableArrayFromStorageItem(item, (reader) => reader.readUInt160()); + } + + return []; + } +} 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..5a77ae007d --- /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 './Nep5'; +export * from './Policy'; diff --git a/packages/neo-one-node-native/src/utils.ts b/packages/neo-one-node-native/src/utils.ts new file mode 100644 index 0000000000..82a92e88f4 --- /dev/null +++ b/packages/neo-one-node-native/src/utils.ts @@ -0,0 +1,172 @@ +import { InvalidFormatError } from '@neo-one/client-common'; +import { + ArrayStackItem, + assertPrimitiveStackItem, + assertStackItemType, + BinaryReader, + BooleanStackItem, + BufferStackItem, + ByteStringStackItem, + IntegerStackItem, + MapStackItem, + NullStackItem, + PrimitiveStackItem, + StackItem, + StackItemType, + StorageItem, + StructStackItem, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import _ from 'lodash'; + +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; + +const getInteroperable = (item: StorageItem, fromStackItem: (item: StackItem) => T): T => { + const buffer = item.value; + const reader = new BinaryReader(buffer); + const deserializedStackItem = deserialize(reader, 16, 34); + + return fromStackItem(deserializedStackItem); +}; + +// tslint:disable: no-array-mutation no-loop-statement increment-decrement +const deserialize = (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)))); + 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: + const arrayCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: arrayCount })); + undeserialized += arrayCount; + break; + + case StackItemType.Struct: + const structCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: structCount })); + undeserialized += structCount; + break; + + case StackItemType.Map: + const mapCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: mapCount })); + undeserialized += mapCount * 2; + break; + + default: + throw new InvalidFormatError(`Invalid StackItemType, found: ${type}`); + } + } + + let stackTemp: StackItem[] = []; + while (deserialized.length > 0) { + const item = deserialized.pop(); + 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); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.push(new ArrayStackItem(arrayElements)); + break; + + case StackItemType.Struct: + const structElements = stackTemp.slice(0, item.elementCount); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.push(new StructStackItem(structElements)); + break; + + case StackItemType.Map: + const mapElements = stackTemp.slice(0, item.elementCount * 2); + stackTemp = stackTemp.slice(item.elementCount * 2); + stackTemp.push( + 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.push(item); + } + } + + return stackTemp[0]; +}; +// tslint:enable: no-array-mutation no-loop-statement increment-decrement + +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 = { + getInteroperable, + getSerializableArray, + getSerializableArrayFromStorageItem, +}; 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/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 52e4d155c5..396324955d 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -2,7 +2,7 @@ import { common as clientCommon, crypto, Op, ScriptBuilder, UInt160, WitnessScop 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); diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index b6f921b1b2..4bf7fd3d8d 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -10,6 +10,7 @@ import { Storage, // TransactionData, StorageItem, + StorageKey, TransactionState, TrimmedBlock, } from '@neo-one/node-core'; @@ -100,9 +101,14 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage }), }), - storages: read.createReadStorage({ + storages: read.createReadFindStorage({ db, serializeKey: keys.createStorageKey, + deserializeKey: (buffer) => + StorageKey.deserializeWire({ + context, + buffer, + }), deserializeValue: (buffer) => StorageItem.deserializeWire({ context, diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index 642632a166..895626f881 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -1,11 +1,17 @@ // tslint:disable no-var-before-return prefer-immediate-return -import { ReadAllStorage, ReadMetadataStorage, ReadStorage } from '@neo-one/node-core'; +import { + 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'; -import { StreamOptions } from './types'; type SerializeKey = (key: Key) => Buffer; @@ -118,6 +124,49 @@ export function createReadAllStorage({ }; } +export function createFind$({ + db, + deserializeKey, + deserializeValue, +}: { + readonly db: LevelUp; + readonly deserializeKey: (key: Buffer) => Key; + readonly deserializeValue: (value: Buffer) => Value; +}): (range: StreamOptions) => Observable> { + return (range: StreamOptions) => + streamToObservable>(() => db.createReadStream(range)).pipe( + map(({ key, value }) => ({ key: deserializeKey(key), value: deserializeValue(value) })), + ); +} + +export function createReadFindStorage({ + db, + serializeKey, + deserializeKey, + deserializeValue, +}: { + readonly db: LevelUp; + 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, + deserializeKey, + deserializeValue, + }), + }; +} + // TODO: do we need to reimplement this for something? // export function createReadGetAllStorage({ // db, 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-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index d136748df4..19a8683a86 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -9,6 +9,8 @@ using Neo.IO; using Neo.SmartContract.Native; using Neo.Network.P2P.Payloads; +using System.IO; +using System.Buffers.Binary; namespace NEOONE { @@ -90,19 +92,7 @@ private bool _dispose() private dynamic _test() { - var tx = new Transaction() - { - Script = new byte[] { 0x01 }, - Attributes = Array.Empty(), - Signers = Array.Empty(), - NetworkFee = 0x02, - SystemFee = 0x03, - Nonce = 0x04, - ValidUntilBlock = 0x05, - Version = 0x06, - Witnesses = new Witness[] { new Witness() { VerificationScript = new byte[] { 0x07 } } }, - }; - return tx.Hash.ToArray(); + return NativeContract.Policy.Hash.ToArray(); } #pragma warning disable 1998 diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index 11a9b74f82..43c99d6452 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -75,6 +75,7 @@ export class Dispatcher { this.initialize(this.options.levelDBPath); } + // tslint:disable-next-line: no-any public test(): any { return this.dispatch({ method: 'test', diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 8faaeefcb8..89cde7cc35 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -38,7 +38,7 @@ describe('Dispatcher Tests', () => { expect(() => postEngine.execute()).toThrow(); }); - test.only('test', () => { - console.log(dispatcher.test()); + test.only('', () => { + console.log(dispatcher.test().toString('hex')); }); }); diff --git a/packages/neo-one-node-vm/src/__tests__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts index 65c8776801..1143fa6f26 100644 --- a/packages/neo-one-node-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -1,5 +1,13 @@ import { common, ScriptBuilder, UInt256, WitnessScopeModel } from '@neo-one/client-common'; -import { ArrayStackItem, Block, ConsensusData, Signer, Transaction, TriggerType, Witness } from '@neo-one/node-core'; +import { + assertArrayStackItem, + Block, + ConsensusData, + Signer, + Transaction, + TriggerType, + Witness, +} from '@neo-one/node-core'; import { BN } from 'bn.js'; import { Dispatcher } from '../Dispatcher'; @@ -64,9 +72,9 @@ describe('TS <--> C# Storage Test', () => { expect(newState).toEqual('HALT'); const resultStack = engine.resultStack; - const arr = resultStack[0] as ArrayStackItem; - const hashFromStackItem = common.asUInt256(arr.value[0].value); - expect(hashFromStackItem).toEqual(block.hash); + const arr = assertArrayStackItem(resultStack[0]).array; + const hash = common.asUInt256(arr[0].getBuffer()); + expect(hash).toEqual(block.hash); }, ); }); @@ -124,8 +132,8 @@ describe('TS <--> C# Storage Test', () => { expect(newState).toEqual('HALT'); const resultStack = engine.resultStack; - const arr = resultStack[0] as ArrayStackItem; - const hashFromStackItem = common.asUInt256(arr.value[0].value); + 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 151372e1ff..d64647db63 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -1,5 +1,5 @@ import { common, ScriptBuilder } from '@neo-one/client-common'; -import { Block, ByteStringStackItem, ConsensusData, IntegerStackItem, TriggerType, Witness } from '@neo-one/node-core'; +import { Block, ConsensusData, TriggerType, Witness } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; import { ApplicationEngine } from '../ApplicationEngine'; @@ -33,7 +33,7 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack[0].isNull).toEqual(true); - expect(resultStack[1].value.toNumber()).toEqual(123); + expect(resultStack[1].getInteger().toNumber()).toEqual(123); }); test('Fault -- Wrong Json', () => { @@ -82,11 +82,11 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack.length).toEqual(5); - expect((resultStack[0] as ByteStringStackItem).asString()).toEqual('{"key":"value"}'); - expect((resultStack[1] as ByteStringStackItem).asString()).toEqual('null'); - expect((resultStack[2] as ByteStringStackItem).asString()).toEqual('"test"'); - expect((resultStack[3] as ByteStringStackItem).asString()).toEqual('true'); - expect((resultStack[4] as ByteStringStackItem).asString()).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'); }); test('Fault -- Bad values', () => { @@ -130,7 +130,7 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack.length).toEqual(1); - expect((resultStack[0] as IntegerStackItem).value.eq(new BN(4))).toEqual(true); + expect(resultStack[0].getInteger().eq(new BN(4))).toEqual(true); }); test('System.Callback.CreateFromSyscall -- Halt', () => { @@ -155,8 +155,7 @@ describe('Application Engine SysCall Tests', () => { const resultStack = engine.resultStack; expect(resultStack.length).toEqual(1); - const byteStringItem = engine.resultStack[0] as ByteStringStackItem; - expect(byteStringItem.value.toString('hex')).toEqual( + expect(resultStack[0].getBuffer().toString('hex')).toEqual( 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', ); }); diff --git a/packages/neo-one-node-vm/src/converters/stackItems.ts b/packages/neo-one-node-vm/src/converters/stackItems.ts index b13c0305a8..3673237325 100644 --- a/packages/neo-one-node-vm/src/converters/stackItems.ts +++ b/packages/neo-one-node-vm/src/converters/stackItems.ts @@ -1,4 +1,18 @@ -import { PrimitiveStackItem, StackItem, StackItemType } from '@neo-one/node-core'; +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 { @@ -24,7 +38,7 @@ export interface BooleanStackItemReturn extends StackItemReturnBase { export interface IntegerStackItemReturn extends StackItemReturnBase { readonly Type: 'Integer'; - readonly value: string | number; // TODO: it might just be one? + readonly value: string | number; readonly Size: number; } @@ -59,7 +73,7 @@ export interface MapStackItemReturn extends StackItemReturnBase { } // tslint:disable-next-line: no-any -export interface InteropInterfaceStackItemReturn extends StackItemReturnBase { +export interface InteropInterfaceStackItemReturn extends StackItemReturnBase { readonly Type: 'InteropInterface'; readonly value: T; } @@ -78,66 +92,40 @@ export type StackItemReturn = export const parseStackItems = (stack: readonly StackItemReturn[]): readonly StackItem[] => stack.map(parseStackItem); -const parseStackItem = (item: StackItemReturn): StackItem => { - const isNull = item.IsNull; +export const parseStackItem = (item: StackItemReturn): StackItem => { switch (item.Type) { case 'Any': - return { - type: 'Any', - value: undefined, - isNull, - }; + return new NullStackItem(); - case 'Pointer': - return { - type: 'Pointer', - value: item.value, - position: item.Position, - isNull, - }; + case 'Array': + return new ArrayStackItem(parseStackItems(item.value)); case 'Buffer': - return { - type: 'Buffer', - value: item.value, - size: item.Size, - isNull, - }; - - case 'Array': - return { - type: 'Array', - value: parseStackItems(item.value), - count: item.Count, - isNull, - }; + return new BufferStackItem(item.value); - case 'Struct': - return { - type: 'Struct', - value: parseStackItems(item.value), // TODO: how should StructStackItem look? - count: item.Count, - isNull, - }; + case 'InteropInterface': + return new InteropInterface(item.value); case 'Map': - return { - type: 'Map', - value: item.value.reduce((acc, { key, value }) => { - acc.set(parsePrimitiveStackItem(key), parseStackItem(value)); + 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()), - count: item.Count, - isNull, - }; + ); - case 'InteropInterface': - return { - type: 'InteropInterface', - value: item.value, - isNull, - }; + case 'Pointer': + return new PointerStackItem({ + script: item.value, + position: item.Position, + }); + + case 'Struct': + return new StructStackItem(parseStackItems(item.value)); default: return parsePrimitiveStackItem(item); @@ -145,35 +133,17 @@ const parseStackItem = (item: StackItemReturn): StackItem => { }; const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStackItem => { - const isNull = item.IsNull; switch (item.Type) { case 'Boolean': - return { - type: 'Boolean', - value: item.value, - size: item.Size, - isNull, - }; - - case 'Integer': - return { - type: 'Integer', - value: new BN(item.value), - size: item.Size, - isNull, - }; + return new BooleanStackItem(item.value); case 'ByteString': - return { - type: 'ByteString', - value: item.value, - asString: () => item.value.toString('utf8'), - size: item.Size, - isNull, - }; + return new ByteStringStackItem(item.value); + + case 'Integer': + return new IntegerStackItem(new BN(item.value)); default: - // TODO: create an error here - throw new Error('Invalid StackItem'); + throw new Error(`invalid stack item when parsing, found type ${item}`); } }; diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 069af67deb..3a160c24a0 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -18,6 +18,7 @@ "@neo-one/node-blockchain": "^2.7.0", "@neo-one/node-core": "^2.7.0", "@neo-one/node-http-rpc": "^2.7.0", + "@neo-one/node-native": "^2.7.0", "@neo-one/node-network": "^2.7.0", "@neo-one/node-offline": "^2.7.0", "@neo-one/node-protocol": "^2.7.0", diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index bf41b526e4..1918149f79 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -2,11 +2,12 @@ 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 { Dispatcher } from '@neo-one/node-vm'; import { composeDisposables, Disposable, noopDisposable } from '@neo-one/utils'; import { AbstractLevelDOWN } from 'abstract-leveldown'; import fs from 'fs-extra'; @@ -80,11 +81,17 @@ export const startFullNode = async ({ await storage.close(); }); + const native = new NativeContainer(blockchainSettings); + + const vm = new Dispatcher({ levelDBPath: dataPath }); + const blockchain = await Blockchain.create({ settings: blockchainSettings, storage, + native, vm, }); + disposable = composeDisposables(disposable, async () => { await blockchain.stop(); }); diff --git a/rush.json b/rush.json index c4237e50c9..7d8b898f3a 100644 --- a/rush.json +++ b/rush.json @@ -221,6 +221,13 @@ "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", From 44a30b0c75f48eb5bfe7a75c024351c6a36b3873 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 6 Oct 2020 14:59:49 -0700 Subject: [PATCH 102/141] feat(vm): add ability to pass protocol settings into vm (#2174) --- .../src/StackItems/PrimitiveStackItemBase.ts | 2 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 104 ++++++++++++++++-- .../neo-one-node-vm/lib/Dispatcher.csproj | 1 + packages/neo-one-node-vm/lib/ReturnHelpers.cs | 24 ++++ packages/neo-one-node-vm/package.json | 1 + packages/neo-one-node-vm/src/Dispatcher.ts | 16 ++- .../src/Methods/BaseMethods.ts | 24 ++++ .../src/__tests__/Dispatcher.test.ts | 59 +++++++++- packages/neo-one-node-vm/src/errors.ts | 16 +++ packages/neo-one-node-vm/src/index.ts | 1 + packages/neo-one-node-vm/src/utils.ts | 49 +++++++++ packages/neo-one-node/src/startFullNode.ts | 7 +- 12 files changed, 287 insertions(+), 17 deletions(-) create mode 100644 packages/neo-one-node-vm/src/errors.ts diff --git a/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts b/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts index 322e89558b..2280d8efde 100644 --- a/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts +++ b/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts @@ -1,5 +1,5 @@ import { BN } from 'bn.js'; -import { InvalidStackItemCastError } from 'src/errors'; +import { InvalidStackItemCastError } from '../errors'; import { StackItemAdd, StackItemBase } from './StackItemBase'; const MIN_SAFE_BN = new BN(Number.MIN_SAFE_INTEGER); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index 19a8683a86..5d961fb985 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -5,12 +5,8 @@ using System.Collections.Generic; using NEOONE.Storage; using Neo.Persistence; -using LevelHelper = NEOONE.Storage.LevelDB.Helper; -using Neo.IO; using Neo.SmartContract.Native; -using Neo.Network.P2P.Payloads; -using System.IO; -using System.Buffers.Binary; +using Microsoft.Extensions.Configuration; namespace NEOONE { @@ -26,6 +22,7 @@ private enum BaseMethod init, dispose, test, + get_config, } private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) @@ -33,16 +30,27 @@ private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) switch (method) { case BaseMethod.init: - if (args.path == null) + 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); + 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(); @@ -52,6 +60,34 @@ private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) } } + private bool _init(string path, IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.store = new LevelDBStore(path).GetStore(); + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + + private bool _init(IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.store = new MemoryStore(); + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + private bool _init(string path) { if (!this.init) @@ -92,7 +128,12 @@ private bool _dispose() private dynamic _test() { - return NativeContract.Policy.Hash.ToArray(); + return NativeContract.Policy.Hash.ToString(); + } + + private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() + { + return new NEOONE.ReturnHelpers.ProtocolSettingsReturn(Neo.ProtocolSettings.Default); } #pragma warning disable 1998 @@ -138,5 +179,52 @@ private bool hasArgs(dynamic input) 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 index ecf6342f5b..c576e41e97 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -11,6 +11,7 @@ + diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index 4f48fa5511..437e3e6741 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -3,6 +3,7 @@ using Neo.IO; using Neo.SmartContract; using Neo.VM.Types; +using Neo; namespace NEOONE { @@ -156,5 +157,28 @@ public NotifyEventReturn(NotifyEventArgs notifyEvent) this.state = convertStackItem(notifyEvent.State); } } + 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 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; + } + } } } diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 23600e791c..08dcc04cad 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -15,6 +15,7 @@ "@neo-one/edge": "^15.0.0", "@neo-one/node-core": "^2.7.0", "@neo-one/client-common": "^2.7.0", + "@neo-one/utils": "^2.6.1", "bn.js": "^5.0.0" }, "devDependencies": { diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index 43c99d6452..1e745cbc67 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -1,9 +1,9 @@ import * as nodePath from 'path'; import { ApplicationEngine, CreateOptions } from './ApplicationEngine'; -import { BaseMethods, EngineMethods, SnapshotMethods } from './Methods'; +import { BaseMethods, EngineMethods, ProtocolSettings, ProtocolSettingsReturn, SnapshotMethods } from './Methods'; import { SnapshotHandler } from './SnapshotHandler'; import { DispatcherFunc } from './types'; -import { constants, createCSharpDispatchInvoke } from './utils'; +import { constants, createCSharpDispatchInvoke, validateProtocolSettings } from './utils'; export interface DispatcherMethods extends BaseMethods, SnapshotMethods, EngineMethods {} @@ -17,6 +17,7 @@ export const createDispatcher = () => createCSharpDispatchInvoke( @@ -75,6 +76,12 @@ export class Dispatcher { this.initialize(this.options.levelDBPath); } + public getConfig(): ProtocolSettingsReturn { + return this.dispatch({ + method: 'get_config', + }); + } + // tslint:disable-next-line: no-any public test(): any { return this.dispatch({ @@ -82,11 +89,12 @@ export class Dispatcher { }); } - private initialize(path?: string): boolean { + 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 index c933d7cf8d..e0a7f22d2a 100644 --- a/packages/neo-one-node-vm/src/Methods/BaseMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/BaseMethods.ts @@ -2,6 +2,29 @@ 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 { @@ -9,4 +32,5 @@ export interface BaseMethods extends DefaultMethods { readonly dispose_engine: DispatchMethod; readonly snapshot_reset: DispatchMethod; readonly dispose: DispatchMethod; + readonly get_config: DispatchMethod; } diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 89cde7cc35..d139861c2c 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -38,7 +38,62 @@ describe('Dispatcher Tests', () => { expect(() => postEngine.execute()).toThrow(); }); - test.only('', () => { - console.log(dispatcher.test().toString('hex')); + 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('', () => { + console.log(dispatcher.test()); }); }); diff --git a/packages/neo-one-node-vm/src/errors.ts b/packages/neo-one-node-vm/src/errors.ts new file mode 100644 index 0000000000..b21e5a0349 --- /dev/null +++ b/packages/neo-one-node-vm/src/errors.ts @@ -0,0 +1,16 @@ +import { makeErrorWithCode } from '@neo-one/utils'; + +export const InvalidUIntError = makeErrorWithCode( + 'INVALID_UINT', + (num: number) => `Expected number to be a 32-bit unsigned integer. Got: ${num}`, +); + +export const InvalidIntError = makeErrorWithCode( + 'INVALID_INT', + (num: number) => `Expected number to be a 32-bit signed integer. Got: ${num}`, +); + +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/index.ts b/packages/neo-one-node-vm/src/index.ts index 91a11ff1f1..76bd1cb2a9 100644 --- a/packages/neo-one-node-vm/src/index.ts +++ b/packages/neo-one-node-vm/src/index.ts @@ -1,2 +1,3 @@ export * from './ApplicationEngine'; export * from './Dispatcher'; +export * from './utils'; diff --git a/packages/neo-one-node-vm/src/utils.ts b/packages/neo-one-node-vm/src/utils.ts index ff4792893c..a1211d2d08 100644 --- a/packages/neo-one-node-vm/src/utils.ts +++ b/packages/neo-one-node-vm/src/utils.ts @@ -1,5 +1,9 @@ +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 APP_ROOT = path.resolve(__dirname, '..'); @@ -19,3 +23,48 @@ export const createCSharpDispatchInvoke = ( 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/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index 1918149f79..2097cfbf4d 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -7,7 +7,7 @@ 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 { Dispatcher } from '@neo-one/node-vm'; +import { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node-vm'; import { composeDisposables, Disposable, noopDisposable } from '@neo-one/utils'; import { AbstractLevelDOWN } from 'abstract-leveldown'; import fs from 'fs-extra'; @@ -83,7 +83,10 @@ export const startFullNode = async ({ const native = new NativeContainer(blockchainSettings); - const vm = new Dispatcher({ levelDBPath: dataPath }); + const vm = new Dispatcher({ + levelDBPath: dataPath, + protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), + }); const blockchain = await Blockchain.create({ settings: blockchainSettings, From b8dd86707c591f3bf2ab4d716f4f2d5b7f3a0e98 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 8 Oct 2020 14:43:31 -0700 Subject: [PATCH 103/141] feat(rpc): More RPC Handler / Blockchain implementations (#2177) --- .../neo-one-client-common/src/GasToken.ts | 1 - .../src/NativeContract.ts | 35 - .../neo-one-client-common/src/NeoToken.ts | 1 - .../src/PolicyContract.ts | 7 - .../feelessTransactionModel.test.ts.snap | 3 + .../feelessTransactionModel.test.ts | 79 ++ .../transaction/transactionModel.test.ts | 9 +- packages/neo-one-client-common/src/common.ts | 11 +- .../src/contractParameters.ts | 10 +- packages/neo-one-client-common/src/crypto.ts | 64 ++ packages/neo-one-client-common/src/index.ts | 3 - .../transaction/FeelessTransactionModel.ts | 155 ++++ .../models/transaction/TransactionModel.ts | 153 ++-- .../src/models/transaction/helper.ts | 19 + .../src/models/transaction/index.ts | 2 + .../neo-one-client-common/src/models/types.ts | 18 +- .../neo-one-client-common/src/models/vm.ts | 17 + packages/neo-one-client-common/src/types.ts | 13 +- packages/neo-one-client-core/src/Client.ts | 6 +- .../src/__tests__/temp.test.ts | 52 ++ packages/neo-one-client-core/src/args.ts | 2 +- .../src/provider/JSONRPCClient.ts | 18 - .../src/provider/NEOONEDataProvider.ts | 13 +- .../src/provider/NEOONEProvider.ts | 3 +- .../src/user/LocalUserAccountProvider.ts | 106 ++- .../src/user/UserAccountProviderBase.ts | 144 ++-- .../neo-one-node-blockchain/src/Blockchain.ts | 208 ++++- .../neo-one-node-blockchain/src/errors.ts | 4 + packages/neo-one-node-blockchain/src/utils.ts | 153 +++- .../neo-one-node-blockchain/src/verify.ts | 47 +- .../src/wrapExecuteScripts.ts | 11 +- packages/neo-one-node-core/package.json | 3 +- packages/neo-one-node-core/src/Block.ts | 3 +- packages/neo-one-node-core/src/BlockBase.ts | 39 +- packages/neo-one-node-core/src/Blockchain.ts | 35 +- .../neo-one-node-core/src/ContractState.ts | 11 +- packages/neo-one-node-core/src/Header.ts | 15 +- packages/neo-one-node-core/src/Native.ts | 9 +- packages/neo-one-node-core/src/Node.ts | 10 +- packages/neo-one-node-core/src/Prices.ts | 202 +++++ .../neo-one-node-core/src/Serializable.ts | 29 +- packages/neo-one-node-core/src/Signer.ts | 4 +- packages/neo-one-node-core/src/Signers.ts | 55 ++ .../src/StackItems/StackItems.ts | 61 ++ .../neo-one-node-core/src/TransactionData.ts | 2 +- .../src/TransactionVerificationContext.ts | 8 + packages/neo-one-node-core/src/Verifiable.ts | 20 +- packages/neo-one-node-core/src/Witness.ts | 9 +- packages/neo-one-node-core/src/errors.ts | 16 + packages/neo-one-node-core/src/index.ts | 5 + .../src/network/ConnectedPeer.ts | 36 + .../neo-one-node-core/src/network/Network.ts | 40 + .../neo-one-node-core/src/network/Peer.ts | 163 ++++ .../capabilities/FullNodeCapability.ts | 42 + .../network/capabilities/NodeCapability.ts | 57 ++ .../capabilities/NodeCapabilityBase.ts | 35 + .../capabilities/NodeCapabilityType.ts | 19 + .../network/capabilities/ServerCapability.ts | 48 ++ .../src/network/capabilities/index.ts | 5 + .../neo-one-node-core/src/network/event.ts | 14 + .../neo-one-node-core/src/network/index.ts | 6 + .../neo-one-node-core/src/network/types.ts | 21 + .../src/payload/ConsensusPayload.ts | 49 +- .../src/payload/UnsignedConsensusPayload.ts | 17 +- .../neo-one-node-core/src/payload/index.ts | 6 + .../src/payload/message/index.ts | 10 + .../src/transaction/Transaction.ts | 164 +++- .../transaction/attributes/AttributeBase.ts | 12 +- packages/neo-one-node-core/src/vm.ts | 41 +- packages/neo-one-node-protocol/src/Command.ts | 80 +- packages/neo-one-node-protocol/src/Message.ts | 243 +++--- .../neo-one-node-protocol/src/MessageFlags.ts | 16 + packages/neo-one-node-protocol/src/Node.ts | 759 ++++++++---------- .../neo-one-node-protocol/src/PeerData.ts | 1 + .../src/TransactionVerificationContext.ts | 59 ++ packages/neo-one-node-protocol/src/errors.ts | 10 - .../src/payload/AddrPayload.ts | 27 +- .../src/payload/GetBlockByIndexPayload.ts | 52 ++ .../src/payload/GetBlocksPayload.ts | 36 +- .../src/payload/HeadersPayload.ts | 1 + .../src/payload/InvPayload.ts | 15 + .../src/payload/InventoryType.ts | 6 +- .../src/payload/MerkleBlockPayload.ts | 62 +- .../src/payload/NetworkAddress.ts | 81 +- .../src/payload/PingPayload.ts | 65 ++ .../src/payload/VersionPayload.ts | 111 +-- .../src/payload/index.ts | 2 + .../src/createHandler.ts | 530 ++++++------ .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 8 +- .../lib/Dispatcher.Snapshot.cs | 4 + .../neo-one-node-vm/src/ApplicationEngine.ts | 30 +- packages/neo-one-node-vm/src/Dispatcher.ts | 10 +- .../src/Methods/EngineMethods.ts | 2 +- .../src/Methods/SnapshotMethods.ts | 1 + .../neo-one-node-vm/src/SnapshotHandler.ts | 9 + packages/neo-one-node/src/startFullNode.ts | 1 + 96 files changed, 3445 insertions(+), 1464 deletions(-) delete mode 100644 packages/neo-one-client-common/src/GasToken.ts delete mode 100644 packages/neo-one-client-common/src/NativeContract.ts delete mode 100644 packages/neo-one-client-common/src/NeoToken.ts delete mode 100644 packages/neo-one-client-common/src/PolicyContract.ts create mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/feelessTransactionModel.test.ts.snap create mode 100644 packages/neo-one-client-common/src/__tests__/models/transaction/feelessTransactionModel.test.ts create mode 100644 packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts create mode 100644 packages/neo-one-client-common/src/models/transaction/helper.ts create mode 100644 packages/neo-one-client-core/src/__tests__/temp.test.ts create mode 100644 packages/neo-one-node-core/src/Prices.ts create mode 100644 packages/neo-one-node-core/src/Signers.ts create mode 100644 packages/neo-one-node-core/src/TransactionVerificationContext.ts create mode 100644 packages/neo-one-node-core/src/network/ConnectedPeer.ts create mode 100644 packages/neo-one-node-core/src/network/Network.ts create mode 100644 packages/neo-one-node-core/src/network/Peer.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/NodeCapabilityBase.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/NodeCapabilityType.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts create mode 100644 packages/neo-one-node-core/src/network/capabilities/index.ts create mode 100644 packages/neo-one-node-core/src/network/event.ts create mode 100644 packages/neo-one-node-core/src/network/index.ts create mode 100644 packages/neo-one-node-core/src/network/types.ts create mode 100644 packages/neo-one-node-core/src/payload/index.ts create mode 100644 packages/neo-one-node-core/src/payload/message/index.ts create mode 100644 packages/neo-one-node-protocol/src/MessageFlags.ts create mode 100644 packages/neo-one-node-protocol/src/TransactionVerificationContext.ts create mode 100644 packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts create mode 100644 packages/neo-one-node-protocol/src/payload/PingPayload.ts diff --git a/packages/neo-one-client-common/src/GasToken.ts b/packages/neo-one-client-common/src/GasToken.ts deleted file mode 100644 index 115c515e72..0000000000 --- a/packages/neo-one-client-common/src/GasToken.ts +++ /dev/null @@ -1 +0,0 @@ -export class GasToken {} diff --git a/packages/neo-one-client-common/src/NativeContract.ts b/packages/neo-one-client-common/src/NativeContract.ts deleted file mode 100644 index acd3e0d24c..0000000000 --- a/packages/neo-one-client-common/src/NativeContract.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { common, UInt160 } from './common'; -import { crypto } from './crypto'; -import { GasToken } from './GasToken'; -import { scriptHashToAddress } from './helpers'; -import { NeoToken } from './NeoToken'; -import { PolicyContract } from './PolicyContract'; -import { ScriptBuilder } from './ScriptBuilder'; -import { AddressString } from './types'; - -export type NativeContractServiceName = 'Policy' | 'GAS' | 'NEO'; - -export class NativeContract { - public static readonly NEO: NeoToken; - public static readonly GAS: GasToken; - public static readonly Policy: PolicyContract; - - public readonly serviceName: NativeContractServiceName; - public readonly script: Buffer; - public readonly scriptHex: string; - public readonly hash: UInt160; - public readonly scriptHash: string; - public readonly address: AddressString; - - public constructor(serviceName: NativeContractServiceName) { - this.serviceName = serviceName; - this.script = new ScriptBuilder() - .emitPush(Buffer.from(serviceName, 'ascii')) - .emitSysCall('Neo.Native.Call') - .build(); - this.scriptHex = this.script.toString('hex'); - this.hash = crypto.toScriptHash(this.script); - this.scriptHash = common.uInt160ToHex(this.hash); - this.address = scriptHashToAddress(this.scriptHash); - } -} diff --git a/packages/neo-one-client-common/src/NeoToken.ts b/packages/neo-one-client-common/src/NeoToken.ts deleted file mode 100644 index 7850ad9da5..0000000000 --- a/packages/neo-one-client-common/src/NeoToken.ts +++ /dev/null @@ -1 +0,0 @@ -export class NeoToken {} diff --git a/packages/neo-one-client-common/src/PolicyContract.ts b/packages/neo-one-client-common/src/PolicyContract.ts deleted file mode 100644 index f8d78d8455..0000000000 --- a/packages/neo-one-client-common/src/PolicyContract.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { NativeContract } from './NativeContract'; - -export class PolicyContract extends NativeContract { - public constructor() { - super('Policy'); - } -} 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/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 index ddb9589f7e..756b03544d 100644 --- 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 @@ -1,7 +1,7 @@ import { BN } from 'bn.js'; import { keys } from '../../../__data__/keys'; import { BinaryWriter } from '../../../BinaryWriter'; -import { SignerModel, TransactionModel, TransactionModelAdd } from '../../../models'; +import { SignerModel, TransactionModel, TransactionModelAdd, WitnessScopeModel } from '../../../models'; const testSender = keys[0].scriptHash; const testPrivKey = keys[1].privateKey; @@ -12,10 +12,9 @@ const optionsBuilder = ({ systemFee = new BN(0), networkFee = new BN(0), validUntilBlock = 100000, - sender = testSender, attributes = [], witnesses = [], - signers = [], + signers = [new SignerModel({ account: testSender, scopes: WitnessScopeModel.None })], hash, script = Buffer.from([0x10]), }: Partial): TransactionModelAdd => ({ @@ -24,7 +23,6 @@ const optionsBuilder = ({ systemFee, networkFee, validUntilBlock, - sender, attributes, witnesses, signers, @@ -34,7 +32,6 @@ const optionsBuilder = ({ // tslint:disable-next-line:no-let let testWriter: BinaryWriter = new BinaryWriter(); - const resetWriter = () => { testWriter = new BinaryWriter(); }; @@ -55,7 +52,7 @@ describe('Transaction Model', () => { test('Serialize Base - With Cosigners', () => { const signer = new SignerModel({ account: testSender, - scopes: 'Global', + scopes: WitnessScopeModel.Global, }); const cosignerTransaction = new TransactionModel({ diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 48d4d39098..5894a17551 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -219,6 +219,12 @@ const FIVE_THOUSAND_FIXED8 = fixed8FromDecimal(5000); const TEN_THOUSAND_FIXED8 = fixed8FromDecimal(10000); const ONE_HUNDRED_MILLION_FIXED8 = fixed8FromDecimal(100000000); +const nativeHashes = { + GAS: hexToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), + NEO: hexToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), + Policy: hexToUInt160('e9ff4ca7cc252e1dfddb26315869cd79505906ce'), +}; + export const common = { D8, NEO_ADDRESS_VERSION: 0x35, @@ -244,10 +250,6 @@ export const common = { FIVE_THOUSAND_FIXED8, TEN_THOUSAND_FIXED8, ONE_HUNDRED_MILLION_FIXED8, - NEO_ASSET_HASH: '0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b', - GAS_ASSET_HASH: '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7', - NEO_CONTRACT_SCRIPT_HASH: '0x43cf98eddbe047e198a3e5d57006311442a0ca15', - GAS_CONTRACT_SCRIPT_HASH: '0xa1760976db5fcdfab2a9930e8f6ce875b2d18225', uInt160ToBuffer, add0x, strip0x, @@ -294,4 +296,5 @@ export const common = { fixedToDecimal, reverse, isWildcard, + nativeHashes, }; diff --git a/packages/neo-one-client-common/src/contractParameters.ts b/packages/neo-one-client-common/src/contractParameters.ts index 9363f11e21..b845915e00 100644 --- a/packages/neo-one-client-common/src/contractParameters.ts +++ b/packages/neo-one-client-common/src/contractParameters.ts @@ -1,6 +1,6 @@ -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'; @@ -29,6 +29,12 @@ import { VoidABI, } from './types'; import { utils } from './utils'; +import { + assertContractParameterType, + toContractParameterType, + assertContractParameterTypeJSON, + ContractParameterTypeModel, +} from './models'; const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { let value; diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 829a9abd04..e2a58ea881 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -619,6 +619,69 @@ const isMultiSigContract = (script: Buffer) => { }; // tslint:enable +type MultiSigResult = { readonly result: true; readonly m: number; readonly n: number } | { readonly result: false }; +// tslint:disable +const isMultiSigContractWithResult = (script: Buffer): MultiSigResult => { + let m = 0; + let n = 0; + let i = 0; + 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 }; + // points?.push(script.slice(i + 1, i + 1 + 33)); // TODO: add "points" List from C# + + i += 34; + ++n; + } + 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) !== checkMultiSigUint) return { result: false }; + return { result: true, m, n }; +}; +// tslint:enable + const isSignatureContract = (script: Buffer) => script.length === 41 && script[0] === Op.PUSHDATA1 && @@ -847,6 +910,7 @@ export const crypto = { decryptNEP2, createPrivateKey, isMultiSigContract, + isMultiSigContractWithResult, isSignatureContract, isStandardContract, parseExtendedKey, diff --git a/packages/neo-one-client-common/src/index.ts b/packages/neo-one-client-common/src/index.ts index 28dd9d9da2..06d81849cf 100644 --- a/packages/neo-one-client-common/src/index.ts +++ b/packages/neo-one-client-common/src/index.ts @@ -7,9 +7,6 @@ export * from './helpers'; export * from './IOHelper'; export * from './JSONHelper'; export * from './models'; -export * from './NativeContract'; -export * from './GasToken'; -export * from './NeoToken'; export * from './paramUtils'; export * from './BaseScriptBuilder'; export * from './ScriptBuilder'; 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..21e79cf971 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts @@ -0,0 +1,155 @@ +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 { createGetHashData, createSerializeWire, 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; +} + +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; +} + +export const MAX_TRANSACTION_ATTRIBUTES = 16; +export const MAX_TRANSACTION_SIZE = 102400; +export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 2102400; +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 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(() => createGetHashData(this.serializeUnsigned)()); + + public constructor({ + version, + nonce = 0, + attributes = [], + witnesses = [], + signers = [], + validUntilBlock = 0, + script, + hash, + }: 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; + 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, + }); + } + + 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/TransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts index f8c2b8d91c..3e6676d5b0 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -1,69 +1,38 @@ 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 { ECPoint, PrivateKey } from '../../common'; import { crypto } from '../../crypto'; -import { utils } from '../../utils'; -import { createGetHashData, createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; +import { SerializableWire } from '../Serializable'; import { SignerModel } from '../SignerModel'; import { WitnessModel } from '../WitnessModel'; import { AttributeModel } from './attribute'; - -export interface TransactionConsensusOptions { - readonly nonce: number; - readonly validUntilBlock: number; - readonly networkFee: BN; -} +import { + FeelessTransactionModel, + FeelessTransactionModelAdd, + TransactionConsensusOptions, +} from './FeelessTransactionModel'; export interface TransactionModelAdd< TAttribute extends AttributeModel = AttributeModel, TWitness extends WitnessModel = WitnessModel, TSigner extends SignerModel = SignerModel -> { - readonly version?: number; - readonly nonce?: number; +> extends FeelessTransactionModelAdd { readonly systemFee: BN; - readonly networkFee?: BN; - readonly validUntilBlock?: number; - readonly attributes?: readonly TAttribute[]; - readonly signers?: readonly TSigner[]; - readonly script: Buffer; - readonly witnesses?: readonly TWitness[]; - readonly hash?: UInt256; + readonly networkFee: BN; } -export const MAX_TRANSACTION_ATTRIBUTES = 16; -export const MAX_TRANSACTION_SIZE = 102400; -export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 2102400; -export const DEFAULT_VERSION = 0; - export class TransactionModel< - 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; + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel + > + extends FeelessTransactionModel + implements SerializableWire { 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 serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); - private readonly systemFeeInternal: () => BN; - private readonly networkFeeInternal: () => BN; - private readonly hashInternal: () => UInt256; - private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned)()); + public readonly systemFee: BN; + public readonly networkFee: BN; public constructor({ version, @@ -71,85 +40,63 @@ export class TransactionModel< attributes = [], witnesses = [], signers = [], - systemFee, - networkFee, validUntilBlock, script, hash, + systemFee, + networkFee, }: TransactionModelAdd) { - 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.systemFeeInternal = utils.lazy(() => systemFee); - this.networkFeeInternal = utils.lazy(() => (networkFee ? networkFee : new BN(0))); - this.validUntilBlock = validUntilBlock; - this.script = script; - 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 get systemFee() { - return this.systemFeeInternal(); - } + super({ + version, + nonce, + attributes, + witnesses, + signers, + validUntilBlock, + script, + hash, + }); - public get networkFee() { - return this.networkFeeInternal(); + this.systemFee = systemFee; + this.networkFee = networkFee; } - public clone(options: { readonly witnesses?: readonly TWitness[] } = {}): this { - // tslint:disable-next-line: no-any - return new (this.constructor as any)({ + public clone( + options: { readonly witnesses?: readonly TWitness[] } = {}, + ): TransactionModel { + return new TransactionModel({ version: this.version, - nonce: this.nonce, - systemFee: this.systemFee, - networkFee: this.networkFee, - validUntilBlock: this.validUntilBlock, attributes: this.attributes, signers: this.signers, script: this.script, hash: this.hash, - witnesses: options.witnesses === undefined ? this.witnesses : options.witnesses, + witnesses: options.witnesses ? options.witnesses : this.witnesses, + systemFee: this.systemFee, + networkFee: this.networkFee, + nonce: this.nonce, + validUntilBlock: this.validUntilBlock, }); } - public cloneWithConsensusOptions(options: TransactionConsensusOptions): this { + public cloneWithConsensusOptions( + options: TransactionConsensusOptions, + ): TransactionModel { // tslint:disable-next-line: no-any - return new (this.constructor as any)({ + return new TransactionModel({ version: this.version, - systemFee: this.systemFee, attributes: this.attributes, signers: this.signers, script: this.script, hash: this.hash, witnesses: this.witnesses, + systemFee: this.systemFee, + networkFee: this.networkFee, nonce: options.nonce, - networkFee: options.networkFee, validUntilBlock: options.validUntilBlock, }); } - public sign(key: PrivateKey): this { + public sign(key: PrivateKey): TransactionModel { return this.clone({ witnesses: this.witnesses.concat([ // tslint:disable-next-line no-any @@ -158,7 +105,7 @@ export class TransactionModel< }); } - public signWithSignature(signature: Buffer, publicKey: ECPoint): this { + public signWithSignature(signature: Buffer, publicKey: ECPoint): TransactionModel { return this.clone({ witnesses: this.witnesses.concat([ // tslint:disable-next-line no-any @@ -169,10 +116,10 @@ export class TransactionModel< public serializeUnsignedBase(writer: BinaryWriter): void { writer.writeUInt8(this.version); - writer.writeUInt32LE(this.nonce ? this.nonce : 0); + writer.writeUInt32LE(this.nonce); writer.writeUInt64LE(this.systemFee); writer.writeUInt64LE(this.networkFee); - writer.writeUInt32LE(this.validUntilBlock ? this.validUntilBlock : 0); + writer.writeUInt32LE(this.validUntilBlock); writer.writeArray(this.signers, (signer) => { signer.serializeWireBase(writer); }); 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..3334622b3e --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/helper.ts @@ -0,0 +1,19 @@ +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, + 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 17c59281c2..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,3 +1,5 @@ export * from './attribute'; +export * from './FeelessTransactionModel'; export * from './TransactionModel'; export * from './TransactionStateModel'; +export { helper as transactionHelper } from './helper'; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 6549e6afa5..3ee5dbf8b7 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,4 +1,4 @@ -import { JSONObject } from '@neo-one/utils'; +import { JSONArray, JSONObject } from '@neo-one/utils'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; @@ -257,7 +257,7 @@ export interface TransactionJSON { readonly size: number; readonly version: number; readonly nonce: number; - readonly sender: string; + readonly sender?: string; readonly sysfee: string; readonly netfee: string; readonly validuntilblock: number; @@ -269,6 +269,7 @@ export interface TransactionJSON { readonly data?: TransactionReceiptJSON; } +// TODO: not going to use this right now because still copying C# code export interface TransactionWithInvocationDataJSON extends TransactionJSON { // TODO: this may be off slightly. Not sure where script and gas belong. They may belong in TransactionJSON readonly script: string; @@ -376,7 +377,7 @@ export interface ConsensusDataJSON { export interface HeaderJSON extends BlockBaseJSON {} export interface BlockJSON extends BlockBaseJSON { - readonly tx: readonly TransactionWithInvocationDataJSON[]; + readonly tx: readonly TransactionJSON[]; readonly consensusdata?: ConsensusDataJSON; } @@ -389,9 +390,16 @@ export interface NetworkSettingsJSON { readonly issueGASFee: string; } +// export interface CallReceiptJSON { +// readonly result: InvocationResultJSON; +// readonly actions: readonly ActionJSON[]; +// } + export interface CallReceiptJSON { - readonly result: InvocationResultJSON; - readonly actions: readonly ActionJSON[]; + readonly script: string; + readonly state: keyof typeof VMState; + readonly gasConsumed: string; + readonly stack: JSONArray | string; } export interface VerifyScriptResultJSON { diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 23de4c5bf5..e7c8804d65 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -1,5 +1,6 @@ import { createHash } from 'crypto'; import _ from 'lodash'; +import { InvalidFormatError } from '../common'; import { InvalidSysCallError, InvalidVMByteCodeError, InvalidVMStateError } from '../errors'; export enum Op { @@ -309,6 +310,7 @@ export const getSysCallHash = (sysCall: SysCallName) => { return maybeHash; }; +// TODO: probably good to drop the implementation in node-core and just use this one export enum VMState { NONE = 0x00, HALT = 0x01, @@ -316,6 +318,8 @@ export enum VMState { 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; @@ -327,6 +331,19 @@ 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(); diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index daea0d49bd..a636c6a802 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -253,11 +253,6 @@ export interface Header { * TODO: document */ export interface ConsensusData { - /** - * `ConsensusData` hash. - * TODO: should this be optional or no? - */ - readonly hash: Hash256String; /** * TODO: add description */ @@ -421,7 +416,7 @@ export interface Transfer { * may want to just change this to "NEO" | "GAS". Or, more likely, it can represent any "asset" * created by any NEP5 contract */ - readonly asset: Hash256String; + readonly asset: AddressString; /** * Destination address. */ @@ -1766,9 +1761,9 @@ export interface ContractParameterDefinition { * 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. - */ + // /** + // * The name of the contract parameter. + // */ readonly name: string; } diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index 7076ca4783..a8052524b0 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -410,13 +410,11 @@ 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; 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..bd9832d344 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/temp.test.ts @@ -0,0 +1,52 @@ +import { common } from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; +import { Client } from '../Client'; +import { NEOONEProvider } from '../provider'; +import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../user'; + +describe('quick testing', () => { + 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: '127.0.0.1:8080/rpc', + }, + ]), + }); + }; + + const setupClient = async () => { + const accountProvider = await createUserAccountProvider(); + + return new Client({ local: accountProvider }); + }; + + test('start', async () => { + const client = await setupClient(); + const account = client.getCurrentUserAccount(); + if (account === undefined) { + throw new Error('for ts'); + } + + const result = await client.__call('test', common.uInt160ToString(common.nativeHashes.GAS), 'balanceOf', [ + account.id.address, + ]); + + console.log(result); + }); +}); diff --git a/packages/neo-one-client-core/src/args.ts b/packages/neo-one-client-core/src/args.ts index 9a73e8857b..99d03a13ee 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -956,7 +956,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', assertAddress), to: assertProperty(value, 'Transfer', 'to', assertAddress), }; }; diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 471919b69c..738d6a0e55 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -102,24 +102,6 @@ export class JSONRPCClient { ); } - public async relayStrippedTransaction(verificationTransaction: BufferString, relayTransaction: BufferString) { - return this.withInstance(async (provider) => - provider - .request({ - method: 'relaystrippedtransaction', - params: [verificationTransaction, relayTransaction], - }) - .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 sendRawTransaction(value: BufferString): Promise { return this.withInstance(async (provider) => provider diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index c5d948b144..4694745130 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -28,6 +28,7 @@ import { ContractPermissionDescriptorJSON, ContractPermissionJSON, DeveloperProvider, + FeelessTransactionModel, GetOptions, Hash256String, InvocationDataJSON, @@ -148,7 +149,7 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } - public async testInvoke(transaction: TransactionModel): Promise { + public async testInvoke(transaction: FeelessTransactionModel): Promise { const receipt = await this.mutableClient.testInvocation(transaction.serializeWire().toString('hex')); return convertCallReceipt(receipt); @@ -220,8 +221,7 @@ export class NEOONEDataProvider implements DeveloperProvider { method: string, params: ReadonlyArray, ): Promise { - const testTransaction = new TransactionModel({ - systemFee: utils.ZERO, // TODO: need to get the systemFee? + const testTransaction = new FeelessTransactionModel({ script: clientUtils.getInvokeMethodScript({ address: contract, method, @@ -280,6 +280,7 @@ export class NEOONEDataProvider implements DeveloperProvider { }; } + // TODO: implement this; private convertBlock(block: BlockJSON): Block { return { version: block.version, @@ -288,7 +289,7 @@ export class NEOONEDataProvider implements DeveloperProvider { merkleRoot: block.merkleroot, time: new BigNumber(block.time), consensusData: - block.consensusdata === undefined // TODO: check + block.consensusdata === undefined ? undefined : { primaryIndex: block.consensusdata.primary, @@ -307,7 +308,7 @@ export class NEOONEDataProvider implements DeveloperProvider { return { version: transaction.version, nonce: transaction.nonce, - sender: scriptHashToAddress(transaction.sender), + sender: transaction.sender ? scriptHashToAddress(transaction.sender) : undefined, hash: transaction.hash, size: transaction.size, validUntilBlock: transaction.validuntilblock, @@ -433,7 +434,7 @@ export class NEOONEDataProvider implements DeveloperProvider { ? '*' : descriptor.isGroup ? common.stringToECPoint(descriptor.hashOrGroup) - : common.stringToUInt160(descriptor.hashOrGroup); // TODO: check + : common.stringToUInt160(descriptor.hashOrGroup); return { hashOrGroup, diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index 8ca89c831b..2e7b3e18c8 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -1,6 +1,7 @@ import { AddressString, Block, + FeelessTransactionModel, GetOptions, Hash256String, IterOptions, @@ -75,7 +76,7 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).getInvocationData(hash); } - public async testInvoke(network: NetworkType, transaction: TransactionModel): Promise { + public async testInvoke(network: NetworkType, transaction: FeelessTransactionModel): Promise { return this.getProvider(network).testInvoke(transaction); } diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index f37b9f724b..983a17ef72 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -235,61 +235,57 @@ export class LocalUserAccountProvider; - readonly paramsZipped: ReadonlyArray; - readonly from: UserAccountID; - readonly sourceMaps?: SourceMaps; - }): Promise { - const script = new ScriptBuilder() - .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ - addressToScriptHash(contract), - common.GAS_CONTRACT_SCRIPT_HASH, - unclaimedAmount.toString(), - ]) - .build(); - - const { gas } = await this.getSystemFee({ from, script, attributes }); - - const transaction = new TransactionModel({ - systemFee: utils.bigNumberToBN(gas, 8), - // Since the contract address is an input, we must add a witness for it. - witnesses: this.getInvokeScripts(method, params, true), - script, - }); - - return this.sendTransaction({ - from, - transaction, - onConfirm: async ({ receipt }) => receipt, - sourceMaps, - }); - } + // protected async executeInvokeClaim({ + // contract, + // unclaimedAmount, + // attributes, + // method, + // params, + // paramsZipped, + // from, + // sourceMaps, + // }: { + // readonly contract: AddressString; + // readonly unclaimedAmount: BigNumber; + // readonly attributes: readonly Attribute[]; + // readonly method: string; + // readonly params: ReadonlyArray; + // readonly paramsZipped: ReadonlyArray; + // readonly from: UserAccountID; + // readonly sourceMaps?: SourceMaps; + // }): Promise { + // const builder = new ScriptBuilder(); + // builder.emitSysCall() + // .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ + // addressToScriptHash(contract), + // common.GAS_CONTRACT_SCRIPT_HASH, + // unclaimedAmount.toString(), + // ]) + // .build(); + + // const { gas } = await this.getSystemFee({ from, script, attributes }); + + // const transaction = new TransactionModel({ + // systemFee: utils.bigNumberToBN(gas, 8), + // // Since the contract address is an input, we must add a witness for it. + // witnesses: this.getInvokeScripts(method, params, true), + // script, + // }); + + // return this.sendTransaction({ + // from, + // transaction, + // onConfirm: async ({ receipt }) => receipt, + // sourceMaps, + // }); + // } protected async executeTransfer( - // TODO: how to represent transfer objects now? transfers: readonly Transfer[], from: UserAccountID, attributes: readonly Attribute[], networkFee: BigNumber, ): Promise { - if (this.keystore.byteLimit === undefined) { - throw new NothingToTransferError(); - } - // TODO: need to rebuild transfer script const sb = new ScriptBuilder(); transfers.forEach((transfer) => { sb.emitSysCall( @@ -301,7 +297,6 @@ export class LocalUserAccountProvider { - const unclaimedAmount = await this.provider.getUnclaimed(from.network, from.address); - if (unclaimedAmount.eq(new BigNumber('0'))) { - throw new NothingToClaimError(from); - } - + protected async executeClaim(from: UserAccountID, networkFee: BigNumber): Promise { + const toAccount = this.getUserAccount(from); + const toHash = crypto.toScriptHash(crypto.createSignatureRedeemScript(common.stringToECPoint(toAccount.publicKey))); const script = new ScriptBuilder() .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ addressToScriptHash(from.address), diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index f46ca07a0c..b0b0d4d98f 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -5,6 +5,8 @@ import { AttributeModel, Block, common, + crypto, + FeelessTransactionModel, ForwardValue, GetOptions, Hash256String, @@ -89,16 +91,16 @@ export interface ExecuteInvokeMethodOptions extend readonly invokeMethodOptions: InvokeMethodOptions; } -export interface ExecuteInvokeClaimOptions { - readonly contract: AddressString; - readonly unclaimedAmount: BigNumber; - readonly attributes: readonly Attribute[]; - readonly method: string; - readonly params: ReadonlyArray; - readonly paramsZipped: ReadonlyArray; - readonly from: UserAccountID; - readonly sourceMaps?: SourceMaps; -} +// export interface ExecuteInvokeClaimOptions { +// readonly contract: AddressString; +// readonly unclaimedAmount: BigNumber; +// readonly attributes: readonly Attribute[]; +// readonly method: string; +// readonly params: ReadonlyArray; +// readonly paramsZipped: ReadonlyArray; +// readonly from: UserAccountID; +// readonly sourceMaps?: SourceMaps; +// } export interface Provider { readonly networks$: Observable; @@ -110,7 +112,7 @@ export interface Provider { options?: GetOptions, ) => Promise; readonly getInvocationData: (network: NetworkType, hash: Hash256String) => Promise; - readonly testInvoke: (network: NetworkType, transaction: TransactionModel) => Promise; + readonly testInvoke: (network: NetworkType, transaction: FeelessTransactionModel) => Promise; readonly call: ( network: NetworkType, contract: AddressString, @@ -183,9 +185,9 @@ export abstract class UserAccountProviderBase { } public async claim(options?: TransactionOptions): Promise { - const { from, attributes, networkFee } = this.getTransactionOptions(options); + const { from, networkFee } = this.getTransactionOptions(options); - return this.capture(async () => this.executeClaim(from, attributes, networkFee), { + return this.capture(async () => this.executeClaim(from, networkFee), { name: 'neo_claim', }); } @@ -451,17 +453,65 @@ export abstract class UserAccountProviderBase { return this.provider.call(network, contract, method, params); } + public async checkSystemFees({ + script, + from, + systemFee, + attributes = [], + witnesses = [], + sourceMaps, + }: { + readonly script: Buffer; + readonly transfers?: ReadonlyArray; + readonly from: UserAccountID; + readonly networkFee: BigNumber; + readonly systemFee: BigNumber; + readonly attributes?: ReadonlyArray; + readonly witnesses?: ReadonlyArray; + readonly sourceMaps?: SourceMaps; + }): Promise<{ + readonly gas: BigNumber; + readonly attributes: ReadonlyArray; + }> { + const testTransaction = new TransactionModel({ + systemFee: common.TEN_THOUSAND_FIXED8, + attributes: this.convertAttributes(attributes), + networkFee: common.TEN_THOUSAND_FIXED8, + script, + witnesses, + }); + + const callReceipt = await this.provider.testInvoke(from.network, testTransaction); + 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 getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { - const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER } = options; + const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER, from } = options; - const { from: fromIn } = options; - let from = fromIn; + let accounts: readonly AddressString[] = []; if (from === undefined) { const fromAccount = this.getCurrentUserAccount(); if (fromAccount === undefined) { - throw new NoAccountError(); + accounts = this.getUserAccounts().map((account) => + common.uInt160ToString( + crypto.addressToScriptHash({ addressVersion: common.NEO_ADDRESS_VERSION, address: account.id.address }), + ), + ); } - from = fromAccount.id; } return { @@ -599,10 +649,8 @@ export abstract class UserAccountProviderBase { readonly gas: BigNumber; readonly attributes: ReadonlyArray; }> { - const testTransaction = new TransactionModel({ - systemFee: common.TEN_THOUSAND_FIXED8, + const testTransaction = new FeelessTransactionModel({ attributes: this.convertAttributes(attributes), - networkFee: common.TEN_THOUSAND_FIXED8, script, witnesses, }); @@ -621,52 +669,6 @@ export abstract class UserAccountProviderBase { return { gas, attributes }; } - protected async checkSystemFees({ - script, - from, - systemFee, - attributes = [], - witnesses = [], - sourceMaps, - }: { - readonly script: Buffer; - readonly transfers?: ReadonlyArray; - readonly from: UserAccountID; - readonly networkFee: BigNumber; - readonly systemFee: BigNumber; - readonly attributes?: ReadonlyArray; - readonly witnesses?: ReadonlyArray; - readonly sourceMaps?: SourceMaps; - }): Promise<{ - readonly gas: BigNumber; - readonly attributes: ReadonlyArray; - }> { - const testTransaction = new TransactionModel({ - systemFee: common.TEN_THOUSAND_FIXED8, - attributes: this.convertAttributes(attributes), - networkFee: common.TEN_THOUSAND_FIXED8, - script, - witnesses, - }); - - const callReceipt = await this.provider.testInvoke(from.network, testTransaction); - 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>; @@ -675,7 +677,7 @@ export abstract class UserAccountProviderBase { options: ExecuteInvokeScriptOptions, ): Promise>; - protected abstract async executeInvokeClaim(options: ExecuteInvokeClaimOptions): Promise; + // protected abstract async executeInvokeClaim(options: ExecuteInvokeClaimOptions): Promise; protected abstract async executeTransfer( transfers: readonly Transfer[], @@ -684,11 +686,7 @@ export abstract class UserAccountProviderBase { networkFee: BigNumber, ): Promise; - protected abstract async executeClaim( - from: UserAccountID, - attributes: readonly Attribute[], - networkFee: BigNumber, - ): Promise; + protected abstract async executeClaim(from: UserAccountID, networkFee: BigNumber): Promise; protected async invokeRaw({ invokeMethodOptionsOrScript, diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 4461e59af8..27873e43e0 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,21 +1,30 @@ -import { UInt256 } from '@neo-one/client-common'; +import { common, UInt256, VerifyResultModel } from '@neo-one/client-common'; import { Block, Blockchain as BlockchainType, BlockchainSettings, CallReceipt, + ConsensusPayload, DeserializeWireContext, Header, + Mempool, NativeContainer, + RunEngineOptions, + Signers, Storage, + Transaction, + TransactionVerificationContext, TriggerType, + VerifyConsensusPayloadOptions, + VerifyOptions, VM, + Witness, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; import { flatMap, map, toArray } from 'rxjs/operators'; -import { BlockVerifyError, GenesisBlockNotRegisteredError } from './errors'; +import { BlockVerifyError, ConsensusPayloadVerifyError, GenesisBlockNotRegisteredError } from './errors'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; @@ -176,6 +185,25 @@ export class Blockchain { return this.mutablePersistingBlocks; } + public get verifyOptions(): VerifyOptions { + return { + vm: this.vm, + storage: this.storage, + native: this.native, + verifyWitnesses: this.verifyWitnesses, + }; + } + + public get verifyConsensusPayloadOptions(): VerifyConsensusPayloadOptions { + return { + vm: this.vm, + storage: this.storage, + native: this.native, + verifyWitnesses: this.verifyWitnesses, + height: this.currentBlockIndex, + }; + } + public get blocks() { return this.storage.blocks; } @@ -208,6 +236,12 @@ export class Blockchain { return this.storage.contractID; } + public get serializeJSONContext() { + return { + addressVersion: this.settings.addressVersion, + }; + } + public async stop(): Promise { if (!this.mutableRunning) { return; @@ -240,12 +274,104 @@ export class Blockchain { } public async verifyBlock(block: Block): Promise { - const verification = await block.verify(this.vm, this.storage, this.verifyWitnesses); + 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 hash = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : hashOrIndex; + if (hash === undefined) { + return undefined; + } + + if (this.currentBlock.hash.equals(hash)) { + return this.currentBlock; + } + + if (this.previousBlock?.hash.equals(hash)) { + return this.previousBlock; + } + + // TODO: this should really just take a hash, and then the rpc handler can call `blockchain.getBlockHash` if its an index. + const trimmedBlock = await this.blocks.tryGet({ hashOrIndex: hash }); + if (trimmedBlock === undefined) { + return undefined; + } + + if (!trimmedBlock.isBlock) { + return undefined; + } + + return trimmedBlock.getBlock(this.transactions); + } + + public getBlockHash(index: number): UInt256 | undefined { + if (this.headerIndex.length <= index) { + return undefined; + } + + return this.headerIndex[index]; + } + + public async getHeader(hashOrIndex: UInt256 | number): Promise
{ + const hash = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : hashOrIndex; + 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 persistBlock({ block, verify = false, @@ -273,10 +399,13 @@ export class Blockchain { }); } - public invokeScript(script: Buffer): CallReceipt { - const transaction = { script }; - - return this.invokeTransaction(transaction, 100); + public invokeScript(script: Buffer, signers?: Signers): CallReceipt { + return this.runEngineWrapper({ + script, + snapshot: 'main', + container: signers === undefined ? undefined : { type: 'Signers', buffer: signers.serializeWire() }, + gas: 10, + }); } public invokeTransaction( @@ -287,7 +416,7 @@ export class Blockchain { { trigger: TriggerType.Application, gas, - // container: transaction, TODO: implement this + // container: transaction, //TODO: implement this snapshot: 'main', testMode: true, }, @@ -299,6 +428,53 @@ export class Blockchain { ); } + private runEngineWrapper({ + script, + snapshot, + container, + persistingBlock, + offset = 0, + testMode = false, + gas = 0, + }: 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()); + } + + return this.vm.withApplicationEngine( + { + trigger: TriggerType.Application, + container, + snapshot, + gas, + testMode, + }, + (engine) => { + engine.loadScript(script); + engine.setInstructionPointer(offset); + engine.execute(); + + return utils.getCallReceipt(engine); + }, + ); + }); + } + + private async containsTransaction(hash: UInt256, mempool: Mempool) { + const hashHex = common.uInt256ToHex(hash); + if (mempool[hashHex] !== undefined) { + return true; + } + + const state = await this.transactions.tryGet(hash); + + return state !== undefined; + } + private async persistBlocksAsync(): Promise { if (this.mutablePersistingBlocks || !this.mutableRunning) { return; @@ -419,4 +595,20 @@ export class Blockchain { vm: this.vm, }); } + + private createDummyBlock(): Block { + return new Block({ + version: 0, + previousHash: this.currentBlock.hash, + merkleRoot: common.ZERO_UINT256, + 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([]), + }), + transactions: [], + }); + } } diff --git a/packages/neo-one-node-blockchain/src/errors.ts b/packages/neo-one-node-blockchain/src/errors.ts index 97bafd123d..8af5b1b947 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -20,6 +20,10 @@ 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', diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index aa154d0515..f0a05b7fdd 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -1,8 +1,30 @@ -import { ScriptBuilder } from '@neo-one/client-common'; -import { ApplicationEngine, NativeHashes, Transaction, utils as coreUtils } from '@neo-one/node-core'; +import { + common, + Contract, + crypto, + InvalidFormatError, + IOHelper, + Op, + ScriptBuilder, + UInt160, + VMState, +} from '@neo-one/client-common'; +import { + ApplicationEngine, + BlockchainStorage, + CallFlags, + ECDsaVerifyPrice, + getOpCodePrice, + Transaction, + TriggerType, + utils as coreUtils, + VM, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { ScriptVerifyError } from './errors'; const getOnPersistNativeContractScript = coreUtils.lazy(() => { - const hashes = [NativeHashes.GAS, NativeHashes.NEO]; + const hashes = [common.nativeHashes.GAS, common.nativeHashes.NEO]; const script = new ScriptBuilder(); hashes.forEach((hash) => { script.emitAppCall(hash, 'onPersist'); @@ -23,9 +45,134 @@ const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transac // notifications: engine.notifications, }); +const getCallReceipt = (engine: ApplicationEngine) => ({ + state: engine.state, + gasConsumed: engine.gasConsumed, + stack: engine.resultStack, + // notifications: engine.notifications, +}); + +export interface TempWalletAccount { + readonly contract?: Contract; +} + +export type GetAccount = (hash: UInt160) => TempWalletAccount | undefined; + +export const getCalculateNetworkFee = ( + vm: VM, + storage: BlockchainStorage, + getAccount: GetAccount, + feePerByte: number, +) => async (transaction: Transaction) => { + const hashes = transaction.getScriptHashesForVerifying(); + // TODO: verify this size matches up across environments + const initSize = + Transaction.headerSize + + IOHelper.sizeOfArray(transaction.signers, (signer) => signer.size) + + IOHelper.sizeOfArray(transaction.attributes, (attr) => attr.size) + + IOHelper.sizeOfVarBytesLE(transaction.script) + + IOHelper.sizeOfVarUIntLE(hashes.length); + + const { fee, size } = await hashes.reduce(async (acc, hash) => { + const { fee: prevFee, size: prevSize } = await acc; + const { fee: nextFee, size: nextSize } = await verifyContract(hash, getAccount, storage, vm, transaction); + + return { fee: prevFee.add(nextFee), size: prevSize + nextSize }; + }, Promise.resolve({ fee: new BN(0), size: 0 })); + + return fee.addn(feePerByte * (size + initSize)); +}; + +const verifyContract = async ( + hash: UInt160, + getAccount: GetAccount, + storage: BlockchainStorage, + vm: VM, + transaction: Transaction, +) => { + const witnessScriptHex = getAccount(hash)?.contract?.script; + const witnessScript = witnessScriptHex ? Buffer.from(witnessScriptHex, 'hex') : undefined; + if (witnessScript === undefined) { + const contract = await storage.contracts.tryGet(hash); + if (contract === undefined) { + return { fee: coreUtils.ZERO, size: 0 }; + } + + 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: 0, + testMode: true, + }, + (engine) => { + engine.loadScript(contract.script, CallFlags.None); + engine.setInstructionPointer(verify.offset); + if (init !== undefined) { + engine.setInstructionPointer(init.offset); + } + + engine.loadScript(Buffer.from([]), 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; + }, + ); + + // TODO: once again need to verify decimal places on return types + return { fee: common.fixed8FromDecimal(gas.toString()), size: IOHelper.sizeOfUInt8 * 2 }; + } + if (crypto.isSignatureContract(witnessScript)) { + const sigSize = IOHelper.sizeOfVarBytesLE(witnessScript) + 67; + const sigFee = getOpCodePrice(Op.PUSHDATA1).muln(2).add(getOpCodePrice(Op.PUSHNULL)).add(ECDsaVerifyPrice); + + return { fee: sigFee, size: sigSize }; + } + 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).muln(m); + const mBuilder = new ScriptBuilder(); + const mScript = mBuilder.emitPushInt(m).build(); + const mFee = getOpCodePrice(mScript[0]).add(initMFee); + + const initNFee = getOpCodePrice(Op.PUSHDATA1).muln(n); + const nBuilder = new ScriptBuilder(); + const nScript = nBuilder.emitPushInt(n).build(); + const nFee = getOpCodePrice(nScript[0]).add(initNFee); + + const totalFee = getOpCodePrice(Op.PUSHNULL).add(ECDsaVerifyPrice.muln(n)).add(mFee).add(nFee); + + return { fee: totalFee, size: sizeMulti }; + } + + return { fee: coreUtils.ZERO, size: 0 }; +}; + export const utils = { ...coreUtils, hashListBatchSize, getApplicationExecuted, + getCallReceipt, getOnPersistNativeContractScript, + verifyContract, + getCalculateNetworkFee, }; diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index d729e41ec7..de22c67a88 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -1,12 +1,13 @@ -import { common, UInt160 } from '@neo-one/client-common'; +import { common, UInt160, VMState } from '@neo-one/client-common'; import { BlockchainStorage, CallFlags, ContractMethodDescriptor, + ExecuteScriptResult, + NativeContainer, SerializableWire, TriggerType, Verifiable, - VerifyResult, VM, } from '@neo-one/node-core'; import { ContractMethodError, ContractStateFetchError, WitnessVerifyError } from './errors'; @@ -61,19 +62,19 @@ export const verifyWithApplicationEngine = ( gas: number, offset: number, init?: ContractMethodDescriptor, -): VerifyResult => +): ExecuteScriptResult => vm.withApplicationEngine( { trigger: TriggerType.Verification, container: verifiable, snapshot: 'main', gas, testMode: true }, (engine) => { engine.loadScript(verification, CallFlags.None); - engine.loadClonedContext(offset); + engine.setInstructionPointer(offset); if (init !== undefined) { - engine.loadClonedContext(init.offset); + engine.setInstructionPointer(init.offset); } engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); const state = engine.execute(); - if (state === 'FAULT') { + if (state === VMState.FAULT) { return { result: false, gas }; } @@ -93,7 +94,7 @@ export const tryVerifyHash = async ( storage: BlockchainStorage, verifiable: Verifiable & SerializableWire, gas: number, -): Promise => { +): Promise => { const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; try { const { verification, offset, init } = await getApplicationEngineVerifyOptions( @@ -113,6 +114,7 @@ export const verifyWitnesses = async ( vm: VM, verifiable: Verifiable & SerializableWire, storage: BlockchainStorage, + native: NativeContainer, gasIn: number, ): Promise => { if (gasIn < 0) { @@ -123,7 +125,7 @@ export const verifyWitnesses = async ( let hashes: readonly UInt160[]; try { - hashes = await verifiable.getScriptHashesForVerifying(storage); + hashes = await verifiable.getScriptHashesForVerifying({ storage, native }); } catch { return false; } @@ -134,21 +136,24 @@ export const verifyWitnesses = async ( 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) { + .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: Promise.resolve({ result: false, gas: newGas }), - previous: false, + next: tryVerifyHash(vm, hash, index, storage, verifiable, newGas), + previous: accPrevious && result, }; - } - - 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 })); + }, + Promise.resolve({ next: tryVerifyHash(vm, hashes[0], 0, storage, verifiable, gas), previous: true }), + ); const { result: finalResult } = await next; diff --git a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts index 51fe294852..a5ca3f7110 100644 --- a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts +++ b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts @@ -1,14 +1,15 @@ +import { VMState } from '@neo-one/client-common'; import { ApplicationEngine, CallReceipt } from '@neo-one/node-core'; -// TODO: we might need to visit this again if we implement error handling in the VM +// TODO: implement the notification grabbing export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallReceipt => { const result = applicationEngine.execute(); - if (result === 'HALT') { + if (result === VMState.HALT) { return { - state: 'HALT', + state: result, gasConsumed: applicationEngine.gasConsumed, stack: applicationEngine.resultStack, - notifications: applicationEngine.notifications, + // notifications: applicationEngine.notifications, }; } @@ -16,6 +17,6 @@ export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallRe state: result, gasConsumed: applicationEngine.gasConsumed, stack: applicationEngine.resultStack, - notifications: [], + // notifications: [], }; }; diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index ef49b29eac..0a7162073a 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -18,7 +18,8 @@ "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", - "rxjs": "^6.5.3" + "rxjs": "^6.5.3", + "through": "^2.3.8" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-node-core/src/Block.ts b/packages/neo-one-node-core/src/Block.ts index ec41729e6c..b16b457536 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -204,8 +204,7 @@ export class Block extends BlockBase implements SerializableWire, SerializableJS return { ...blockBaseJSON, consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, - tx: this.transactions.map((transaction) => transaction.serializeJSON(context)), - // confirmations: blockBaseJSON.confirmations, TODO: is this our own property? + tx: this.transactions.map((transaction) => transaction.serializeJSON()), }; } diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index e67f2dcf73..7ca043cae0 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -18,8 +18,7 @@ import { UnsignedBlockError } from './errors'; import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; import { BlockchainStorage } from './Storage'; import { utils } from './utils'; -import { Verifiable, VerifyWitnesses } from './Verifiable'; -import { VM } from './vm'; +import { Verifiable, VerifyOptions } from './Verifiable'; import { Witness } from './Witness'; export interface BlockBaseAdd { @@ -81,20 +80,22 @@ export abstract class BlockBase implements EquatableKey, SerializableWire, Verif public readonly timestamp: BN; public readonly index: number; public readonly nextConsensus: UInt160; - public readonly getScriptHashesForVerifying = utils.lazyAsync(async ({ blocks }: BlockchainStorage) => { - if (this.previousHash === common.ZERO_UINT256) { - return [this.witness.scriptHash]; - } - - const prevBlock = await 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 [prevHeader.nextConsensus]; - }); + public readonly getScriptHashesForVerifying = utils.lazyAsync( + async (context: { readonly storage: BlockchainStorage }) => { + if (this.previousHash === common.ZERO_UINT256) { + return [this.witness.scriptHash]; + } + + 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 [prevHeader.nextConsensus]; + }, + ); // 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), @@ -197,12 +198,12 @@ export abstract class BlockBase implements EquatableKey, SerializableWire, Verif scriptHash: this.nextConsensus, }), - witnesses: [this.witness.serializeJSON(context)], + witnesses: [this.witness.serializeJSON()], // confirmations: [] TODO: this is a property we used to use, do we still need? }; } - public async verify(vm: VM, storage: BlockchainStorage, verifyWitnesses: VerifyWitnesses) { + 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) { @@ -217,7 +218,7 @@ export abstract class BlockBase implements EquatableKey, SerializableWire, Verif return false; } - return verifyWitnesses(vm, this, storage, 1); + return verifyWitnesses(vm, this, storage, native, 1); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 70c0653421..eeeb823b55 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -1,20 +1,25 @@ +import { UInt256, VerifyResultModel } from '@neo-one/client-common'; import { Observable } from 'rxjs'; import { Block } from './Block'; import { Header } from './Header'; +import { ConsensusPayload } from './payload'; import { DeserializeWireContext, SerializeJSONContext } from './Serializable'; import { BlockchainSettings } from './Settings'; +import { Signers } from './Signers'; import { BlockchainStorage } from './Storage'; import { Transaction } from './transaction'; -import { VerifyWitnesses } from './Verifiable'; +import { TransactionVerificationContext } from './TransactionVerificationContext'; +import { VerifyOptions, VerifyWitnesses } from './Verifiable'; +import { CallReceipt } from './vm'; -// tslint:disable-next-line: no-any TODO: implement something here -type CallReceipt = any; +export interface Mempool { + readonly [k: string]: Transaction | undefined; +} export interface Blockchain extends BlockchainStorage { readonly settings: BlockchainSettings; readonly deserializeWireContext: DeserializeWireContext; - // readonly serializeJSONContext: SerializeJSONContext; - // readonly feeContext: FeeContext; + readonly serializeJSONContext: SerializeJSONContext; readonly currentBlock: Block; readonly previousBlock: Block | undefined; @@ -22,17 +27,25 @@ export interface Blockchain extends BlockchainStorage { readonly currentBlockIndex: number; readonly block$: Observable; readonly isPersistingBlock: boolean; + readonly verifyOptions: VerifyOptions; readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; - // readonly persistHeaders: (headers: readonly Header[]) => Promise; readonly verifyWitnesses: VerifyWitnesses; + readonly verifyBlock: (block: Block) => Promise; + readonly verifyTransaction: ( + transaction: Transaction, + mempool: Mempool, + context?: TransactionVerificationContext, + ) => Promise; + readonly verifyConsensusPayload: (payload: ConsensusPayload) => Promise; + + readonly getBlock: (hashOrIndex: UInt256 | number) => Promise; + readonly getHeader: (hashOrIndex: UInt256 | number) => Promise
; + readonly getBlockHash: (index: number) => UInt256 | undefined; + readonly getNextBlockHash: (hash: UInt256) => Promise; - readonly invokeScript: (script: Buffer) => CallReceipt; - readonly invokeTransaction: ( - transaction: TTransaction, - gas: number, - ) => CallReceipt; + readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; // readonly updateSettings: (settings: BlockchainSettings) => void; readonly stop: () => Promise; diff --git a/packages/neo-one-node-core/src/ContractState.ts b/packages/neo-one-node-core/src/ContractState.ts index d3d44e13a1..fad174ad4d 100644 --- a/packages/neo-one-node-core/src/ContractState.ts +++ b/packages/neo-one-node-core/src/ContractState.ts @@ -1,4 +1,4 @@ -import { common, createSerializeWire, crypto, IOHelper, UInt160 } from '@neo-one/client-common'; +import { common, createSerializeWire, crypto, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; import { ContractStateModel } from '@neo-one/client-full-common'; import { ContractManifest } from './manifest'; import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; @@ -55,4 +55,13 @@ export class ContractState extends ContractStateModel { manifest: this.manifest, }); } + + public serializeJSON() { + return { + id: this.id, + hash: JSONHelper.writeUInt160(this.scriptHash), + script: JSONHelper.writeBuffer(this.script), + manifest: this.manifest.serializeJSON(), + }; + } } diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index 67af61e079..f20b29122b 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper } from '@neo-one/client-common'; +import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper, UInt256Hex } from '@neo-one/client-common'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { DeserializeWireBaseOptions, @@ -63,4 +63,17 @@ export class Header extends BlockBase implements SerializableWire, SerializableJ 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/Native.ts b/packages/neo-one-node-core/src/Native.ts index 06557d2355..17c5a002a7 100644 --- a/packages/neo-one-node-core/src/Native.ts +++ b/packages/neo-one-node-core/src/Native.ts @@ -16,6 +16,9 @@ export interface NativeContract { export interface NEP5NativeContract extends NativeContract { readonly symbol: string; readonly decimals: number; + + readonly totalSupply: (storage: NativeContractStorageContext) => Promise; + readonly balanceOf: (storage: NativeContractStorageContext, account: UInt160) => Promise; } export interface GASContract extends NEP5NativeContract {} @@ -51,9 +54,3 @@ export interface NativeContainer { readonly NEO: NEOContract; readonly Policy: PolicyContract; } - -export const NativeHashes = { - GAS: common.hexToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), - NEO: common.hexToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), - Policy: common.hexToUInt160('e9ff4ca7cc252e1dfddb26315869cd79505906ce'), -}; diff --git a/packages/neo-one-node-core/src/Node.ts b/packages/neo-one-node-core/src/Node.ts index 686c457778..6adb9a5c93 100644 --- a/packages/neo-one-node-core/src/Node.ts +++ b/packages/neo-one-node-core/src/Node.ts @@ -1,6 +1,7 @@ +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 { Endpoint } from './network'; import { ConsensusPayload } from './payload'; import { Transaction } from './transaction'; @@ -14,14 +15,15 @@ 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: string; + readonly nonce: number; readonly useragent: string; } diff --git a/packages/neo-one-node-core/src/Prices.ts b/packages/neo-one-node-core/src/Prices.ts new file mode 100644 index 0000000000..613f1346c6 --- /dev/null +++ b/packages/neo-one-node-core/src/Prices.ts @@ -0,0 +1,202 @@ +import { common, Op } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { InvalidOpCodeError } from './errors'; + +export const ECDsaVerifyPrice = common.fixed8FromDecimal('.01'); + +const opCodePrices: Record = { + [Op.PUSHINT8]: new BN(30), + [Op.PUSHINT16]: new BN(30), + [Op.PUSHINT32]: new BN(30), + [Op.PUSHINT64]: new BN(30), + [Op.PUSHINT128]: new BN(120), + [Op.PUSHINT256]: new BN(120), + [Op.PUSHA]: new BN(120), + [Op.PUSHNULL]: new BN(30), + [Op.PUSHDATA1]: new BN(180), + [Op.PUSHDATA2]: new BN(13000), + [Op.PUSHDATA4]: new BN(110000), + [Op.PUSHM1]: new BN(30), + [Op.PUSH0]: new BN(30), + [Op.PUSH1]: new BN(30), + [Op.PUSH2]: new BN(30), + [Op.PUSH3]: new BN(30), + [Op.PUSH4]: new BN(30), + [Op.PUSH5]: new BN(30), + [Op.PUSH6]: new BN(30), + [Op.PUSH7]: new BN(30), + [Op.PUSH8]: new BN(30), + [Op.PUSH9]: new BN(30), + [Op.PUSH10]: new BN(30), + [Op.PUSH11]: new BN(30), + [Op.PUSH12]: new BN(30), + [Op.PUSH13]: new BN(30), + [Op.PUSH14]: new BN(30), + [Op.PUSH15]: new BN(30), + [Op.PUSH16]: new BN(30), + [Op.NOP]: new BN(30), + [Op.JMP]: new BN(70), + [Op.JMP_L]: new BN(70), + [Op.JMPIF]: new BN(70), + [Op.JMPIF_L]: new BN(70), + [Op.JMPIFNOT]: new BN(70), + [Op.JMPIFNOT_L]: new BN(70), + [Op.JMPEQ]: new BN(70), + [Op.JMPEQ_L]: new BN(70), + [Op.JMPNE]: new BN(70), + [Op.JMPNE_L]: new BN(70), + [Op.JMPGT]: new BN(70), + [Op.JMPGT_L]: new BN(70), + [Op.JMPGE]: new BN(70), + [Op.JMPGE_L]: new BN(70), + [Op.JMPLT]: new BN(70), + [Op.JMPLT_L]: new BN(70), + [Op.JMPLE]: new BN(70), + [Op.JMPLE_L]: new BN(70), + [Op.CALL]: new BN(22000), + [Op.CALL_L]: new BN(22000), + [Op.CALLA]: new BN(22000), + [Op.ABORT]: new BN(30), + [Op.ASSERT]: new BN(30), + [Op.THROW]: new BN(22000), + [Op.TRY]: new BN(100), + [Op.TRY_L]: new BN(100), + [Op.ENDTRY]: new BN(100), + [Op.ENDTRY_L]: new BN(100), + [Op.ENDFINALLY]: new BN(100), + [Op.RET]: new BN(0), + [Op.SYSCALL]: new BN(0), + [Op.DEPTH]: new BN(60), + [Op.DROP]: new BN(60), + [Op.NIP]: new BN(60), + [Op.XDROP]: new BN(400), + [Op.CLEAR]: new BN(400), + [Op.DUP]: new BN(60), + [Op.OVER]: new BN(60), + [Op.PICK]: new BN(60), + [Op.TUCK]: new BN(60), + [Op.SWAP]: new BN(60), + [Op.ROT]: new BN(60), + [Op.ROLL]: new BN(400), + [Op.REVERSE3]: new BN(60), + [Op.REVERSE4]: new BN(60), + [Op.REVERSEN]: new BN(400), + [Op.INITSSLOT]: new BN(400), + [Op.INITSLOT]: new BN(800), + [Op.LDSFLD0]: new BN(60), + [Op.LDSFLD1]: new BN(60), + [Op.LDSFLD2]: new BN(60), + [Op.LDSFLD3]: new BN(60), + [Op.LDSFLD4]: new BN(60), + [Op.LDSFLD5]: new BN(60), + [Op.LDSFLD6]: new BN(60), + [Op.LDSFLD]: new BN(60), + [Op.STSFLD0]: new BN(60), + [Op.STSFLD1]: new BN(60), + [Op.STSFLD2]: new BN(60), + [Op.STSFLD3]: new BN(60), + [Op.STSFLD4]: new BN(60), + [Op.STSFLD5]: new BN(60), + [Op.STSFLD6]: new BN(60), + [Op.STSFLD]: new BN(60), + [Op.LDLOC0]: new BN(60), + [Op.LDLOC1]: new BN(60), + [Op.LDLOC2]: new BN(60), + [Op.LDLOC3]: new BN(60), + [Op.LDLOC4]: new BN(60), + [Op.LDLOC5]: new BN(60), + [Op.LDLOC6]: new BN(60), + [Op.LDLOC]: new BN(60), + [Op.STLOC0]: new BN(60), + [Op.STLOC1]: new BN(60), + [Op.STLOC2]: new BN(60), + [Op.STLOC3]: new BN(60), + [Op.STLOC4]: new BN(60), + [Op.STLOC5]: new BN(60), + [Op.STLOC6]: new BN(60), + [Op.STLOC]: new BN(60), + [Op.LDARG0]: new BN(60), + [Op.LDARG1]: new BN(60), + [Op.LDARG2]: new BN(60), + [Op.LDARG3]: new BN(60), + [Op.LDARG4]: new BN(60), + [Op.LDARG5]: new BN(60), + [Op.LDARG6]: new BN(60), + [Op.LDARG]: new BN(60), + [Op.STARG0]: new BN(60), + [Op.STARG1]: new BN(60), + [Op.STARG2]: new BN(60), + [Op.STARG3]: new BN(60), + [Op.STARG4]: new BN(60), + [Op.STARG5]: new BN(60), + [Op.STARG6]: new BN(60), + [Op.STARG]: new BN(60), + [Op.NEWBUFFER]: new BN(80000), + [Op.MEMCPY]: new BN(80000), + [Op.CAT]: new BN(80000), + [Op.SUBSTR]: new BN(80000), + [Op.LEFT]: new BN(80000), + [Op.RIGHT]: new BN(80000), + [Op.INVERT]: new BN(100), + [Op.AND]: new BN(200), + [Op.OR]: new BN(200), + [Op.XOR]: new BN(200), + [Op.EQUAL]: new BN(200), + [Op.NOTEQUAL]: new BN(200), + [Op.SIGN]: new BN(100), + [Op.ABS]: new BN(100), + [Op.NEGATE]: new BN(100), + [Op.INC]: new BN(100), + [Op.DEC]: new BN(100), + [Op.ADD]: new BN(200), + [Op.SUB]: new BN(200), + [Op.MUL]: new BN(300), + [Op.DIV]: new BN(300), + [Op.MOD]: new BN(300), + [Op.SHL]: new BN(300), + [Op.SHR]: new BN(300), + [Op.NOT]: new BN(100), + [Op.BOOLAND]: new BN(200), + [Op.BOOLOR]: new BN(200), + [Op.NZ]: new BN(100), + [Op.NUMEQUAL]: new BN(200), + [Op.NUMNOTEQUAL]: new BN(200), + [Op.LT]: new BN(200), + [Op.LE]: new BN(200), + [Op.GT]: new BN(200), + [Op.GE]: new BN(200), + [Op.MIN]: new BN(200), + [Op.MAX]: new BN(200), + [Op.WITHIN]: new BN(200), + [Op.PACK]: new BN(7000), + [Op.UNPACK]: new BN(7000), + [Op.NEWARRAY0]: new BN(400), + [Op.NEWARRAY]: new BN(15000), + [Op.NEWARRAY_T]: new BN(15000), + [Op.NEWSTRUCT0]: new BN(400), + [Op.NEWSTRUCT]: new BN(15000), + [Op.NEWMAP]: new BN(200), + [Op.SIZE]: new BN(150), + [Op.HASKEY]: new BN(270000), + [Op.KEYS]: new BN(500), + [Op.VALUES]: new BN(7000), + [Op.PICKITEM]: new BN(270000), + [Op.APPEND]: new BN(15000), + [Op.SETITEM]: new BN(270000), + [Op.REVERSEITEMS]: new BN(500), + [Op.REMOVE]: new BN(500), + [Op.CLEARITEMS]: new BN(400), + [Op.ISNULL]: new BN(60), + [Op.ISTYPE]: new BN(60), + [Op.CONVERT]: new BN(80000), +}; + +// tslint:disable-next-line: export-name +export const getOpCodePrice = (value: Op): BN => { + const fee = opCodePrices[value]; + if (fee === undefined) { + throw new InvalidOpCodeError(value); + } + + return fee; +}; diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index 5b5aa30056..2ba510afbb 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -1,4 +1,4 @@ -import { ECPoint, UInt160 } from '@neo-one/client-common'; +// import { ECPoint, UInt160 } from '@neo-one/client-common'; // import { Action } from './action'; // import { Asset } from './Asset'; // import { Contract } from './Contract'; @@ -33,27 +33,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/Signer.ts b/packages/neo-one-node-core/src/Signer.ts index 204cf31610..ef770858cb 100644 --- a/packages/neo-one-node-core/src/Signer.ts +++ b/packages/neo-one-node-core/src/Signer.ts @@ -9,7 +9,7 @@ import { witnessScopeHasFlag, WitnessScopeModel, } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from './Serializable'; +import { DeserializeWireBaseOptions, SerializableJSON } from './Serializable'; import { utils } from './utils'; const hasCustomContracts = (scopes: WitnessScopeModel) => @@ -51,7 +51,7 @@ export class Signer extends SignerModel implements SerializableJSON return this.sizeInternal(); } - public serializeJSON(_context: SerializeJSONContext): SignerJSON { + public serializeJSON(): SignerJSON { return { account: JSONHelper.writeUInt160(this.account), scopes: toJSONWitnessScope(this.scopes), 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..74811ee585 --- /dev/null +++ b/packages/neo-one-node-core/src/Signers.ts @@ -0,0 +1,55 @@ +import { + BinaryWriter, + createSerializeWire, + InvalidFormatError, + JSONHelper, + toWitnessScope, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions } from './Serializable'; +import { Signer } from './Signer'; + +export interface SignersAdd { + readonly signers: readonly Signer[]; +} + +export class Signers { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Signers { + const { reader } = options; + const signers = reader.readArray(() => Signer.deserializeWireBase(options)); + + return new this({ + signers, + }); + } + + // 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 serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly signers: readonly Signer[]; + + public constructor({ signers }: SignersAdd) { + this.signers = signers; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeArray(this.signers, (signer) => signer.serializeWireBase(writer)); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index 60d38e30a8..c4c9afd2e7 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -1,3 +1,5 @@ +import { InvalidFormatError, JSONHelper } from '@neo-one/client-common'; +import { JSONObject } from '@neo-one/utils'; import { InvalidPrimitiveStackItemError, InvalidStackItemError, InvalidStackItemTypeError } from '../errors'; import { ArrayStackItem } from './ArrayStackItem'; import { BooleanStackItem } from './BooleanStackItem'; @@ -121,3 +123,62 @@ export const assertPrimitiveStackItem = (item: any): PrimitiveStackItem => { throw new InvalidPrimitiveStackItemError(); }; + +export const stackItemToJSON = (item: StackItem, context?: Set): JSONObject => { + const type = StackItemType[item.type]; + 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, value: array.array.map((subItem) => stackItemToJSON(subItem, arrayContext)) }; + + case StackItemType.Boolean: + const booleanItem = assertBooleanStackItem(item); + + return { type, value: booleanItem.getBoolean() }; + + case StackItemType.Buffer: + const buffer = assertBufferStackItem(item); + + return { type, value: JSONHelper.writeBuffer(buffer.getBuffer()) }; + + case StackItemType.ByteString: + const byteString = assertByteStringStackItem(item); + + return { type, value: JSONHelper.writeBuffer(byteString.getBuffer()) }; + + case StackItemType.Integer: + const integer = assertIntegerStackItem(item); + + return { type, 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, + value: Array.from(map.dictionary.entries()).map(([key, value]) => ({ + key: stackItemToJSON(key, mapContext), + value: stackItemToJSON(value, mapContext), + })), + }; + + case StackItemType.Pointer: + const pointer = assertPointerStackItem(item); + + return { type, value: pointer.position }; + + default: + throw new InvalidFormatError(`didn't expect stack item of type: ${type} on return`); + } +}; 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..da6c9a1b3a --- /dev/null +++ b/packages/neo-one-node-core/src/TransactionVerificationContext.ts @@ -0,0 +1,8 @@ +import { NativeContractStorageContext } from './Native'; +import { Transaction } from './transaction'; + +export interface TransactionVerificationContext { + readonly addTransaction: (tx: Transaction) => void; + readonly checkTransaction: (tx: Transaction, storage: NativeContractStorageContext) => Promise; + readonly removeTransaction: (tx: Transaction) => void; +} diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts index 0377464960..8967249754 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -1,16 +1,18 @@ import { SerializableWire, UInt160 } from '@neo-one/client-common'; +import { NativeContainer } from './Native'; import { BlockchainStorage } from './Storage'; import { VM } from './vm'; import { Witness } from './Witness'; export interface Verifiable { - readonly getScriptHashesForVerifying: ( - storage: BlockchainStorage, - ) => Promise | readonly UInt160[]; + readonly getScriptHashesForVerifying: (context: { + readonly storage: BlockchainStorage; + readonly native: NativeContainer; + }) => Promise | readonly UInt160[]; readonly witnesses: readonly Witness[]; } -export interface VerifyResult { +export interface ExecuteScriptResult { readonly gas: number; readonly result: boolean; } @@ -19,5 +21,15 @@ export type VerifyWitnesses = ( vm: VM, verifiable: Verifiable & SerializableWire, storage: BlockchainStorage, + native: NativeContainer, gasIn: number, ) => 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 9ff1e6b143..a5b9950cf4 100644 --- a/packages/neo-one-node-core/src/Witness.ts +++ b/packages/neo-one-node-core/src/Witness.ts @@ -1,11 +1,6 @@ import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; import { WITNESS_INVOCATION_SIZE, WITNESS_VERIFICATION_SIZE } from './constants'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from './Serializable'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableJSON } from './Serializable'; import { BinaryReader, utils } from './utils'; export interface WitnessAdd { @@ -45,7 +40,7 @@ export class Witness extends WitnessModel implements SerializableJSON '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 a1561fdb9d..adb22398d2 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -12,14 +12,19 @@ export * from './HashIndexState'; export * from './Header'; export * from './HeaderHashList'; export * from './Native'; +export * from './network'; +export * from './Prices'; +export * from './payload'; export * from './Serializable'; export * from './Settings'; export * from './Signer'; +export * from './Signers'; export * from './Storage'; export * from './StorageItem'; export * from './StorageKey'; export * from './StackItems'; export * from './transaction'; +export * from './TransactionVerificationContext'; export * from './TrimmedBlock'; export * from './utils'; export * from './Verifiable'; diff --git a/packages/neo-one-node-core/src/network/ConnectedPeer.ts b/packages/neo-one-node-core/src/network/ConnectedPeer.ts new file mode 100644 index 0000000000..9d3e85e3e7 --- /dev/null +++ b/packages/neo-one-node-core/src/network/ConnectedPeer.ts @@ -0,0 +1,36 @@ +import { Peer } from './Peer'; +import { Endpoint } from './types'; + +interface ConnectedPeerOptions { + readonly peer: Peer; + readonly data: PeerData; + readonly relay: boolean; +} + +export class ConnectedPeer { + public readonly data: PeerData; + public readonly peer: Peer; + public readonly relay: boolean; + + public constructor(options: ConnectedPeerOptions) { + this.data = options.data; + this.peer = options.peer; + this.relay = options.relay; + } + + public get endpoint(): Endpoint { + return this.peer.endpoint; + } + + public get connected(): boolean { + return this.peer.connected; + } + + public close(): void { + this.peer.close(); + } + + public write(buffer: Buffer): void { + this.peer.write(buffer); + } +} diff --git a/packages/neo-one-node-core/src/network/Network.ts b/packages/neo-one-node-core/src/network/Network.ts new file mode 100644 index 0000000000..6001c7383a --- /dev/null +++ b/packages/neo-one-node-core/src/network/Network.ts @@ -0,0 +1,40 @@ +import { Duplex } from 'stream'; +import { ConnectedPeer } from './ConnectedPeer'; +import { OnNetworkEvent } from './event'; +import { Peer } from './Peer'; +import { Endpoint } from './types'; + +export interface PeerHealthBase { + readonly healthy: boolean; +} + +export interface NegotiateResult { + readonly data: PeerData; + readonly relay: boolean; +} + +export interface Network { + readonly connectedPeers: ReadonlyArray>; + readonly blacklistAndClose: (peer: ConnectedPeer) => void; + readonly start: () => void; + readonly stop: () => void; + readonly relay: (buffer: Buffer) => void; + readonly permanentlyBlacklist: (endpoint: Endpoint) => void; + readonly addEndpoint: (endpoint: Endpoint) => void; +} + +export interface NetworkCreateOptions { + readonly negotiate: (peer: Peer) => Promise>; + readonly checkPeerHealth: ( + connectedPeer: ConnectedPeer, + previousHealth?: PeerHealth, + ) => PeerHealth; + readonly createMessageTransform: () => Duplex; + readonly onMessageReceived: (peer: ConnectedPeer, message: Message) => void; + readonly onRequestEndpoints: () => void; + readonly onEvent?: OnNetworkEvent; +} + +export type CreateNetwork = ( + options: NetworkCreateOptions, +) => Network; diff --git a/packages/neo-one-node-core/src/network/Peer.ts b/packages/neo-one-node-core/src/network/Peer.ts new file mode 100644 index 0000000000..71fac662c9 --- /dev/null +++ b/packages/neo-one-node-core/src/network/Peer.ts @@ -0,0 +1,163 @@ +import { Duplex } from 'stream'; +import through from 'through'; +import { ReceiveMessageTimeoutError } from '../errors'; +import { Endpoint } from './types'; + +export interface PeerOptions { + readonly endpoint: Endpoint; + readonly stream: Duplex; + readonly transform: Duplex; + readonly onError: (peer: Peer, error: Error) => void; + readonly onClose: (peer: Peer) => void; +} + +export abstract class Peer { + public readonly endpoint: Endpoint; + private readonly stream: Duplex; + private readonly transform: Duplex; + private readonly buffer: Duplex; + private mutableConnected: boolean; + private mutableConnecting: boolean; + private mutableClosed: boolean; + private readonly onErrorInternal: (peer: Peer, error: Error) => void; + private readonly onCloseInternal: (peer: Peer) => void; + + public constructor(options: PeerOptions) { + this.endpoint = options.endpoint; + this.mutableConnected = false; + + this.stream = options.stream; + this.transform = options.transform; + this.buffer = through(); + + this.mutableConnecting = false; + this.mutableClosed = false; + + this.onErrorInternal = options.onError; + this.onCloseInternal = options.onClose; + + this.transform.on('error', this.onError.bind(this)); + this.buffer.on('error', this.onError.bind(this)); + this.buffer.pause(); + this.stream.pipe(this.transform).pipe(this.buffer); + } + + public get connected(): boolean { + return this.mutableConnected; + } + + public async connect(): Promise { + if (this.mutableConnecting || this.mutableConnected) { + return; + } + this.mutableConnecting = true; + this.mutableClosed = false; + + try { + await this.connectInternal(); + this.stream.on('error', this.onError.bind(this)); + this.stream.on('close', this.onClose.bind(this)); + this.mutableConnected = true; + } finally { + this.mutableConnecting = false; + } + } + + public close(hadError?: boolean): void { + if (this.mutableClosed) { + return; + } + this.mutableClosed = true; + + if (!this.mutableConnecting && !this.mutableConnected) { + return; + } + this.mutableConnecting = false; + this.mutableConnected = false; + + this.closeInternal(!!hadError); + this.stream.unpipe(this.transform); + this.transform.unpipe(this.buffer); + this.transform.end(); + this.buffer.end(); + } + + public write(buffer: Buffer): void { + if (!this.mutableConnected || this.mutableClosed) { + return; + } + + try { + this.stream.write(buffer); + } catch (error) { + this.onError(error); + } + } + + public async receiveMessage(timeoutMS?: number): Promise { + return new Promise((resolve, reject) => { + let handled = false; + const cleanup = () => { + this.buffer.pause(); + handled = true; + // eslint-disable-next-line + this.stream.removeListener('error', onError); + // eslint-disable-next-line + this.transform.removeListener('error', onError); + // eslint-disable-next-line + this.buffer.removeListener('error', onError); + // eslint-disable-next-line + this.buffer.removeListener('data', onDataReceived); + }; + + const onError = (error: Error) => { + if (!handled) { + cleanup(); + reject(error); + } + }; + + const onDataReceived = (data: Message) => { + if (!handled) { + cleanup(); + resolve(data); + } + }; + + this.stream.once('error', onError); + this.transform.once('error', onError); + this.buffer.once('error', onError); + this.buffer.once('data', onDataReceived); + this.buffer.resume(); + + if (timeoutMS !== undefined) { + setTimeout(() => onError(new ReceiveMessageTimeoutError(this.endpoint)), timeoutMS); + } + }); + } + + public streamData(onDataReceived: (data: Message) => void): { readonly unsubscribe: () => void } { + this.buffer.on('data', onDataReceived); + this.buffer.resume(); + + return { + unsubscribe: () => { + this.buffer.pause(); + this.buffer.removeListener('data', onDataReceived); + }, + }; + } + + protected abstract async connectInternal(): Promise; + protected abstract closeInternal(hadError: boolean): void; + + protected onError(error: Error): void { + this.close(true); + this.onErrorInternal(this, error); + } + + private onClose(): void { + this.mutableClosed = true; + this.onCloseInternal(this); + } +} 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..66337dd969 --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts @@ -0,0 +1,42 @@ +import { BinaryWriter, createSerializeWire } 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 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); + + 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..fe888effe3 --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts @@ -0,0 +1,57 @@ +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: + return ServerCapability.deserializeWireBase(options); + + 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..fe9d03086f --- /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); + + 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/network/event.ts b/packages/neo-one-node-core/src/network/event.ts new file mode 100644 index 0000000000..8217f1b87c --- /dev/null +++ b/packages/neo-one-node-core/src/network/event.ts @@ -0,0 +1,14 @@ +import { ConnectedPeer } from './ConnectedPeer'; +import { Peer } from './Peer'; + +export type NetworkEventMessage = + | { + readonly event: 'PEER_CONNECT_SUCCESS'; + readonly connectedPeer: ConnectedPeer; + } + | { + readonly event: 'PEER_CLOSED'; + readonly peer: Peer | ConnectedPeer; + }; + +export type OnNetworkEvent = (event: NetworkEventMessage) => void; diff --git a/packages/neo-one-node-core/src/network/index.ts b/packages/neo-one-node-core/src/network/index.ts new file mode 100644 index 0000000000..5a3d9a669d --- /dev/null +++ b/packages/neo-one-node-core/src/network/index.ts @@ -0,0 +1,6 @@ +export * from './capabilities'; +export * from './ConnectedPeer'; +export * from './event'; +export * from './Network'; +export * from './Peer'; +export * from './types'; diff --git a/packages/neo-one-node-core/src/network/types.ts b/packages/neo-one-node-core/src/network/types.ts new file mode 100644 index 0000000000..1bde18d5cc --- /dev/null +++ b/packages/neo-one-node-core/src/network/types.ts @@ -0,0 +1,21 @@ +export interface EndpointConfig { + readonly type: 'tcp'; + readonly host: string; + readonly port: number; +} + +// type:host:port +export type Endpoint = string; + +export const createEndpoint = ({ type, host, port }: EndpointConfig): Endpoint => `${type}://${host}:${port}`; + +export const getEndpointConfig = (endpoint: Endpoint): EndpointConfig => { + const result = /([a-zA-Z]+):\/\/(.*):(\d+)/gu.exec(endpoint); + if (result === null) { + throw new Error(`Invalid endpoint: ${endpoint}`); + } + const [type, host, port] = result.slice(1); + + // tslint:disable-next-line no-any + return { type: type as any, host, port: parseInt(port, 10) }; +}; diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index 764d09f6ee..5bd42e9819 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -1,18 +1,22 @@ import { BinaryWriter, createSerializeWire, crypto, InvalidFormatError } from '@neo-one/client-common'; +import { NativeContainer } from '../Native'; import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; import { BlockchainStorage } from '../Storage'; import { BinaryReader, utils } from '../utils'; -import { Verifiable, VerifyWitnesses } from '../Verifiable'; -import { VM } from '../vm'; +import { Verifiable, VerifyOptions } from '../Verifiable'; import { Witness } from '../Witness'; import { UnsignedConsensusPayload, UnsignedConsensusPayloadAdd } from './UnsignedConsensusPayload'; -interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { +export interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { readonly witness: Witness; } +export interface VerifyConsensusPayloadOptions extends VerifyOptions { + readonly height: number; +} + export class ConsensusPayload extends UnsignedConsensusPayload implements SerializableWire, Verifiable { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusPayload { + public static deserializeWireBase(options: DeserializeWireBaseOptions, validatorsCount = 7): ConsensusPayload { const { reader } = options; const { version, @@ -20,7 +24,7 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial blockIndex, validatorIndex, data, - } = super.deserializeUnsignedConsensusPayloadWireBase(options); + } = super.deserializeUnsignedConsensusPayloadWireBase(options, validatorsCount); const count = reader.readInt8(); if (count !== 1) { throw new InvalidFormatError(`expected exactly 1 witness`); @@ -48,17 +52,17 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial public readonly witness: Witness; public readonly serializeUnsigned = createSerializeWire(this.serializeWireBaseUnsigned); public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public readonly getScriptHashesForVerifying = utils.lazyAsync(async (storage: BlockchainStorage) => { - const validators = NativeNEO.getNextBlockValidators(storage); - if (validators.length <= this.validatorIndex) { - // TODO: implement a real error - throw new Error(`${validators.length} <= ${this.validatorIndex}`); - } - - return [crypto.toScriptHash(crypto.createSignatureRedeemScript(validators[this.validatorIndex]))]; - }); - - private readonly consensusMessageInternal = utils.lazy(() => ConsensusMessage.deserializeFrom(this.data)); + public readonly getScriptHashesForVerifying = utils.lazyAsync( + async (context: { readonly storage: BlockchainStorage; readonly native: NativeContainer }) => { + const validators = await context.native.NEO.getNextBlockValidators(context.storage); + if (validators.length <= this.validatorIndex) { + // TODO: implement a real error + throw new Error(`${validators.length} <= ${this.validatorIndex}`); + } + + return [crypto.toScriptHash(crypto.createSignatureRedeemScript(validators[this.validatorIndex]))]; + }, + ); public constructor(options: ConsensusPayloadAdd) { super(options); @@ -69,10 +73,6 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial return [this.witness]; } - public get consensusMessage() { - return this.consensusMessageInternal(); - } - public serializeWireBase(writer: BinaryWriter) { this.serializeWireBaseUnsigned(writer); writer.writeUInt8(1); @@ -83,14 +83,11 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial super.serializeWireBase(writer); } - public async verify(vm: VM, storage: BlockchainStorage, verifyWitnesses: VerifyWitnesses) { - const blockHashIndex = await storage.blockHashIndex.get(); - const height = blockHashIndex.index; - - if (this.blockIndex <= height) { + public async verify(options: VerifyConsensusPayloadOptions) { + if (this.blockIndex <= options.height) { return false; } - return verifyWitnesses(vm, this, storage, 0.02); + return options.verifyWitnesses(options.vm, this, options.storage, options.native, 0.02); } } diff --git a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts index 0cadfa1692..265b90d396 100644 --- a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, createSerializeWire, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, common, createGetHashData, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; import { BinaryReader, utils } from '../utils'; import { ConsensusMessage, deserializeConsensusMessageWire } from './message/ConsensusMessage'; @@ -11,6 +11,7 @@ export interface UnsignedConsensusPayloadAdd { readonly data?: Buffer; readonly getConsensusMessage?: () => ConsensusMessage; readonly consensusMessage?: ConsensusMessage; + readonly magic?: number; } export class UnsignedConsensusPayload implements SerializableWire { @@ -36,6 +37,7 @@ export class UnsignedConsensusPayload implements SerializableWire { validatorIndex, data, getConsensusMessage, + magic: options.context.messageMagic, }; } @@ -54,10 +56,13 @@ export class UnsignedConsensusPayload implements SerializableWire { public readonly previousHash: UInt256; public readonly blockIndex: number; public readonly validatorIndex: number; + public readonly magic: number | undefined; public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly consensusMessageInternal: (() => ConsensusMessage) | undefined; private readonly dataInternal?: Buffer; + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeWire, this.magic)()); + private readonly hashInternal = utils.lazy(() => crypto.hash256(this.messageInternal())); public constructor({ version, @@ -67,6 +72,7 @@ export class UnsignedConsensusPayload implements SerializableWire { data, getConsensusMessage, consensusMessage, + magic, }: UnsignedConsensusPayloadAdd) { this.version = version; this.previousHash = previousHash; @@ -75,6 +81,7 @@ export class UnsignedConsensusPayload implements SerializableWire { this.dataInternal = data; this.consensusMessageInternal = consensusMessage ? () => consensusMessage : getConsensusMessage; + this.magic = magic; } public get consensusMessage() { @@ -94,6 +101,14 @@ export class UnsignedConsensusPayload implements SerializableWire { return this.dataInternal; } + public get hash() { + return this.hashInternal(); + } + + public get hashHex() { + return common.uInt256ToHex(this.hash); + } + public serializeWireBase(writer: BinaryWriter) { writer.writeUInt32LE(this.version); writer.writeUInt256(this.previousHash); diff --git a/packages/neo-one-node-core/src/payload/index.ts b/packages/neo-one-node-core/src/payload/index.ts new file mode 100644 index 0000000000..6ae5633dd3 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/index.ts @@ -0,0 +1,6 @@ +export * from './ChangeViewPayloadCompact'; +export * from './CommitPayloadCompact'; +export * from './ConsensusPayload'; +export * from './message'; +export * from './PreparationPayloadCompact'; +export * from './UnsignedConsensusPayload'; diff --git a/packages/neo-one-node-core/src/payload/message/index.ts b/packages/neo-one-node-core/src/payload/message/index.ts new file mode 100644 index 0000000000..6d98926176 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/index.ts @@ -0,0 +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/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 0166637e8c..44cedaf394 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -4,33 +4,47 @@ import { InvalidFormatError, IOHelper, JSONHelper, + MAX_TRANSACTION_SIZE, + MAX_VALID_UNTIL_BLOCK_INCREMENT, scriptHashToAddress, TransactionJSON, TransactionModel, TransactionModelAdd, - TransactionWithInvocationDataJSON, UInt160, + VerifyResultModel, + VMStateJSON, } from '@neo-one/client-common'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, -} from '../Serializable'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } 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 TransactionAddUnsigned = Omit, 'witnesses'>; export type TransactionAdd = TransactionModelAdd; +export type TransactionAddUnsigned = Omit, 'witnesses'>; + +export interface VerboseData { + readonly blockhash: string; + readonly confirmations: number; + readonly blocktime: string; + readonly vmstate: VMStateJSON; +} + +export class Transaction extends TransactionModel implements SerializableWire, Verifiable { + public static readonly headerSize = + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE; -export class Transaction - extends TransactionModel - implements SerializableWire, SerializableJSON { + public get size() { + return this.sizeInternal(); + } public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { version, @@ -147,57 +161,127 @@ export class Transaction }); } - private readonly headerSizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt32LE, - ); - private readonly sizeInternal = utils.lazy( () => - this.headerSize + + 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 get headerSize() { - return this.headerSizeInternal(); + public getScriptHashesForVerifying(): readonly UInt160[] { + return this.signers.map((signer) => signer.account); } - public get size() { - return this.sizeInternal(); + 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.gtn(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 getScriptHashesForVerifying(): readonly UInt160[] { - return this.signers.map((signer) => signer.account); + 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.subn(this.size * feePerByte); + if (netFee.ltn(0)) { + return VerifyResultModel.InsufficientFunds; + } + + const witnessVerify = await verifyWitnesses(vm, this, storage, native, common.fixed8ToDecimal(netFee).toNumber()); + if (!witnessVerify) { + return VerifyResultModel.Invalid; + } + + return VerifyResultModel.Succeed; } - public serializeJSON(options: SerializeJSONContext): TransactionJSON { + public serializeJSON(): TransactionJSON { return { hash: JSONHelper.writeUInt256(this.hash), size: this.size, version: this.version, - nonce: this.nonce ? this.nonce : 0, + nonce: this.nonce, sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, sysfee: JSONHelper.writeUInt64LE(this.systemFee), - netfee: JSONHelper.writeUInt64LE(this.networkFee), - validuntilblock: this.validUntilBlock ? this.validUntilBlock : 0, - signers: this.signers.map((signer) => signer.serializeJSON(options)), - attributes: this.attributes.map((attr) => attr.serializeJSON(options)), + netfee: JSONHelper.writeUInt64(this.networkFee), + validuntilblock: this.validUntilBlock, + signers: this.signers.map((signer) => signer.serializeJSON()), + attributes: this.attributes.map((attr) => attr.serializeJSON()), script: JSONHelper.writeBuffer(this.script), - witnesses: this.witnesses.map((witness) => witness.serializeJSON(options)), + witnesses: this.witnesses.map((witness) => witness.serializeJSON()), }; } - public async serializeJSONWithInvocationData( - _options: SerializeJSONContext, - ): Promise { - // TODO: Implement method similar to old InvocationTransaction.serializeJSON(), which includes extra invocation data - return Promise.reject(); + public serializeJSONWithInvocationData(data: VerboseData) { + 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/attributes/AttributeBase.ts b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts index 6744490f07..4d07094030 100644 --- a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts +++ b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts @@ -7,6 +7,8 @@ import { toJSONAttributeType, } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; +import { VerifyOptions } from '../../Verifiable'; +import { Transaction } from '../Transaction'; export const createDeserializeAttributeType = (type: AttributeTypeModel) => (options: DeserializeWireBaseOptions) => { const { reader } = options; @@ -19,14 +21,18 @@ export const createDeserializeAttributeType = (type: AttributeTypeModel) => (opt }; export abstract class AttributeBase extends AttributeBaseModel implements SerializableJSON { - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { + public get size() { + return IOHelper.sizeOfUInt8 + this.sizeExclusive(); + } + public serializeJSON(): AttributeJSON { return { type: toJSONAttributeType(this.type), }; } - public get size() { - return IOHelper.sizeOfUInt8 + this.sizeExclusive(); + // Must not be implemented in C# land yet? + public async verify(_verifyOptions: VerifyOptions, _tx: Transaction) { + return Promise.resolve(true); } protected sizeExclusive(): number { diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 3e1dfb5e62..2f92844d24 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,9 +1,8 @@ -import { SerializableWire, UInt160, UInt256, VMState } from '@neo-one/client-common'; +import { UInt160, UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; -import { Verifiable } from './Verifiable'; export enum TriggerType { Verification = 0x00, @@ -11,39 +10,56 @@ export enum TriggerType { Application = 0x10, } +export type ScriptContainerType = 'Signers' | 'Transaction' | 'Block'; + +export interface SerializedScriptContainer { + readonly type: ScriptContainerType; + readonly buffer: Buffer; +} + export interface Notification { - readonly scriptContainer: Buffer; + readonly scriptContainer: SerializedScriptContainer; readonly scriptHash: UInt160; readonly eventName: string; readonly state: readonly StackItem[]; } export interface CallReceipt { - readonly state: keyof typeof VMState; + readonly state: VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; - readonly notifications: readonly Notification[]; + // readonly notifications: readonly Notification[]; } export type SnapshotName = 'main' | 'clone'; export interface ApplicationEngineOptions { readonly trigger: TriggerType; - readonly container?: Verifiable & SerializableWire; + readonly container?: SerializedScriptContainer; readonly snapshot?: SnapshotName; readonly gas: number; readonly testMode: boolean; } +export interface RunEngineOptions { + readonly script: Buffer; + readonly snapshot: SnapshotName; + readonly container?: SerializedScriptContainer; + readonly persistingBlock?: Block; + readonly offset?: number; + readonly testMode?: boolean; + readonly gas?: number; +} + export interface ApplicationEngine { - readonly trigger: keyof typeof TriggerType; + readonly trigger: TriggerType; readonly gasConsumed: number; readonly resultStack: readonly StackItem[]; - readonly state: keyof typeof VMState; + readonly state: VMState; readonly notifications: readonly Notification[]; readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; - readonly execute: () => keyof typeof VMState; - readonly loadClonedContext: (position: number) => boolean; + readonly execute: () => VMState; + readonly setInstructionPointer: (position: number) => boolean; } export type SnapshotPartial = 'blocks' | 'transactions'; @@ -57,6 +73,7 @@ export interface SnapshotHandler { 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; @@ -64,8 +81,8 @@ export interface SnapshotHandler { export interface ApplicationExecuted { readonly transaction?: Transaction; - readonly trigger: keyof typeof TriggerType; - readonly state: keyof typeof VMState; + readonly trigger: TriggerType; + readonly state: VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; // readonly notifications: readonly Notification[]; 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 add1ff93b8..5d82a478db 100644 --- a/packages/neo-one-node-protocol/src/Message.ts +++ b/packages/neo-one-node-protocol/src/Message.ts @@ -12,7 +12,6 @@ import { BinaryReader, Block, ConsensusPayload, - deserializeTransactionWire, DeserializeWireBaseOptions, DeserializeWireContext, DeserializeWireOptions, @@ -21,85 +20,65 @@ import { import { makeErrorWithCode, utils } from '@neo-one/utils'; import { Transform } from 'stream'; import { assertCommand, Command } from './Command'; +import { assertMessageFlags } 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 value: MessageValue; } -export const COMMAND_LENGTH = 12; export const PAYLOAD_MAX_SIZE = 0x02000000; +const compressionMinSize = 128; +const compressionThreshold = 64; 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 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 { 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); + + // TODO: pickup here, we need to work out compressing / decompressing the message payload + // and how that will be stored in the class; const payloadOptions = { context: options.context, @@ -108,123 +87,137 @@ export class Message implements SerializableWire { let value: MessageValue; switch (command) { - case Command.addr: + case Command.Addr: value = { - command: Command.addr, + command: Command.Addr, payload: AddrPayload.deserializeWire(payloadOptions), }; break; - case Command.block: + case Command.Block: value = { - command: Command.block, + command: Command.Block, payload: Block.deserializeWire(payloadOptions), }; break; - case Command.consensus: + case Command.Consensus: value = { - command: Command.consensus, + command: Command.Consensus, payload: ConsensusPayload.deserializeWire(payloadOptions), }; break; - case Command.filteradd: + case Command.FilterAdd: value = { - command: Command.filteradd, + command: Command.FilterAdd, payload: FilterAddPayload.deserializeWire(payloadOptions), }; break; - case Command.filterclear: - value = { command: Command.filterclear }; + case Command.FilterClear: + value = { command: Command.FilterClear }; + break; - case Command.filterload: + case Command.FilterLoad: value = { - command: Command.filterload, + command: Command.FilterLoad, payload: FilterLoadPayload.deserializeWire(payloadOptions), }; break; - case Command.getaddr: - value = { command: Command.getaddr }; + case Command.GetAddr: + value = { command: Command.GetAddr }; + break; - case Command.getblocks: + case Command.GetBlocks: value = { - command: Command.getblocks, + command: Command.GetBlocks, payload: GetBlocksPayload.deserializeWire(payloadOptions), }; break; - case Command.getdata: + case Command.GetBlockByIndex: value = { - command: Command.getdata, + command: Command.GetBlockByIndex, + payload: GetBlockByIndexPayload.deserializeWire(payloadOptions), + }; + + break; + case Command.GetData: + value = { + command: Command.GetData, payload: InvPayload.deserializeWire(payloadOptions), }; break; - case Command.getheaders: + case Command.GetHeaders: value = { - command: Command.getheaders, - payload: GetBlocksPayload.deserializeWire(payloadOptions), + command: Command.GetHeaders, + payload: GetBlockByIndexPayload.deserializeWire(payloadOptions), }; break; - case Command.headers: + case Command.Headers: value = { - command: Command.headers, + command: Command.Headers, payload: HeadersPayload.deserializeWire(payloadOptions), }; break; - case Command.inv: + case Command.Inv: value = { - command: Command.inv, + command: Command.Inv, payload: InvPayload.deserializeWire(payloadOptions), }; break; - case Command.mempool: - value = { command: Command.mempool }; + case Command.Mempool: + value = { command: Command.Mempool }; + break; - case Command.tx: + case Command.Transaction: value = { - command: Command.tx, - payload: deserializeTransactionWire(payloadOptions), + command: Command.Transaction, + payload: Transaction.deserializeWire(payloadOptions), }; break; - case Command.verack: - value = { command: Command.verack }; + case Command.Verack: + value = { command: Command.Verack }; break; - case Command.version: + case Command.Version: value = { - command: Command.version, + command: Command.Version, payload: VersionPayload.deserializeWire(payloadOptions), }; break; - case Command.alert: - value = { command: Command.alert }; + case Command.Alert: + value = { command: Command.Alert }; + break; - case Command.merkleblock: + case Command.MerkleBlock: value = { - command: Command.merkleblock, + command: Command.MerkleBlock, payload: MerkleBlockPayload.deserializeWire(payloadOptions), }; break; - case Command.notfound: - value = { command: Command.notfound }; + case Command.NotFound: + value = { command: Command.NotFound, payload: InvPayload.deserializeWire(payloadOptions) }; break; - case Command.ping: - value = { command: Command.ping }; + case Command.Ping: + value = { command: Command.Ping, payload: PingPayload.deserializeWire(payloadOptions) }; + break; - case Command.pong: - value = { command: Command.pong }; + case Command.Pong: + value = { command: Command.Pong, payload: PingPayload.deserializeWire(payloadOptions) }; + break; - case Command.reject: - value = { command: Command.reject }; + case Command.Reject: + value = { command: Command.Reject }; + break; default: utils.assertNever(command); @@ -258,62 +251,62 @@ export class Message implements SerializableWire { let payload = Buffer.alloc(0); switch (value.command) { - case Command.addr: + case Command.Addr: payload = value.payload.serializeWire(); break; - case Command.block: + case Command.Block: payload = value.payload.serializeWire(); break; - case Command.consensus: + case Command.Consensus: payload = value.payload.serializeWire(); break; - case Command.filteradd: + case Command.FilterAdd: payload = value.payload.serializeWire(); break; - case Command.filterclear: + case Command.FilterClear: break; - case Command.filterload: + case Command.FilterLoad: payload = value.payload.serializeWire(); break; - case Command.getaddr: + case Command.GetAddr: break; - case Command.getblocks: + case Command.GetBlocks: payload = value.payload.serializeWire(); break; - case Command.getdata: + case Command.GetData: payload = value.payload.serializeWire(); break; - case Command.getheaders: + case Command.GetHeaders: payload = value.payload.serializeWire(); break; - case Command.headers: + case Command.Headers: payload = value.payload.serializeWire(); break; - case Command.inv: + case Command.Inv: payload = value.payload.serializeWire(); break; - case Command.mempool: + case Command.Mempool: break; - case Command.tx: + case Command.Transaction: payload = value.payload.serializeWire(); break; - case Command.verack: + case Command.Verack: break; - case Command.version: + case Command.Version: payload = value.payload.serializeWire(); break; - case Command.alert: + case Command.Alert: break; - case Command.merkleblock: + case Command.MerkleBlock: payload = value.payload.serializeWire(); break; - case Command.notfound: + case Command.NotFound: break; - case Command.ping: + case Command.Ping: break; - case Command.pong: + case Command.Pong: break; - case Command.reject: + case Command.Reject: break; default: utils.assertNever(value); 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 418f5d494c..885e85b61d 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -1,7 +1,17 @@ -import { common, crypto, UInt256Hex, utils } from '@neo-one/client-common'; +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, @@ -9,21 +19,20 @@ import { createEndpoint, CreateNetwork, Endpoint, + FullNodeCapability, getEndpointConfig, - Header, - Input, - MerkleTree, + NativeContainer, NegotiateResult, Network, NetworkEventMessage, Node as INode, - Output, + NodeCapability, + NodeCapabilityType, Peer, - RegisterTransaction, RelayTransactionResult, + ServerCapability, Transaction, - TransactionType, - VerifyTransactionResult, + Version, } from '@neo-one/node-core'; import { composeDisposables, Disposable, Labels, noopDisposable, utils as commonUtils } from '@neo-one/utils'; import { ScalingBloem } from 'bloem'; @@ -35,27 +44,25 @@ import { Address6 } from 'ip-address'; import _ from 'lodash'; import LRUCache from 'lru-cache'; import { Command } from './Command'; -import { - AlreadyConnectedError, - InvalidRelayStrippedTransactionType, - NegotiationError, - RelayStrippedTransactionMismatch, -} from './errors'; +import { AlreadyConnectedError, NegotiationError } from './errors'; import { Message, MessageTransform, MessageValue } from './Message'; import { AddrPayload, FilterAddPayload, FilterLoadPayload, + GetBlockByIndexPayload, GetBlocksPayload, HeadersPayload, InventoryType, InvPayload, MerkleBlockPayload, NetworkAddress, - SERVICES, + PingPayload, VersionPayload, } from './payload'; +import { maxHashesCount } from './payload/InvPayload'; import { PeerData } from './PeerData'; +import { TransactionVerificationContext } from './TransactionVerificationContext'; const logger = createChild(nodeLogger, { component: 'node-protocol' }); @@ -64,6 +71,21 @@ export interface TransactionAndFee { 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; @@ -93,20 +115,28 @@ 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); }; 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; @@ -124,34 +154,16 @@ interface PeerHealth { } export class Node implements INode { - public get version(): Version { - return { - tcpPort: this.externalPort, - wsPort: -1, - nonce: this.nonce, - useragent: this.userAgent, - }; - } - - 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; // 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; private readonly nonce: number; private readonly userAgent: string; + private readonly capabilities: readonly NodeCapability[]; private mutableKnownBlockHashes: ScalingBloem; private readonly tempKnownBlockHashes: Set; private mutableKnownTransactionHashes: ScalingBloem; @@ -187,9 +199,9 @@ export class Node implements INode { this.sendMessage( peer, this.createMessage({ - command: Command.getblocks, + command: Command.GetBlocks, payload: new GetBlocksPayload({ - hashStart: [block.hash], + hashStart: block.hash, }), }), ); @@ -199,7 +211,7 @@ export class Node implements INode { } }, GET_BLOCKS_THROTTLE_MS); private readonly onRequestEndpoints = _.throttle((): void => { - this.relay(this.createMessage({ command: Command.getaddr })); + this.relay(this.createMessage({ command: Command.GetAddr })); // tslint:disable-next-line no-floating-promises this.fetchEndpointsFromRPC(); }, 5000); @@ -210,12 +222,8 @@ export class Node implements INode { 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, + const networkFee = await transaction.networkFee({ fees: this.blockchain.settings.fees, - registerValidatorFee: this.blockchain.settings.registerValidatorFee, }); return { transaction, networkFee }; @@ -225,7 +233,7 @@ export class Node implements INode { 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 @@ -236,10 +244,12 @@ export class Node implements INode { public constructor({ blockchain, + native, createNetwork, options, }: { readonly blockchain: Blockchain; + readonly native: NativeContainer; readonly createNetwork: CreateNetwork; readonly options: Options; }) { @@ -260,9 +270,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-preview`; this.mutableMemPool = {}; + this.transactionVerificationContext = new TransactionVerificationContext({ + getGasBalance: native.GAS.balanceOf, + }); this.mutableKnownBlockHashes = createScalingBloomFilter(); this.tempKnownBlockHashes = new Set(); this.mutableKnownTransactionHashes = createScalingBloomFilter(); @@ -272,6 +285,31 @@ export class Node implements INode { this.mutableGetBlocksRequestsCount = 1; this.consensusCache = new LRUCache(10000); this.mutableBlockIndex = {}; + + const fullNodeCapability = new FullNodeCapability({ startHeight: this.blockchain.currentBlockIndex }); + const tcpCapability = new ServerCapability({ type: NodeCapabilityType.TcpServer, port: this.externalPort }); + this.capabilities = [fullNodeCapability, tcpCapability]; + } + + public get version(): Version { + return { + tcpPort: this.externalPort, + wsPort: -1, + nonce: this.nonce, + useragent: this.userAgent, + }; + } + + 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 { @@ -330,14 +368,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)) { @@ -348,36 +380,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; if (this.mutableConsensus !== undefined) { this.mutableConsensus.onTransactionReceived(transaction); } + this.transactionVerificationContext.addTransaction(transaction); this.relayTransactionInternal(transaction); await this.trimMemPool(); } @@ -407,114 +438,7 @@ export class Node implements INode { } } - return result; - } - - public async relayStrippedTransaction( - verificationTransaction: Transaction, - relayTransaction: Transaction, - { - throwVerifyError = false, - forceAdd = false, - }: { readonly throwVerifyError?: boolean; readonly forceAdd?: boolean } = { - throwVerifyError: false, - forceAdd: false, - }, - ): Promise { - const result = {}; - - // this should only be called by our special invocation transaction (this helps with TS); - if ( - verificationTransaction.type !== TransactionType.Invocation || - relayTransaction.type !== TransactionType.Invocation - ) { - throw new InvalidRelayStrippedTransactionType(verificationTransaction.type); - } - - // verify they are still the same transaction besides witnesses/attributes - if ( - verificationTransaction.inputs.length !== relayTransaction.inputs.length || - verificationTransaction.outputs.length !== relayTransaction.outputs.length || - !(_.zip(verificationTransaction.inputs, relayTransaction.inputs) as ReadonlyArray< - [Input, Input] - >).every(([verify, relay]) => verify.equals(relay)) || - !(_.zip(verificationTransaction.outputs, relayTransaction.outputs) as ReadonlyArray< - [Output, Output] - >).every(([verify, relay]) => verify.equals(relay)) || - !verificationTransaction.script.equals(relayTransaction.script) - ) { - throw new RelayStrippedTransactionMismatch(); - } - - if (!this.mutableKnownTransactionHashes.has(relayTransaction.hash)) { - this.tempKnownTransactionHashes.add(relayTransaction.hashHex); - - try { - const memPool = Object.values(this.mutableMemPool); - if (memPool.length > MEM_POOL_SIZE / 2 && !forceAdd) { - this.mutableKnownTransactionHashes.add(relayTransaction.hash); - - return result; - } - // tslint:disable-next-line prefer-immediate-return - let logLabels: {} = { [Labels.NEO_TRANSACTION_HASH]: relayTransaction.hashHex }; - let finalResult: RelayTransactionResult; - try { - let foundTransaction; - try { - foundTransaction = await this.blockchain.transaction.tryGet({ - hash: relayTransaction.hash, - }); - } finally { - logLabels = { - [Labels.NEO_TRANSACTION_FOUND]: foundTransaction !== undefined, - ...logLabels, - }; - } - let verifyResult: VerifyTransactionResult | undefined; - if (foundTransaction === undefined) { - // if we haven't verified it yet then use the verificationTransaction to do that - verifyResult = await this.blockchain.verifyTransaction({ - transaction: verificationTransaction, - memPool: Object.values(this.mutableMemPool), - }); - const verified = verifyResult.verifications.every(({ failureMessage }) => failureMessage === undefined); - - if (verified) { - this.mutableMemPool[relayTransaction.hashHex] = relayTransaction; - if (this.mutableConsensus !== undefined) { - this.mutableConsensus.onTransactionReceived(relayTransaction); - } - this.relayTransactionInternal(relayTransaction); - await this.trimMemPool(); - } - } - - this.mutableKnownTransactionHashes.add(relayTransaction.hash); - - finalResult = { verifyResult }; - logger.debug({ name: 'neo_relay_transaction', ...logLabels }); - } catch (err) { - logger.error({ name: 'neo_relay_transaction', err, ...logLabels }); - throw err; - } - - return finalResult; - } catch (error) { - if ( - error.code === undefined || - typeof error.code !== 'string' || - !error.code.includes('VERIFY') || - throwVerifyError - ) { - throw error; - } - } finally { - this.tempKnownTransactionHashes.delete(relayTransaction.hashHex); - } - } - - return result; + return {}; } public async relayBlock(block: Block): Promise { @@ -523,7 +447,7 @@ export class Node implements INode { public relayConsensusPayload(payload: ConsensusPayload): void { const message = this.createMessage({ - command: Command.inv, + command: Command.Inv, payload: new InvPayload({ type: InventoryType.Consensus, hashes: [payload.hash], @@ -535,7 +459,7 @@ export class Node implements INode { } public syncMemPool(): void { - this.relay(this.createMessage({ command: Command.mempool })); + this.relay(this.createMessage({ command: Command.Mempool })); } private relay(message: Message): void { @@ -544,9 +468,9 @@ export class Node implements INode { private relayTransactionInternal(transaction: Transaction): void { const message = this.createMessage({ - command: Command.inv, + command: Command.Inv, payload: new InvPayload({ - type: InventoryType.Transaction, + type: InventoryType.TX, hashes: [transaction.hash], }), }); @@ -566,57 +490,86 @@ export class Node implements INode { 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, + 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; + + this.sendMessage(peer, this.createMessage({ command: Command.Verack })); 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, + lastBlockIndex: 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, + startHeight, mutableBloomFilter: undefined, address, + listenPort: port, }, - relay: versionPayload.relay, + relay, }; }; private readonly checkPeerHealth = (peer: ConnectedPeer, prevHealth?: PeerHealth) => { @@ -799,76 +752,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(() => { @@ -880,15 +833,10 @@ 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)); } @@ -908,7 +856,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, }); @@ -923,7 +871,7 @@ export class Node implements INode { if (peer !== undefined && block.index > peer.data.startHeight) { this.relay( this.createMessage({ - command: Command.inv, + command: Command.Inv, payload: new InvPayload({ type: InventoryType.Block, hashes: [block.hash], @@ -976,19 +924,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 }), + command: Command.Addr, + payload: new AddrPayload({ addressList }), }), ); } @@ -996,40 +947,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 > maxHashesCount ? maxHashesCount : 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, + 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 ? maxHashesCount : Math.min(payload.count, maxHashesCount); + 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, + this.createMessage({ + command: Command.Block, + payload: block, + }), + ); + } else { + this.sendMessage( + peer, + this.createMessage({ + 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, + command: Command.Transaction, payload: transaction, }), ); + } else { + notFound = notFound.concat(hash); } }), ); @@ -1038,16 +1052,14 @@ 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, + command: Command.Block, payload: block, }), ); @@ -1055,8 +1067,8 @@ export class Node implements INode { this.sendMessage( peer, this.createMessage({ - command: Command.merkleblock, - payload: this.createMerkleBlockPayload({ + command: Command.MerkleBlock, + payload: MerkleBlockPayload.create({ block, flags: block.transactions.map((transaction) => this.testFilter(peer.data.mutableBloomFilter, transaction), @@ -1065,6 +1077,8 @@ export class Node implements INode { }), ); } + } else { + notFound = notFound.concat(hash); } }), ); @@ -1077,74 +1091,72 @@ export class Node implements INode { this.sendMessage( peer, this.createMessage({ - command: Command.consensus, + command: Command.Consensus, payload, }), ); } }); break; + default: commonUtils.assertNever(getData.type); } + + if (notFound.length > 0) { + InvPayload.createGroup(getData.type, notFound).forEach((payload) => { + this.sendMessage( + peer, + this.createMessage({ + 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, + this.createMessage({ + 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) && @@ -1171,7 +1183,7 @@ export class Node implements INode { this.sendMessage( peer, this.createMessage({ - command: Command.getdata, + command: Command.GetData, payload: new InvPayload({ type: inv.type, hashes }), }), ); @@ -1179,68 +1191,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, + this.createMessage({ + 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 onVersionMessageReceived(peer: ConnectedPeer): void { - peer.close(); + private onPingMessageReceived(peer: ConnectedPeer, payload: PingPayload): void { + this.updateLastBlockIndex(peer.endpoint, payload); + this.sendMessage( + peer, + this.createMessage({ + command: Command.Pong, + payload: PingPayload.create(this.blockchain.currentBlockIndex, payload.nonce), + }), + ); } - 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 { @@ -1251,46 +1234,14 @@ 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 { diff --git a/packages/neo-one-node-protocol/src/PeerData.ts b/packages/neo-one-node-protocol/src/PeerData.ts index ea219e466d..b6c5ca3205 100644 --- a/packages/neo-one-node-protocol/src/PeerData.ts +++ b/packages/neo-one-node-protocol/src/PeerData.ts @@ -7,4 +7,5 @@ export interface PeerData { readonly startHeight: number; mutableBloomFilter: BloomFilter | undefined; readonly address?: NetworkAddress; + readonly listenPort: number; } diff --git a/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts b/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts new file mode 100644 index 0000000000..d1face8582 --- /dev/null +++ b/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts @@ -0,0 +1,59 @@ +import { common, UInt160, UInt160Hex } from '@neo-one/client-common'; +import { NativeContractStorageContext, Transaction } from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +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-protocol/src/errors.ts b/packages/neo-one-node-protocol/src/errors.ts index d046a735d8..148269852a 100644 --- a/packages/neo-one-node-protocol/src/errors.ts +++ b/packages/neo-one-node-protocol/src/errors.ts @@ -13,13 +13,3 @@ export const AlreadyConnectedError = makeErrorWithCode( 'ALREADY_CONNECTED', (reason: string) => `Negotiation failed: ${reason}`, ); - -export const InvalidRelayStrippedTransactionType = makeErrorWithCode( - 'INVALID_TRANSACTION_TYPE_FOR_STRIPPED_RELAY', - (type: number) => `tried to use relayStrippedTransaction on a ${type} transaction`, -); - -export const RelayStrippedTransactionMismatch = makeErrorWithCode( - 'RELAY_STRIPPED_TRANSACTION_MISMATCH', - () => "verificationTransaction and relayTransaction weren't identical transactions", -); diff --git a/packages/neo-one-node-protocol/src/payload/AddrPayload.ts b/packages/neo-one-node-protocol/src/payload/AddrPayload.ts index a5537afca8..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 { + 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/GetBlockByIndexPayload.ts b/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts new file mode 100644 index 0000000000..4777870234 --- /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); + + 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 c4f38e6b07..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 { + 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 3b1124a2cc..5838264923 100644 --- a/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts @@ -5,6 +5,7 @@ export interface HeadersPayloadAdd { } 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 a09a328a20..14db968086 100644 --- a/packages/neo-one-node-protocol/src/payload/InvPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/InvPayload.ts @@ -1,11 +1,14 @@ 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 const maxHashesCount = 500; + export class InvPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): InvPayload { const type = assertInventoryType(reader.readUInt8()); @@ -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 8fcbf30434..df24419db9 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 { 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 { + 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 { merkleRoot: blockBase.merkleRoot, timestamp: blockBase.timestamp, index: blockBase.index, - consensusData: blockBase.consensusData, nextConsensus: blockBase.nextConsensus, - script: blockBase.script, - transactionCount, + witness: blockBase.witness, + contentCount, hashes, flags, }); @@ -43,7 +75,7 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { }); } - public readonly transactionCount: number; + public readonly contentCount: number; public readonly hashes: readonly UInt256[]; public readonly flags: Buffer; private readonly merkleBlockPayloadSizeInternal: () => number; @@ -54,10 +86,9 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, - transactionCount, + witness, + contentCount, hashes, flags, }: MerkleBlockPayloadAdd) { @@ -67,12 +98,11 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + witness, }); - this.transactionCount = transactionCount; + this.contentCount = contentCount; this.hashes = hashes; this.flags = flags; @@ -91,7 +121,7 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); - writer.writeVarUIntLE(this.transactionCount); + writer.writeVarUIntLE(this.contentCount); writer.writeArray(this.hashes, (hash) => { 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 f1282c95f7..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 { + 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..a715da689e --- /dev/null +++ b/packages/neo-one-node-protocol/src/payload/PingPayload.ts @@ -0,0 +1,65 @@ +import { BinaryWriter, createSerializeWire } from '@neo-one/client-common'; +import { + BinaryReader, + DeserializeWire, + 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); + + 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 ea7952498c..1d75e68326 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); + + 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..edef78ea8a 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 { PingPayload } from './PingPayload'; export { VersionPayload, SERVICES } from './VersionPayload'; export { InventoryType } from './InventoryType'; diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index c542746788..523ee3babb 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,20 +1,31 @@ import { + assertVMStateJSON, + CallReceiptJSON, common, crypto, JSONHelper, RelayTransactionResultJSON, + ScriptBuilder, + toVMStateJSON, toWitnessScope, TransactionJSON, + VMState, + WitnessScopeModel, } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Blockchain, getEndpointConfig, + NativeContainer, Node, RelayTransactionResult, Signer, + Signers, + stackItemToJSON, + StorageKey, Transaction, TransactionData, + TransactionState, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; import { filter, switchMap, take, timeout, toArray } from 'rxjs/operators'; @@ -55,48 +66,40 @@ export class JSONRPCError { } const RPC_METHODS: { readonly [key: string]: string } = { + // Blockchain getbestblockhash: 'getbestblockhash', getblock: 'getblock', getblockcount: 'getblockcount', getblockhash: 'getblockhash', - getconnectioncount: 'getconnectioncount', + getblockheader: 'getblockheader', getcontractstate: 'getcontractstate', getrawmempool: 'getrawmempool', getrawtransaction: 'getrawtransaction', getstorage: 'getstorage', - invokefunction: 'invokefunction', - invokescript: 'invokescript', - sendrawtransaction: 'sendrawtransaction', - submitblock: 'submitblock', - validateaddress: 'validateaddress', - getpeers: 'getpeers', - relaytransaction: 'relaytransaction', - relaystrippedtransaction: 'relaystrippedtransaction', - getallstorage: 'getallstorage', - testinvocation: 'testinvocation', - gettransactionreceipt: 'gettransactionreceipt', - getinvocationdata: 'getinvocationdata', getvalidators: 'getvalidators', - getnetworksettings: 'getnetworksettings', - runconsensusnow: 'runconsensusnow', - updatesettings: 'updatesettings', - getsettings: 'getsettings', - fastforwardoffset: 'fastforwardoffset', - fastforwardtotime: 'fastforwardtotime', - reset: 'reset', - getneotrackerurl: 'getneotrackerurl', - resetproject: 'resetproject', - listplugins: 'listplugins', gettransactionheight: 'gettransactionheight', + + // Node + getconnectioncount: 'getconnectioncount', + getpeers: 'getpeers', getversion: 'getversion', + sendrawtransaction: 'sendrawtransaction', + submitblock: 'submitblock', + + // SmartContract + invokefunction: 'invokefunction', + invokescript: 'invokescript', + getunclaimedgas: 'getunclaimedgas', + + // Utilities + listplugins: 'listplugins', + validateaddress: 'validateaddress', getapplicationlog: 'getapplicationlog', - getnep5transfers: 'getnep5transfers', // add to RPCClient? - getnep5balances: 'getnep5balances', // add to RPCClient? - getblockheader: 'getblockheader', // add to RPCClient? + + // Wallet closewallet: 'closewallet', dumpprivkey: 'dumpprivkey', getnewaddress: 'getnewaddress', - getunclaimedgas: 'getunclaimedgas', getwalletbalance: 'getwalletbalance', getwalletunclaimedgas: 'getwalletunclaimedgas', importprivkey: 'importprivkey', @@ -105,6 +108,28 @@ const RPC_METHODS: { readonly [key: string]: string } = { sendfrom: 'sendfrom', sendmany: 'sendmany', sendtoaddress: 'sendtoaddress', + + // NEP5 + getnep5transfers: 'getnep5transfers', // add to RPCClient? + getnep5balances: 'getnep5balances', // add to RPCClient? + + // 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 + testinvocation: 'testinvocation', + relaytransaction: 'relaytransaction', + getallstorage: 'getallstorage', + gettransactionreceipt: 'gettransactionreceipt', + getinvocationdata: 'getinvocationdata', + getnetworksettings: 'getnetworksettings', + runconsensusnow: 'runconsensusnow', + fastforwardoffset: 'fastforwardoffset', + fastforwardtotime: 'fastforwardtotime', + reset: 'reset', + getneotrackerurl: 'getneotrackerurl', + resetproject: 'resetproject', UNKNOWN: 'UNKNOWN', INVALID: 'INVALID', }; @@ -240,11 +265,13 @@ 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; @@ -255,7 +282,30 @@ export const createHandler = ({ } }; + const getInvokeResult = (script: Buffer, signers?: Signers): CallReceiptJSON => { + const result = blockchain.invokeScript(script, signers); + + try { + const stack = result.stack.map((item) => stackItemToJSON(item, undefined)); + + return { + script: script.toString('hex'), + state: toVMStateJSON(result.state), + stack, + gasConsumed: result.gasConsumed.toString(), + }; + } catch { + return { + script: script.toString('hex'), + state: toVMStateJSON(result.state), + stack: 'error: recursive reference', + gasConsumed: result.gasConsumed.toString(), + }; + } + }; + const handlers: Handlers = { + // Blockchain [RPC_METHODS.getbestblockhash]: async () => JSONHelper.writeUInt256(blockchain.currentBlock.hash), [RPC_METHODS.getblock]: async (args) => { let hashOrIndex = args[0]; @@ -272,7 +322,8 @@ export const createHandler = ({ watchTimeoutMS = args[2]; } - let block = await blockchain.block.tryGet({ hashOrIndex }); + const trimmedBlock = await blockchain.blocks.tryGet({ hashOrIndex }); + let block = await trimmedBlock?.getBlock(blockchain.transactions); if (block === undefined) { if (watchTimeoutMS === undefined) { throw new JSONRPCError(-100, 'Unknown block'); @@ -301,72 +352,144 @@ 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.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.getrawmempool]: async () => ({ + height: blockchain.currentBlockIndex, + verified: Object.values(node.memPool).map((transaction) => JSONHelper.writeUInt256(transaction.hash)), + }), [RPC_METHODS.getrawtransaction]: async (args) => { 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) { + // TODO: implement better error; + throw new Error('If you ever see this error something has gone terribly wrong'); + } + + return tx.serializeJSONWithInvocationData({ + blockhash: JSONHelper.writeUInt256(header.hash), + confirmations: blockchain.currentBlockIndex - header.index + 1, + blocktime: JSONHelper.writeUInt64LE(header.timestamp), + 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 contract = await blockchain.contract.tryGet({ hash }); - if (contract === undefined) { + let id = 0; + try { + const hash = JSONHelper.readUInt160(args[0]); + const state = await blockchain.contracts.tryGet(hash); + if (state === undefined) { + return undefined; + } + id = state.id; + } catch { + /* do nothing */ + } + + const key = JSONHelper.readBuffer(args[1]); + const item = await blockchain.storages.tryGet(new StorageKey({ id, key })); + + if (item === undefined) { return undefined; } - const id = contract.id; - const key = Buffer.from(args[1], 'hex'); - const item = await blockchain.storageItem.tryGet({ id, key }); - return item === undefined ? undefined : item.serializeJSON(blockchain.serializeJSONContext); + return JSONHelper.writeBuffer(item.value); }, - [RPC_METHODS.invokefunction]: 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.invokescript]: async (args) => { - // TODO: test this method - const script = JSONHelper.readBuffer(args[0]); - const signers = args[1]?.map( - // tslint:disable-next-line: no-any - (signer: any) => - new Signer({ - account: JSONHelper.readUInt160(signer.account), - scopes: toWitnessScope(signer?.scopes), - allowedContracts: signer.allowedcontracts?.map((contract: string) => JSONHelper.readUInt160(contract)), - allowedGroups: signer.allowedgroups?.map((group: string) => JSONHelper.readECPoint(group)), - }), - ); - const receipt = await blockchain.invokeScript(script, signers); + [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; + }, + + // 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) => { @@ -386,6 +509,46 @@ export const createHandler = ({ [RPC_METHODS.submitblock]: async () => { throw new JSONRPCError(-101, 'Not implemented'); }, + + // SmartContract + // TODO: we didn't use invokefunction in the past, whether or not that will still be the case is up in the air + [RPC_METHODS.invokefunction]: async (args) => { + throw new Error('not implemented'); + // const scriptHash = JSONHelper.readUInt160(args[0]); + // const operation = args[1]; + // const params = args.length >= 3 ? args[2].map((arg) => ContractParameter.fromJSON(arg)) : []; + // const signers = args.length >= 4 ? signersFromJSON(args[3]) : undefined; + // const builder = new ScriptBuilder(); + // const script = builder.emitAppCall(scriptHash, operation, params).build(); + + // return getInvokeResult(script, signers); + }, + [RPC_METHODS.invokescript]: async (args) => { + const script = JSONHelper.readBuffer(args[0]); + const signers = args[1] !== undefined ? Signers.fromJSON(args[1]) : undefined; + + return getInvokeResult(script, signers); + }, + [RPC_METHODS.getunclaimedgas]: async (args) => { + const address = args[0]; + const scriptHash = crypto.addressToScriptHash(address); + const isValidAddress = common.isUInt160(scriptHash); + if (!isValidAddress) { + throw new JSONRPCError(-100, 'Invalid address'); + } + + const unclaimed = await native.NEO.unclaimedGas( + { storages: blockchain.storages }, + address, + blockchain.currentBlockIndex + 1, + ); + + return { + unclaimed, + address: JSONHelper.writeUInt160(address), + }; + }, + // Utilities [RPC_METHODS.validateaddress]: async (args) => { let scriptHash; try { @@ -399,39 +562,51 @@ 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.getversion]: async () => { - const { tcpPort: tcpport, wsPort: wsport, nonce, useragent } = node.version; - - return { - tcpport, - wsport, - nonce, - useragent, - }; + [RPC_METHODS.getapplicationlog]: async () => { + // TODO: this is very similar to our "getinvocationdata" + throw new JSONRPCError(-101, 'Not implemented'); }, - [RPC_METHODS.gettransactionheight]: async (args) => { - const hash = JSONHelper.readUInt256(args[0]); - const transaction = await blockchain.transactionData.tryGet({ hash }); - if (transaction === undefined) { - throw new JSONRPCError(-100, 'Unknown transaction'); - } - return transaction.startHeight; + // Wallet + [RPC_METHODS.closewallet]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); }, - [RPC_METHODS.getapplicationlog]: async () => { - // TODO: this is very similar to our "getinvocationdata" + [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 hash = JSONHelper.readUInt160(args[0]); const SEVEN_DAYS_IN_MS = 7 * 24 * 60 * 60 * 1000; @@ -482,70 +657,42 @@ export const createHandler = ({ address: common.uInt160ToString(hash), }; }, - [RPC_METHODS.getblockheader]: async (args) => { - let hashOrIndex = args[0]; - if (typeof args[0] === 'string') { - hashOrIndex = JSONHelper.readUInt256(args[0]); - } - const header = await blockchain.header.tryGet({ hashOrIndex }); - if (header === undefined) { - throw new JSONRPCError(-100, 'Unknown block'); - } - - return header.serializeWire().toString('hex'); - }, - [RPC_METHODS.getunclaimedgas]: async (args) => { - const address = JSONHelper.readUInt160(args[0]); - const isValidAddress = common.isUInt160(address); - if (!isValidAddress) { - throw new JSONRPCError(-100, 'Invalid address'); - } + // Settings + [RPC_METHODS.updatesettings]: async (args) => { + const { settings } = blockchain; + const newSettings = { + ...settings, + secondsPerBlock: args[0].secondsPerBlock, + }; - // TODO: implement native contracts in blockchain for getting unclaimed gas - // const unclaimed = await blockchain.getUnclaimedGas(address); - // result = unclaimed.toString(); + blockchain.updateSettings(newSettings); - return { - unclaimed: '0', // TODO: replace - address: JSONHelper.writeUInt160(address), - }; - }, - [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'); + return true; }, + [RPC_METHODS.getsettings]: async () => ({ + millisecondsPerBlock: blockchain.settings.millisecondsPerBlock, + }), - // Extended + // NEO•ONE + // TODO: I think we can get away with not using this but we need to make the change in the provider + // [RPC_METHODS.testinvocation]: async (args) => { + // const transaction = Transaction.deserializeWire({ + // context: blockchain.deserializeWireContext, + // buffer: JSONHelper.readBuffer(args[0]), + // }); + + // try { + // const receipt = blockchain.invokeTransaction(transaction); + + // return { + // result: receipt.result.serializeJSON(blockchain.serializeJSONContext), + // actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), + // }; + // } catch { + // throw new JSONRPCError(-103, 'Invalid Transaction'); + // } + // }, [RPC_METHODS.relaytransaction]: async (args): Promise => { const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, @@ -581,49 +728,6 @@ export const createHandler = ({ throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); } }, - [RPC_METHODS.relaystrippedtransaction]: async (args): Promise => { - const verificationTransaction = Transaction.deserializeWire({ - context: blockchain.deserializeWireContext, - buffer: JSONHelper.readBuffer(args[0]), - }); - - const relayTransaction = Transaction.deserializeWire({ - context: blockchain.deserializeWireContext, - buffer: JSONHelper.readBuffer(args[1]), - }); - - try { - const [transactionJSON, result] = await Promise.all([ - relayTransaction.serializeJSON(blockchain.serializeJSONContext), - node.relayStrippedTransaction(verificationTransaction, relayTransaction, { - 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, - })), - }, - }; - - return { - ...resultJSON, - transaction: transactionJSON, - }; - } catch (error) { - throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); - } - }, [RPC_METHODS.getallstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); const contract = await blockchain.contract.tryGet({ hash }); @@ -634,23 +738,7 @@ export const createHandler = ({ return items.map((item) => item.serializeJSON(blockchain.serializeJSONContext)); }, - [RPC_METHODS.testinvocation]: async (args) => { - const transaction = Transaction.deserializeWire({ - context: blockchain.deserializeWireContext, - buffer: JSONHelper.readBuffer(args[0]), - }); - try { - const receipt = await blockchain.invokeTransaction(transaction); - - return { - result: receipt.result.serializeJSON(blockchain.serializeJSONContext), - actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), - }; - } catch { - throw new JSONRPCError(-103, 'Invalid Transaction'); - } - }, [RPC_METHODS.gettransactionreceipt]: async (args) => { const transactionData = await blockchain.transactionData.tryGet({ hash: JSONHelper.readUInt256(args[0]), @@ -692,6 +780,7 @@ export const createHandler = ({ return result; }, + [RPC_METHODS.getinvocationdata]: async (args) => { const transaction = await blockchain.transaction.get({ hash: JSONHelper.readUInt256(args[0]), @@ -705,14 +794,6 @@ export const createHandler = ({ return result.invocationData; }, - [RPC_METHODS.getvalidators]: async () => { - // TODO: implement with NativeContract.NEO - // blockchain.getValidators() - - const validators = await blockchain.validator.all$.pipe(toArray()).toPromise(); - - return validators.map((validator) => validator.serializeJSON(blockchain.serializeJSONContext)); - }, [RPC_METHODS.getnetworksettings]: async () => { const settings = blockchain.settings; // TODO: change blockchain.settings to be set from NativeContracts @@ -741,20 +822,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-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 46cda39068..5a9bd7bebd 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -16,7 +16,7 @@ private enum EngineMethod create, execute, loadscript, - loadclonedcontext, + setinstructionpointer, getvmstate, getresultstack, gettrigger, @@ -43,9 +43,9 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) CallFlags flag = (CallFlags)((byte)args.flag); return this._loadScript(script, flag); - case EngineMethod.loadclonedcontext: + case EngineMethod.setinstructionpointer: int position = (int)args.position; - return this._loadClonedContext(position); + return this._setInstructionPointer(position); case EngineMethod.getvmstate: return this._getVMState(); @@ -102,7 +102,7 @@ private bool _loadScript(Script script, CallFlags flag) return true; } - private bool _loadClonedContext(int initialPosition) + private bool _setInstructionPointer(int initialPosition) { this.isEngineInitialized(); this.engine.LoadClonedContext(initialPosition); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index e92c7507e1..4a4ea9c1e0 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -27,6 +27,7 @@ enum SnapshotMethod 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, } @@ -106,6 +107,9 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) return true; + case SnapshotMethod.snapshot_has_persisting_block: + return this.selectSnapshot(args.snapshot).PersistingBlock != null; + case SnapshotMethod.snapshot_reset: this.resetSnapshots(); diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index 90f65ca459..624b651e29 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,4 +1,4 @@ -import { common } from '@neo-one/client-common'; +import { common, VMState } from '@neo-one/client-common'; import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; @@ -26,9 +26,11 @@ export class ApplicationEngine { } public get trigger() { - return this.dispatch({ - method: 'gettrigger', - }); + return TriggerType[ + this.dispatch({ + method: 'gettrigger', + }) + ]; } public get gasConsumed() { @@ -44,9 +46,11 @@ export class ApplicationEngine { } public get state() { - return this.dispatch({ - method: 'getvmstate', - }); + return VMState[ + this.dispatch({ + method: 'getvmstate', + }) + ]; } public get resultStack() { @@ -81,9 +85,11 @@ export class ApplicationEngine { } public execute() { - return this.dispatch({ - method: 'execute', - }); + return VMState[ + this.dispatch({ + method: 'execute', + }) + ]; } public loadScript(script: Buffer, flag = CallFlags.All) { @@ -102,9 +108,9 @@ export class ApplicationEngine { }); } - public loadClonedContext(position: number) { + public setInstructionPointer(position: number) { return this.dispatch({ - method: 'loadclonedcontext', + method: 'setinstructionpointer', args: { position }, }); } diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index 1e745cbc67..cffc0c3fc2 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -47,8 +47,14 @@ export class Dispatcher { ) { const engine = new ApplicationEngine(this); engine.create(options); - const result = func(engine); - this.disposeEngine(); + let result: T; + try { + result = func(engine); + } catch (error) { + throw error; + } finally { + this.disposeEngine(); + } return result; } diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 8ee5577520..862c3e877c 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -22,6 +22,6 @@ export interface EngineMethods extends DefaultMethods { readonly getnotifications: DispatchMethod; // methods readonly execute: DispatchMethod; - readonly loadclonedcontext: DispatchMethod; + readonly setinstructionpointer: 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 index 4d7b703b2a..e7e9214d24 100644 --- a/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts @@ -43,5 +43,6 @@ export interface SnapshotMethods extends DefaultMethods { 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/SnapshotHandler.ts b/packages/neo-one-node-vm/src/SnapshotHandler.ts index 62e5887ed1..e885ba5a58 100644 --- a/packages/neo-one-node-vm/src/SnapshotHandler.ts +++ b/packages/neo-one-node-vm/src/SnapshotHandler.ts @@ -96,6 +96,15 @@ export class SnapshotHandler { }); } + public hasPersistingBlock() { + return this.dispatch({ + method: 'snapshot_has_persisting_block', + args: { + snapshot: this.snapshot, + }, + }); + } + public commit(partial?: SnapshotPartial) { return this.dispatch({ method: 'snapshot_commit', diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index 2097cfbf4d..c7b70b3887 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -115,6 +115,7 @@ export const startFullNode = async ({ const node = new Node({ blockchain, + native, options: nodeOptions, createNetwork: (options) => new Network({ From f5ba7ea14a0ef07d3c953dd2e851333afe2997c4 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 12 Oct 2020 11:10:33 -0700 Subject: [PATCH 104/141] feat(storage): fixup storage.find methods (#2181) --- packages/neo-one-node-core/src/Storage.ts | 2 +- packages/neo-one-node-core/src/utils/utils.ts | 1 + .../neo-one-node-native/src/KeyBuilder.ts | 17 +-------- packages/neo-one-node-native/src/NEOToken.ts | 4 +-- .../neo-one-node-storage-common/package.json | 2 ++ .../neo-one-node-storage-common/src/keys.ts | 35 +++++++++++++++++-- .../src/levelUpStorage.ts | 1 + .../neo-one-node-storage-levelup/src/read.ts | 11 ++++-- 8 files changed, 49 insertions(+), 24 deletions(-) diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 1db09b642f..ceb6d2415b 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -36,7 +36,7 @@ export interface ReadAllStorage extends ReadStorage { } export interface ReadFindStorage extends ReadStorage { - readonly find$: (range: StreamOptions) => Observable>; + readonly find$: (lookup: Buffer) => Observable>; } export interface ReadGetAllStorage extends ReadStorage { diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 35808e0d92..355116df0a 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -3,6 +3,7 @@ import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { randomBytes } from 'crypto'; import _ from 'lodash'; +import { StreamOptions } from '../Storage'; const toASCII = (bytes: Buffer) => { let result = ''; diff --git a/packages/neo-one-node-native/src/KeyBuilder.ts b/packages/neo-one-node-native/src/KeyBuilder.ts index b3cd75131a..03750d6348 100644 --- a/packages/neo-one-node-native/src/KeyBuilder.ts +++ b/packages/neo-one-node-native/src/KeyBuilder.ts @@ -1,4 +1,4 @@ -import { SerializableWire, StorageKey, StreamOptions } from '@neo-one/node-core'; +import { SerializableWire, StorageKey } from '@neo-one/node-core'; export class KeyBuilder { private readonly id: number; @@ -30,21 +30,6 @@ export class KeyBuilder { return StorageKey.createSearchPrefix(this.id, this.mutableBuffer); } - public toSearchRange(): StreamOptions { - const prefix = this.mutableBuffer; - const lastBit = prefix[prefix.length - 1]; - const ltePrefix = Buffer.concat([prefix.slice(0, prefix.length - 1), Buffer.from([lastBit + 1])]); - if (ltePrefix.length !== prefix.length) { - // TODO: implement a real error, this is a failsafe because buffer manipulation - throw new Error('Unexpected error constructing search range'); - } - - return { - gte: StorageKey.createSearchPrefix(this.id, prefix), - lte: StorageKey.createSearchPrefix(this.id, ltePrefix), - }; - } - public toStorageKey(): StorageKey { return new StorageKey({ id: this.id, diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts index cf48d4652c..ec09f62fde 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -37,10 +37,10 @@ export class NEOToken extends NEP5NativeContract { } public async getCandidates(storage: NativeContractStorageContext): Promise { - const searchRange = this.createStorageKey(this.prefixes.candidate).toSearchRange(); + const searchKey = this.createStorageKey(this.prefixes.candidate).toStorageKey().serializeWire(); return storage.storages - .find$(searchRange) + .find$(searchKey) .pipe( map(({ key, value }) => ({ point: common.bufferToECPoint(key.key.slice(1)), diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index 384c1816c9..876e8d4fc2 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -16,10 +16,12 @@ "@neo-one/client-common": "^2.7.0", "@neo-one/node-core": "^2.7.0", "@neo-one/utils": "^2.6.1", + "bn.js": "^5.0.0", "tslib": "^1.10.0" }, "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/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index 2ebcbbd1c3..94ee2d0934 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -1,5 +1,6 @@ -import { BinaryWriter, common, UInt160, UInt256 } from '@neo-one/client-common'; -import { BlockKey, StorageKey } from '@neo-one/node-core'; +import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; +import { BlockKey, StorageKey, StreamOptions } from '@neo-one/node-core'; +import { BN } from 'bn.js'; enum Prefix { Block = 0x01, @@ -32,6 +33,33 @@ const serializeHeaderHashListKey = (key: number) => { return writer.toBuffer(); }; +/* crude method but it does what we want it to do */ +const generateSearchRange = (lookupKey: Buffer): Required => { + const asBN = new BN(lookupKey, 'le'); + 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): Required => { + 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') { @@ -82,11 +110,14 @@ const maxBlockKey = createBlockKey({ hashOrIndex: common.MAX_UINT256 }); const minHeaderHashListKey = createHeaderHashListKey(0); const maxHeaderHashListKey = createHeaderHashListKey(0xffffffff); +const getStorageSearchRange = createGetSearchRange(Prefix.Storage); + export const keys = { createBlockKey, createTransactionKey, createContractKey, createStorageKey, + getStorageSearchRange, createHeaderHashListKey, blockHashIndexKey, headerHashIndexKey, diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 4bf7fd3d8d..1402d5a956 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -103,6 +103,7 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage storages: read.createReadFindStorage({ db, + getSearchRange: keys.getStorageSearchRange, serializeKey: keys.createStorageKey, deserializeKey: (buffer) => StorageKey.deserializeWire({ diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index 895626f881..c27df618aa 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -126,26 +126,30 @@ export function createReadAllStorage({ export function createFind$({ db, + getSearchRange, deserializeKey, deserializeValue, }: { readonly db: LevelUp; + readonly getSearchRange: (key: Buffer) => StreamOptions; readonly deserializeKey: (key: Buffer) => Key; readonly deserializeValue: (value: Buffer) => Value; -}): (range: StreamOptions) => Observable> { - return (range: StreamOptions) => - streamToObservable>(() => db.createReadStream(range)).pipe( +}): (lookup: Buffer) => Observable> { + return (lookup: Buffer) => + streamToObservable>(() => db.createReadStream(getSearchRange(lookup))).pipe( map(({ key, value }) => ({ key: deserializeKey(key), value: deserializeValue(value) })), ); } export function createReadFindStorage({ db, + getSearchRange, serializeKey, deserializeKey, deserializeValue, }: { readonly db: LevelUp; + readonly getSearchRange: (key: Buffer) => StreamOptions; readonly serializeKey: SerializeKey; readonly deserializeKey: (value: Buffer) => Key; readonly deserializeValue: (value: Buffer) => Value; @@ -161,6 +165,7 @@ export function createReadFindStorage({ tryGet: readStorage.tryGet, find$: createFind$({ db, + getSearchRange, deserializeKey, deserializeValue, }), From 559723aef3d6650a431b184be618ee624eb6f638 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 12 Oct 2020 15:31:41 -0700 Subject: [PATCH 105/141] feat(node): We can now persist the first 3 blocks (and counting!) (#2179) --- .../rush/browser-approved-packages.json | 4 + common/config/rush/yarn.lock | 57 +++- .../src/ScriptBuilder.ts | 2 +- .../src/__tests__/common.test.ts | 1 + packages/neo-one-client-common/src/common.ts | 6 +- .../src/models/Serializable.ts | 4 +- .../neo-one-client-common/src/models/types.ts | 12 +- .../neo-one-node-blockchain/src/Blockchain.ts | 66 +++-- .../src/PersistingBlockchain.ts | 6 +- .../src/StorageCache.ts | 33 ++- .../neo-one-node-blockchain/src/verify.ts | 12 +- packages/neo-one-node-core/src/Block.ts | 5 +- packages/neo-one-node-core/src/BlockBase.ts | 13 +- packages/neo-one-node-core/src/Blockchain.ts | 3 +- .../neo-one-node-core/src/ContractState.ts | 2 +- .../neo-one-node-core/src/HashIndexState.ts | 2 +- packages/neo-one-node-core/src/Header.ts | 12 +- .../neo-one-node-core/src/Serializable.ts | 17 ++ packages/neo-one-node-core/src/Signers.ts | 5 +- packages/neo-one-node-core/src/StorageKey.ts | 4 +- packages/neo-one-node-core/src/Verifiable.ts | 5 +- .../src/manifest/ContractManifest.ts | 4 +- .../src/manifest/ContractMethodDescriptor.ts | 2 +- .../src/transaction/Transaction.ts | 13 +- packages/neo-one-node-core/src/utils/utils.ts | 15 ++ packages/neo-one-node-core/src/vm.ts | 7 +- packages/neo-one-node-native/src/NEOToken.ts | 3 +- .../neo-one-node-neo-settings/src/common.ts | 3 +- .../src/createTest.ts | 73 ++--- .../neo-one-node-storage-levelup/package.json | 2 + .../src/__tests__/rocksDBStorage.test.ts | 47 ++++ .../src/levelUpStorage.ts | 1 + .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 48 +++- .../lib/Dispatcher.Snapshot.cs | 5 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 12 +- .../neo-one-node-vm/lib/Dispatcher.csproj | 2 + .../neo-one-node-vm/lib/SnapshotHelpers.cs | 3 - .../neo-one-node-vm/lib/Storage/Level/DB.cs | 90 ------- .../lib/Storage/Level/Helper.cs | 70 ----- .../lib/Storage/Level/Iterator.cs | 75 ------ .../lib/Storage/Level/LevelDBException.cs | 12 - .../lib/Storage/Level/Native.cs | 251 ------------------ .../lib/Storage/Level/Options.cs | 87 ------ .../lib/Storage/Level/ReadOptions.cs | 39 --- .../lib/Storage/Level/Snapshot.cs | 24 -- .../lib/Storage/Level/WriteBatch.cs | 29 -- .../lib/Storage/RocksDB/Options.cs | 25 ++ .../RocksDBStore.cs} | 11 +- .../lib/Storage/RocksDB/Settings.cs | 12 + .../lib/Storage/RocksDB/Snapshot.cs | 76 ++++++ .../lib/Storage/RocksDB/Store.cs | 92 +++++++ .../neo-one-node-vm/lib/Storage/Snapshot.cs | 56 ---- packages/neo-one-node-vm/lib/Storage/Store.cs | 55 ---- .../neo-one-node-vm/src/ApplicationEngine.ts | 12 +- .../src/Methods/EngineMethods.ts | 4 +- .../src/__tests__/Dispatcher.test.ts | 13 +- packages/neo-one-node/package.json | 7 + packages/neo-one-node/src/__data__/data.ts | 64 +++++ packages/neo-one-node/src/__data__/index.ts | 1 + .../neo-one-node/src/__data__/jsonBlocks.ts | 100 +++++++ .../src/__tests__/blockchain.test.ts | 63 +++++ rush.json | 2 +- 62 files changed, 836 insertions(+), 945 deletions(-) create mode 100644 packages/neo-one-node-storage-levelup/src/__tests__/rocksDBStorage.test.ts delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/DB.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/Helper.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/Native.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/Options.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs create mode 100644 packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs rename packages/neo-one-node-vm/lib/Storage/{LevelDBStore.cs => RocksDB/RocksDBStore.cs} (54%) create mode 100644 packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs create mode 100644 packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs create mode 100644 packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Snapshot.cs delete mode 100644 packages/neo-one-node-vm/lib/Storage/Store.cs create mode 100644 packages/neo-one-node/src/__data__/data.ts create mode 100644 packages/neo-one-node/src/__data__/index.ts create mode 100644 packages/neo-one-node/src/__data__/jsonBlocks.ts create mode 100644 packages/neo-one-node/src/__tests__/blockchain.test.ts diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 156ea3c116..60b87ffe43 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -1054,6 +1054,10 @@ "name": "rimraf", "allowedCategories": [ "tools" ] }, + { + "name": "rocksdb", + "allowedCategories": [ "production" ] + }, { "name": "rollup", "allowedCategories": [ "tools" ] diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index f38f2c56c9..79d998f9b4 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2501,10 +2501,14 @@ 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" 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" rxjs "^6.5.3" tslib "^1.10.0" @@ -2556,6 +2560,7 @@ 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": @@ -2579,6 +2584,18 @@ 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" @@ -2657,12 +2674,15 @@ 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" gulp "~4.0.2" levelup "4.1.0" memdown "^5.0.0" + rocksdb "^4.1.0" rxjs "^6.5.3" tslib "^1.10.0" @@ -2702,13 +2722,18 @@ 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": @@ -3954,6 +3979,14 @@ 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.1" resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.1.tgz#e0248be936ece791a82db1a57f3fb5f7c87e8172" @@ -4009,13 +4042,6 @@ "@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== - dependencies: - "@types/node" "*" - "@types/toposort@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/toposort/-/toposort-2.0.3.tgz#dc490842b77c3e910c8d727ff0bdb2fb124cb41b" @@ -4364,6 +4390,14 @@ abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1: 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" @@ -17786,6 +17820,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" diff --git a/packages/neo-one-client-common/src/ScriptBuilder.ts b/packages/neo-one-client-common/src/ScriptBuilder.ts index a4bcb09eec..8c197bd497 100644 --- a/packages/neo-one-client-common/src/ScriptBuilder.ts +++ b/packages/neo-one-client-common/src/ScriptBuilder.ts @@ -52,7 +52,7 @@ export class ScriptBuilder extends BaseScriptBuilder { this.emitPushParams(...params); this.emitPushParam(params.length); - return params.length === 0 ? this.emitOp('PACK') : this.emitOp('NEWARRAY'); + return params.length !== 0 ? this.emitOp('PACK') : this.emitOp('NEWARRAY'); } // tslint:disable-next-line readonly-array 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/common.ts b/packages/neo-one-client-common/src/common.ts index 5894a17551..90d621319c 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -220,9 +220,9 @@ const TEN_THOUSAND_FIXED8 = fixed8FromDecimal(10000); const ONE_HUNDRED_MILLION_FIXED8 = fixed8FromDecimal(100000000); const nativeHashes = { - GAS: hexToUInt160('bcaf41d684c7d4ad6ee0d99da9707b9d1f0c8e66'), - NEO: hexToUInt160('25059ecb4878d3a875f91c51ceded330d4575fde'), - Policy: hexToUInt160('e9ff4ca7cc252e1dfddb26315869cd79505906ce'), + GAS: hexToUInt160('0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc'), + NEO: hexToUInt160('0xde5f57d430d3dece511cf975a8d37848cb9e0525'), + Policy: hexToUInt160('0xce06595079cd69583126dbfd1d2e25cca74cffe9'), }; export const common = { diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 114cac96fd..4da4061b9c 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -23,7 +23,9 @@ export interface SerializableJSON { * from `Blockchain` or `Settings` */ -export const createGetHashData = (serializeWire: () => Buffer, magic = 5195086) => () => { +// mainnet: 5195086 +// testnet: 1951352142 +export const createGetHashData = (serializeWire: () => Buffer, magic = 1951352142) => () => { const writer = new BinaryWriter(); writer.writeUInt32LE(magic); writer.writeBytes(serializeWire()); diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 3ee5dbf8b7..36eea04a2f 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -288,13 +288,13 @@ export interface TransactionReceiptJSON { } export type Wildcard = '*'; -export type WildcardContainerJSON = readonly T[] | Wildcard; +export type WildcardContainerJSON = readonly string[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; readonly parameters: readonly ContractParameterDefinitionJSON[]; readonly offset: number; - readonly returnType: ContractParameterTypeJSON; + readonly returntype: ContractParameterTypeJSON; } export interface ContractEventDescriptorJSON { @@ -322,7 +322,7 @@ export interface ContractPermissionDescriptorJSON { export interface ContractPermissionJSON { readonly contract: ContractPermissionDescriptorJSON; - readonly methods: WildcardContainerJSON; + readonly methods: WildcardContainerJSON; } export interface ContractManifestJSON { @@ -332,13 +332,13 @@ export interface ContractManifestJSON { readonly abi: ContractABIJSON; readonly groups: readonly ContractGroupJSON[]; readonly permissions: readonly ContractPermissionJSON[]; - readonly trusts: WildcardContainerJSON; - readonly safeMethods: WildcardContainerJSON; + readonly trusts: WildcardContainerJSON; + readonly safemethods: WildcardContainerJSON; readonly features: { readonly storage: boolean; readonly payable: boolean; }; - readonly supportedStandards: readonly string[]; + readonly supportedstandards: readonly string[]; readonly extra?: JSONObject; } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 27873e43e0..476bc234ee 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -4,8 +4,10 @@ import { Blockchain as BlockchainType, BlockchainSettings, CallReceipt, + Change, ConsensusPayload, DeserializeWireContext, + HashIndexState, Header, Mempool, NativeContainer, @@ -42,8 +44,8 @@ export interface CreateBlockchainOptions { } export interface BlockchainOptions extends CreateBlockchainOptions { - // readonly currentBlock: Block | undefined; - // readonly previousBlockIndex: HashIndexState | undefined; + readonly currentBlock?: Block; + // readonly previousBlockIndex?: number; // tslint:disable-next-line: readonly-array readonly headerIndex: UInt256[]; } @@ -55,7 +57,6 @@ interface Entry { readonly verify: boolean; } -// TODO: revisit this with more context into how the headerIndex is being used. export const recoverHeaderIndex = async (storage: Storage) => { const initHeaderIndex = await storage.headerHashList.all$ .pipe( @@ -93,6 +94,24 @@ export const recoverHeaderIndex = async (storage: Storage) => { export class Blockchain { public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { const headerIndex = await recoverHeaderIndex(storage); + if (headerIndex.length > 0) { + const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: headerIndex[headerIndex.length - 1] }); + if (currentBlockTrimmed === undefined) { + throw new Error('testing'); + } + + const currentBlock = await currentBlockTrimmed.getBlock(storage.transactions); + + return new Blockchain({ + headerIndex, + settings, + storage, + native, + vm, + currentBlock, + }); + } + const blockchain = new Blockchain({ headerIndex, settings, @@ -101,14 +120,7 @@ export class Blockchain { vm, }); - if (headerIndex.length === 0) { - await blockchain.persistBlock({ block: settings.genesisBlock }); - - return blockchain; - } - - // TODO: see if we need something similar and how we'll implement it. - // blockchain.loadMempoolPolicy(storage); + await blockchain.persistBlock({ block: settings.genesisBlock }); return blockchain; } @@ -117,10 +129,10 @@ export class Blockchain { public readonly verifyWitnesses = verifyWitnesses; public readonly settings: BlockchainSettings; + public readonly onPersistNativeContractScript: Buffer; // tslint:disable-next-line: readonly-array private readonly headerIndex: UInt256[]; - private readonly onPersistNativeContractScript: Buffer; private readonly storage: Storage; private readonly native: NativeContainer; private readonly vm: VM; @@ -150,6 +162,7 @@ export class Blockchain { this.deserializeWireContext = { messageMagic: this.settings.messageMagic, }; + this.mutableCurrentBlock = options.currentBlock; this.start(); } @@ -403,7 +416,7 @@ export class Blockchain { return this.runEngineWrapper({ script, snapshot: 'main', - container: signers === undefined ? undefined : { type: 'Signers', buffer: signers.serializeWire() }, + container: signers, gas: 10, }); } @@ -416,7 +429,7 @@ export class Blockchain { { trigger: TriggerType.Application, gas, - // container: transaction, //TODO: implement this + // container: transaction, snapshot: 'main', testMode: true, }, @@ -567,6 +580,27 @@ export class Blockchain { this.mutableStoredHeaderCount += countIncrement; } + private async updateBlockMetadata(block: Block): Promise { + const newHashIndexState = new HashIndexState({ hash: block.hash, index: block.index }); + const updateBlockHashIndex: Change = { + type: 'add', + change: { type: 'blockHashIndex', value: newHashIndexState }, + subType: 'update', + }; + + const updateHeaderHashIndex: Change = { + type: 'add', + change: { type: 'headerHashIndex', value: newHashIndexState }, + subType: 'update', + }; + + this.mutablePreviousBlock = this.mutableCurrentBlock; + this.mutableCurrentBlock = block; + this.mutableCurrentHeader = block.header; + + return this.storage.commit([updateBlockHashIndex, updateHeaderHashIndex]); + } + private async persistBlockInternal(block: Block, verify?: boolean): Promise { if (verify) { await this.verifyBlock(block); @@ -583,9 +617,7 @@ export class Blockchain { await this.storage.commitBatch(changeBatch); await this.saveHeaderHashList(); - this.mutablePreviousBlock = this.mutableCurrentBlock; - this.mutableCurrentBlock = block; - this.mutableCurrentHeader = block.header; + await this.updateBlockMetadata(block); } private createPersistingBlockchain(): PersistingBlockchain { diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index 75f242bcb1..4539eb03f3 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -90,7 +90,7 @@ export class PersistingBlockchain { (engine) => { engine.loadScript(this.onPersistNativeContractScript); const result = engine.execute(); - if (result !== 'HALT') { + if (result !== VMState.HALT) { throw new PersistNativeContractsError(); } @@ -105,8 +105,6 @@ export class PersistingBlockchain { main.clone(); const executedTransactions = this.persistTransactions(block, main, clone); - - main.changeBlockHashIndex(block.index, block.hash); const finalApplicationsExecuted = appsExecuted.concat(executedTransactions); return { changeBatch: main.getChangeSet(), applicationsExecuted: finalApplicationsExecuted }; @@ -170,7 +168,7 @@ export class PersistingBlockchain { (engine) => { engine.loadScript(transaction.script); const state = engine.execute(); - if (state === 'HALT') { + if (state === VMState.HALT) { clone.deleteTransaction(transaction.hash); clone.addTransaction(transaction, index, VMState.HALT); clone.commit(); diff --git a/packages/neo-one-node-blockchain/src/StorageCache.ts b/packages/neo-one-node-blockchain/src/StorageCache.ts index 0896714e00..57d0bdf7d2 100644 --- a/packages/neo-one-node-blockchain/src/StorageCache.ts +++ b/packages/neo-one-node-blockchain/src/StorageCache.ts @@ -1,4 +1,4 @@ -import { AddChange, Change, ChangeSet, DeleteChange, ReadStorage } from '@neo-one/node-core'; +import { AddChange, Change, ChangeSet, DeleteChange, ReadMetadataStorage, ReadStorage } from '@neo-one/node-core'; interface DeleteMetadataTrackedChanged { readonly type: 'delete'; @@ -261,3 +261,34 @@ export class ReadAddStorageCache extends ReadStorageCache { +// readonly readStorage: () => ReadMetadataStorage; +// readonly name: string; +// readonly createAddChange: CreateAddChange; +// } + +// 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) { + +// } +// } + +// export class ReadMetaDataStorageCache extends BaseReadMetadataStorageCache { + +// } + +// export class ReadUpdateMetadataStorageCache extends ReadMetaDataStorageCache { +// public readonly update: (value: Value) => Promise; + +// public constructor(options: ReadUpdateMetadataStorageCacheOptions) { +// super({ +// readStorage: +// }) +// } +// } diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index de22c67a88..18adedd6e9 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -5,7 +5,7 @@ import { ContractMethodDescriptor, ExecuteScriptResult, NativeContainer, - SerializableWire, + SerializableContainer, TriggerType, Verifiable, VM, @@ -44,7 +44,7 @@ const getApplicationEngineVerifyOptions = async ( } // tslint:disable-next-line: possible-timing-attack TODO: look into this `possible-timing-attack` warning - if (hash !== scriptHash) { + if (!hash.equals(scriptHash)) { throw new WitnessVerifyError(); } @@ -56,7 +56,7 @@ const getApplicationEngineVerifyOptions = async ( export const verifyWithApplicationEngine = ( vm: VM, - verifiable: Verifiable & SerializableWire, + verifiable: Verifiable & SerializableContainer, verification: Buffer, index: number, gas: number, @@ -64,7 +64,7 @@ export const verifyWithApplicationEngine = ( init?: ContractMethodDescriptor, ): ExecuteScriptResult => vm.withApplicationEngine( - { trigger: TriggerType.Verification, container: verifiable, snapshot: 'main', gas, testMode: true }, + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas, testMode: true }, (engine) => { engine.loadScript(verification, CallFlags.None); engine.setInstructionPointer(offset); @@ -92,7 +92,7 @@ export const tryVerifyHash = async ( hash: UInt160, index: number, storage: BlockchainStorage, - verifiable: Verifiable & SerializableWire, + verifiable: Verifiable & SerializableContainer, gas: number, ): Promise => { const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; @@ -112,7 +112,7 @@ export const tryVerifyHash = async ( export const verifyWitnesses = async ( vm: VM, - verifiable: Verifiable & SerializableWire, + verifiable: Verifiable & SerializableContainer, storage: BlockchainStorage, native: NativeContainer, gasIn: number, diff --git a/packages/neo-one-node-core/src/Block.ts b/packages/neo-one-node-core/src/Block.ts index b16b457536..f6c8fa23fa 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -15,8 +15,8 @@ import { Header } from './Header'; import { DeserializeWireBaseOptions, DeserializeWireOptions, + SerializableContainer, SerializableJSON, - SerializableWire, SerializeJSONContext, } from './Serializable'; import { Transaction } from './transaction'; @@ -61,7 +61,7 @@ const getCombinedModels = ( return init.concat(transactions); }; -export class Block extends BlockBase implements SerializableWire, SerializableJSON { +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 { @@ -111,7 +111,6 @@ export class Block extends BlockBase implements SerializableWire, SerializableJS 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[]; diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 7ca043cae0..947a38f15c 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -7,7 +7,6 @@ import { InvalidFormatError, IOHelper, JSONHelper, - SerializableWire, UInt160, UInt256, UInt256Hex, @@ -15,7 +14,14 @@ import { import { BN } from 'bn.js'; import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; -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'; @@ -32,7 +38,7 @@ export interface BlockBaseAdd { readonly hash?: UInt256; } -export abstract class BlockBase implements EquatableKey, SerializableWire, Verifiable { +export abstract class BlockBase implements EquatableKey, SerializableContainer, Verifiable { public static deserializeWireBase(options: DeserializeWireBaseOptions): BlockBaseAdd { const { version, previousHash, merkleRoot, timestamp, index, nextConsensus } = this.deserializeWireBaseUnsigned( options, @@ -74,6 +80,7 @@ export abstract class BlockBase implements EquatableKey, SerializableWire, Verif }; } + public readonly type: SerializableContainerType = 'Block'; public readonly version: number; public readonly previousHash: UInt256; public readonly merkleRoot: UInt256; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index eeeb823b55..36318462fd 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -28,8 +28,9 @@ export interface Blockchain extends BlockchainStorage { readonly block$: Observable; readonly isPersistingBlock: boolean; readonly verifyOptions: VerifyOptions; + readonly onPersistNativeContractScript: Buffer; - readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; + readonly persistBlock: (options: { readonly block: Block; readonly verify?: boolean }) => Promise; readonly verifyWitnesses: VerifyWitnesses; readonly verifyBlock: (block: Block) => Promise; diff --git a/packages/neo-one-node-core/src/ContractState.ts b/packages/neo-one-node-core/src/ContractState.ts index fad174ad4d..84d38f5b0d 100644 --- a/packages/neo-one-node-core/src/ContractState.ts +++ b/packages/neo-one-node-core/src/ContractState.ts @@ -15,7 +15,7 @@ export type ContractKey = UInt160; export class ContractState extends ContractStateModel { public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractState { const { reader } = options; - const id = reader.readUInt32LE(); + const id = reader.readInt32LE(); const script = reader.readVarBytesLE(); const manifest = ContractManifest.deserializeWireBase(options); diff --git a/packages/neo-one-node-core/src/HashIndexState.ts b/packages/neo-one-node-core/src/HashIndexState.ts index 7031c9b284..8fe044e926 100644 --- a/packages/neo-one-node-core/src/HashIndexState.ts +++ b/packages/neo-one-node-core/src/HashIndexState.ts @@ -33,7 +33,7 @@ export class HashIndexState implements SerializableWire { public readonly hash: UInt256; public readonly index: number; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt256 + IOHelper.sizeOfUInt32LE); diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index f20b29122b..dfcdb23be1 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, UInt256Hex } from '@neo-one/client-common'; +import { + BinaryWriter, + createSerializeWire, + HeaderJSON, + InvalidFormatError, + IOHelper, + UInt256Hex, +} from '@neo-one/client-common'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { DeserializeWireBaseOptions, @@ -39,9 +46,10 @@ export class Header extends BlockBase implements SerializableWire, SerializableJ 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, diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index 2ba510afbb..ad62249414 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -4,10 +4,27 @@ // import { Contract } from './Contract'; // import { InvocationResult } from './invocationResult'; // import { StorageChange } from './storageChange'; +import { SerializableWire } from '@neo-one/client-common'; import { BinaryReader } from './utils'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; +export type SerializableContainerType = 'Block' | 'Signers' | 'Transaction'; + +export interface SerializableContainer extends SerializableWire { + readonly type: SerializableContainerType; +} + +export interface SerializedScriptContainer { + readonly type: SerializableContainerType; + readonly buffer: Buffer; +} + +export const serializeScriptContainer = (item: SerializableContainer): SerializedScriptContainer => ({ + buffer: item.serializeWire(), + type: item.type, +}); + export interface DeserializeWireContext { readonly messageMagic: number; } diff --git a/packages/neo-one-node-core/src/Signers.ts b/packages/neo-one-node-core/src/Signers.ts index 74811ee585..a8ded45909 100644 --- a/packages/neo-one-node-core/src/Signers.ts +++ b/packages/neo-one-node-core/src/Signers.ts @@ -6,14 +6,14 @@ import { toWitnessScope, WitnessScopeModel, } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions } from './Serializable'; +import { DeserializeWireBaseOptions, SerializableContainer, SerializableContainerType } from './Serializable'; import { Signer } from './Signer'; export interface SignersAdd { readonly signers: readonly Signer[]; } -export class Signers { +export class Signers implements SerializableContainer { public static deserializeWireBase(options: DeserializeWireBaseOptions): Signers { const { reader } = options; const signers = reader.readArray(() => Signer.deserializeWireBase(options)); @@ -42,6 +42,7 @@ export class Signers { }); } + public readonly type: SerializableContainerType = 'Signers'; public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public readonly signers: readonly Signer[]; diff --git a/packages/neo-one-node-core/src/StorageKey.ts b/packages/neo-one-node-core/src/StorageKey.ts index 4609501b1a..60ae858c26 100644 --- a/packages/neo-one-node-core/src/StorageKey.ts +++ b/packages/neo-one-node-core/src/StorageKey.ts @@ -11,7 +11,7 @@ export interface StorageKeyAdd { export class StorageKey implements Equatable, SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageKey { const { reader } = options; - const id = reader.readUInt32LE(); + const id = reader.readInt32LE(); const key = reader.readBytes(reader.remaining); return new this({ @@ -57,7 +57,7 @@ export class StorageKey implements Equatable, SerializableWire { } public serializeWireBase(writer: BinaryWriter) { - writer.writeUInt32LE(this.id); + writer.writeInt32LE(this.id); writer.writeBytes(this.key); } } diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts index 8967249754..c74bc9953d 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -1,5 +1,6 @@ -import { SerializableWire, UInt160 } from '@neo-one/client-common'; +import { UInt160 } from '@neo-one/client-common'; import { NativeContainer } from './Native'; +import { SerializableContainer } from './Serializable'; import { BlockchainStorage } from './Storage'; import { VM } from './vm'; import { Witness } from './Witness'; @@ -19,7 +20,7 @@ export interface ExecuteScriptResult { export type VerifyWitnesses = ( vm: VM, - verifiable: Verifiable & SerializableWire, + verifiable: Verifiable & SerializableContainer, storage: BlockchainStorage, native: NativeContainer, gasIn: number, diff --git a/packages/neo-one-node-core/src/manifest/ContractManifest.ts b/packages/neo-one-node-core/src/manifest/ContractManifest.ts index 259f492d3c..4718370ab2 100644 --- a/packages/neo-one-node-core/src/manifest/ContractManifest.ts +++ b/packages/neo-one-node-core/src/manifest/ContractManifest.ts @@ -25,11 +25,11 @@ export class ContractManifest extends ContractManifestModel ContractGroup.deserializeJSON(group)); const { payable, storage: hasStorage } = json.features; const features = getContractProperties({ payable, hasStorage }); - const supportedStandards = json.supportedStandards; + 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 safeMethods = utils.wildCardFromJSON(json.safeMethods, (input) => input); + const safeMethods = utils.wildCardFromJSON(json.safemethods, (input) => input); const extra = json.extra; return new this({ diff --git a/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts index e34aeac261..a839d0814c 100644 --- a/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts +++ b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts @@ -7,7 +7,7 @@ export class ContractMethodDescriptor extends ContractMethodDescriptorModel ContractParameterDefinition.deserializeJSON(param)); const offset = json.offset; - const returnType = toContractParameterType(json.returnType); + const returnType = toContractParameterType(json.returntype); return new this({ name, diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 44cedaf394..80f859ad46 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -16,7 +16,12 @@ import { } from '@neo-one/client-common'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from '../Serializable'; import { Signer } from '../Signer'; import { TransactionVerificationContext } from '../TransactionVerificationContext'; import { BinaryReader, utils } from '../utils'; @@ -34,7 +39,9 @@ export interface VerboseData { readonly vmstate: VMStateJSON; } -export class Transaction extends TransactionModel implements SerializableWire, Verifiable { +export class Transaction + extends TransactionModel + implements SerializableContainer, Verifiable { public static readonly headerSize = IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt32LE + @@ -160,7 +167,7 @@ export class Transaction extends TransactionModel im return attribute; }); } - + public readonly type: SerializableContainerType = 'Transaction'; private readonly sizeInternal = utils.lazy( () => Transaction.headerSize + diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 355116df0a..02115724c8 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -200,6 +200,20 @@ const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: stri throw new InvalidFormatError(); }; +/* crude method but it does what we want it to do */ +const generateSearchRange = (lookupKey: Buffer): StreamOptions => { + 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, + }; +}; + export const utils = { ...clientUtils, toASCII, @@ -213,4 +227,5 @@ export const utils = { weightedAverage, weightedFilter, wildCardFromJSON, + generateSearchRange, }; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 2f92844d24..1d623dc6d9 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,6 +1,7 @@ import { UInt160, UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; +import { SerializableContainer } from './Serializable'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; @@ -18,7 +19,7 @@ export interface SerializedScriptContainer { } export interface Notification { - readonly scriptContainer: SerializedScriptContainer; + readonly scriptContainer: SerializableContainer; readonly scriptHash: UInt160; readonly eventName: string; readonly state: readonly StackItem[]; @@ -35,7 +36,7 @@ export type SnapshotName = 'main' | 'clone'; export interface ApplicationEngineOptions { readonly trigger: TriggerType; - readonly container?: SerializedScriptContainer; + readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; readonly gas: number; readonly testMode: boolean; @@ -44,7 +45,7 @@ export interface ApplicationEngineOptions { export interface RunEngineOptions { readonly script: Buffer; readonly snapshot: SnapshotName; - readonly container?: SerializedScriptContainer; + readonly container?: SerializableContainer; readonly persistingBlock?: Block; readonly offset?: number; readonly testMode?: boolean; diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts index ec09f62fde..c95b001e6f 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -87,7 +87,8 @@ export class NEOToken extends NEP5NativeContract { } public async getNextBlockValidators({ storages }: NativeContractStorageContext): Promise { - const storage = await storages.tryGet(this.createStorageKey(this.prefixes.nextValidators).toStorageKey()); + const key = this.createStorageKey(this.prefixes.nextValidators).toStorageKey(); + const storage = await storages.tryGet(key); if (storage === undefined) { return this.settings.standbyValidators; } diff --git a/packages/neo-one-node-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 396324955d..913e2aff1a 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -74,6 +74,7 @@ const getDeployNativeContracts = () => { version: 0, script, systemFee: new BN(0), + networkFee: new BN(0), signers: [ new Signer({ account: crypto.hash160(Buffer.from([Op.PUSH1])), @@ -92,7 +93,7 @@ interface GetGenesisBlockOptions { const getGenesisBlock = ({ consensusAddress }: GetGenesisBlockOptions) => new Block({ previousHash: clientCommon.ZERO_UINT256, - timestamp: new BN(Date.UTC(2016, 7, 15, 15, 8, 21)), + timestamp: new BN(Date.UTC(2016, 6, 15, 15, 8, 21)), index: 0, nextConsensus: consensusAddress, witness: getDeployWitness(), diff --git a/packages/neo-one-node-neo-settings/src/createTest.ts b/packages/neo-one-node-neo-settings/src/createTest.ts index ab9e97f279..74abc883f0 100644 --- a/packages/neo-one-node-neo-settings/src/createTest.ts +++ b/packages/neo-one-node-neo-settings/src/createTest.ts @@ -1,79 +1,52 @@ -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 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, }); 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: 1951352142, addressVersion: clientCommon.NEO_ADDRESS_VERSION, privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, standbyValidators, - vm: { - storageContext: { - v0: { - index: 163594, - }, - }, - }, }; }; diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 96a879ec0f..9ff7dba0e1 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -20,6 +20,7 @@ "@types/levelup": "^3.1.1", "@types/abstract-leveldown": "^5.0.1", "levelup": "4.1.0", + "rocksdb": "^4.1.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, @@ -27,6 +28,7 @@ "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "@types/memdown": "^3.0.0", + "@types/rocksdb": "3.0.0", "gulp": "~4.0.2", "memdown": "^5.0.0" } 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/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 1402d5a956..7afe8d76c5 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,3 +1,4 @@ +import { common } from '@neo-one/client-common'; import { BinaryReader, BlockKey, diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 5a9bd7bebd..bb455d9a58 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Linq; using Neo.Network.P2P.Payloads; using Neo.Persistence; @@ -11,6 +12,46 @@ namespace NEOONE partial class Dispatcher { + private enum ContainerType + { + Block, + Transaction, + Signer, + } + + 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; + 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, @@ -33,7 +74,12 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) TriggerType trigger = (TriggerType)args.trigger; long gas = long.Parse((string)args.gas); bool testMode = (bool)args.testMode; - return this._create(trigger, null, this.selectSnapshot(args.snapshot, false), gas, testMode); + IVerifiable container = null; + if (args.container != null) + { + container = deserializeContainer(args.container); + } + return this._create(trigger, container, this.selectSnapshot(args.snapshot, false), gas, testMode); case EngineMethod.execute: return this._execute(); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 4a4ea9c1e0..292b0b4232 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -1,7 +1,5 @@ using System; using System.IO; -using System.Linq; -using System.Threading; using Neo; using Neo.Ledger; using Neo.Network.P2P.Payloads; @@ -124,6 +122,9 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) 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(); } diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index 5d961fb985..c10f1f1da2 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -3,9 +3,7 @@ using Neo.SmartContract; using System.Dynamic; using System.Collections.Generic; -using NEOONE.Storage; using Neo.Persistence; -using Neo.SmartContract.Native; using Microsoft.Extensions.Configuration; namespace NEOONE @@ -16,6 +14,7 @@ public partial class Dispatcher private ApplicationEngine engine; private IStore store; private bool init = false; + private string path; private enum BaseMethod { @@ -65,7 +64,7 @@ private bool _init(string path, IConfiguration config) if (!this.init) { Neo.ProtocolSettings.Initialize(config); - this.store = new LevelDBStore(path).GetStore(); + this.path = path; this.resetSnapshots(); this.init = true; @@ -79,7 +78,6 @@ private bool _init(IConfiguration config) if (!this.init) { Neo.ProtocolSettings.Initialize(config); - this.store = new MemoryStore(); this.resetSnapshots(); this.init = true; @@ -92,7 +90,7 @@ private bool _init(string path) { if (!this.init) { - this.store = new LevelDBStore(path).GetStore(); + this.path = path; this.resetSnapshots(); this.init = true; @@ -105,7 +103,6 @@ private bool _init() { if (!this.init) { - this.store = new MemoryStore(); this.resetSnapshots(); this.init = true; @@ -128,7 +125,8 @@ private bool _dispose() private dynamic _test() { - return NativeContract.Policy.Hash.ToString(); + // return BitConverter.ToString(Blockchain.onPersistNativeContractScript); + return true; } private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index c576e41e97..25219ed4fe 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -12,6 +12,8 @@ + + diff --git a/packages/neo-one-node-vm/lib/SnapshotHelpers.cs b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs index d5fa682fc8..c5e22cec22 100644 --- a/packages/neo-one-node-vm/lib/SnapshotHelpers.cs +++ b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs @@ -1,8 +1,5 @@ using Neo.Persistence; -using Neo; -using Neo.Ledger; using System.Collections.Generic; -using System.IO; using Neo.IO; namespace NEOONE diff --git a/packages/neo-one-node-vm/lib/Storage/Level/DB.cs b/packages/neo-one-node-vm/lib/Storage/Level/DB.cs deleted file mode 100644 index 47a078c10a..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/DB.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.IO; - -namespace NEOONE.Storage.LevelDB -{ - public class DB : IDisposable - { - private IntPtr handle; - - /// - /// Return true if haven't got valid handle - /// - public bool IsDisposed => handle == IntPtr.Zero; - - private DB(IntPtr handle) - { - this.handle = handle; - } - - public void Dispose() - { - if (handle != IntPtr.Zero) - { - Native.leveldb_close(handle); - handle = IntPtr.Zero; - } - } - - public void Delete(object options, byte[] key) - { - throw new InvalidOperationException(); - } - - public byte[] Get(ReadOptions options, byte[] key) - { - IntPtr value = Native.leveldb_get(handle, options.handle, key, (UIntPtr)key.Length, out UIntPtr length, out IntPtr error); - try - { - if (error != IntPtr.Zero) - { - Native.leveldb_free(error); - return null; - } - return value.ToByteArray(length); - } - finally - { - if (value != IntPtr.Zero) Native.leveldb_free(value); - } - } - - public Snapshot GetSnapshot() - { - return new Snapshot(handle); - } - - public Iterator NewIterator(ReadOptions options) - { - return new Iterator(Native.leveldb_create_iterator(handle, options.handle)); - } - - public static DB Open(string name) - { - return Open(name, Options.Default); - } - - public static DB Open(string name, Options options) - { - IntPtr handle = Native.leveldb_open(options.handle, Path.GetFullPath(name), out IntPtr error); - NativeHelper.CheckError(error); - return new DB(handle); - } - - public void Put(object options, byte[] key, byte[] value) - { - throw new InvalidOperationException("C# LevelDB Storage is readonly"); - } - - public static void Repair(string name, Options options) - { - Native.leveldb_repair_db(options.handle, Path.GetFullPath(name), out IntPtr error); - NativeHelper.CheckError(error); - } - - public void Write(object options, WriteBatch write_batch) - { - throw new InvalidOperationException("C# LevelDB Storage is readonly"); - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/Helper.cs b/packages/neo-one-node-vm/lib/Storage/Level/Helper.cs deleted file mode 100644 index f94591409f..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/Helper.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Neo.IO.Caching; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace NEOONE.Storage.LevelDB -{ - public static class Helper - { - public static IEnumerable Seek(this DB db, ReadOptions options, byte table, byte[] prefix, SeekDirection direction, Func resultSelector) - { - using Iterator it = db.NewIterator(options); - byte[] target = CreateKey(table, prefix); - if (direction == SeekDirection.Forward) - { - for (it.Seek(target); it.Valid(); it.Next()) - { - var key = it.Key(); - if (key.Length < 1 || key[0] != table) break; - yield return resultSelector(it.Key(), it.Value()); - } - } - else - { - // SeekForPrev - - it.Seek(target); - if (!it.Valid()) - it.SeekToLast(); - else if (it.Key().AsSpan().SequenceCompareTo(target) > 0) - it.Prev(); - - for (; it.Valid(); it.Prev()) - { - var key = it.Key(); - if (key.Length < 1 || key[0] != table) break; - yield return resultSelector(it.Key(), it.Value()); - } - } - } - - public static IEnumerable FindRange(this DB db, ReadOptions options, byte[] startKey, byte[] endKey, Func resultSelector) - { - using Iterator it = db.NewIterator(options); - for (it.Seek(startKey); it.Valid(); it.Next()) - { - byte[] key = it.Key(); - if (key.AsSpan().SequenceCompareTo(endKey) > 0) break; - yield return resultSelector(key, it.Value()); - } - } - - internal static byte[] ToByteArray(this IntPtr data, UIntPtr length) - { - if (data == IntPtr.Zero) return null; - byte[] buffer = new byte[(int)length]; - Marshal.Copy(data, buffer, 0, (int)length); - return buffer; - } - - public static byte[] CreateKey(byte table, byte[] key = null) - { - if (key is null || key.Length == 0) return new[] { table }; - byte[] buffer = new byte[1 + key.Length]; - buffer[0] = table; - Buffer.BlockCopy(key, 0, buffer, 1, key.Length); - return buffer; - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs b/packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs deleted file mode 100644 index 8fdc7a4fe0..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/Iterator.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; - -namespace NEOONE.Storage.LevelDB -{ - public class Iterator : IDisposable - { - private IntPtr handle; - - internal Iterator(IntPtr handle) - { - this.handle = handle; - } - - private void CheckError() - { - Native.leveldb_iter_get_error(handle, out IntPtr error); - NativeHelper.CheckError(error); - } - - public void Dispose() - { - if (handle != IntPtr.Zero) - { - Native.leveldb_iter_destroy(handle); - handle = IntPtr.Zero; - } - } - - public byte[] Key() - { - IntPtr key = Native.leveldb_iter_key(handle, out UIntPtr length); - CheckError(); - return key.ToByteArray(length); - } - - public void Next() - { - Native.leveldb_iter_next(handle); - CheckError(); - } - - public void Prev() - { - Native.leveldb_iter_prev(handle); - CheckError(); - } - - public void Seek(byte[] target) - { - Native.leveldb_iter_seek(handle, target, (UIntPtr)target.Length); - } - - public void SeekToFirst() - { - Native.leveldb_iter_seek_to_first(handle); - } - - public void SeekToLast() - { - Native.leveldb_iter_seek_to_last(handle); - } - - public bool Valid() - { - return Native.leveldb_iter_valid(handle); - } - - public byte[] Value() - { - IntPtr value = Native.leveldb_iter_value(handle, out UIntPtr length); - CheckError(); - return value.ToByteArray(length); - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs b/packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs deleted file mode 100644 index bdad85aa01..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/LevelDBException.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Data.Common; - -namespace NEOONE.Storage.LevelDB -{ - public class LevelDBException : DbException - { - internal LevelDBException(string message) - : base(message) - { - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/Native.cs b/packages/neo-one-node-vm/lib/Storage/Level/Native.cs deleted file mode 100644 index 6276f35b87..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/Native.cs +++ /dev/null @@ -1,251 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace NEOONE.Storage.LevelDB -{ - public enum CompressionType : byte - { - kNoCompression = 0x0, - kSnappyCompression = 0x1 - } - - public static class Native - { - #region Logger - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_logger_create(IntPtr /* Action */ logger); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_logger_destroy(IntPtr /* logger*/ option); - #endregion - - #region DB - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_open(IntPtr /* Options*/ options, string name, out IntPtr error); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_close(IntPtr /*DB */ db); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_put(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, byte[] key, UIntPtr keylen, byte[] val, UIntPtr vallen, out IntPtr errptr); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_delete(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, byte[] key, UIntPtr keylen, out IntPtr errptr); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_write(IntPtr /* DB */ db, IntPtr /* WriteOptions*/ options, IntPtr /* WriteBatch */ batch, out IntPtr errptr); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_get(IntPtr /* DB */ db, IntPtr /* ReadOptions*/ options, byte[] key, UIntPtr keylen, out UIntPtr vallen, out IntPtr errptr); - - //[DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - //static extern void leveldb_approximate_sizes(IntPtr /* DB */ db, int num_ranges, byte[] range_start_key, long range_start_key_len, byte[] range_limit_key, long range_limit_key_len, out long sizes); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_create_iterator(IntPtr /* DB */ db, IntPtr /* ReadOption */ options); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_create_snapshot(IntPtr /* DB */ db); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_release_snapshot(IntPtr /* DB */ db, IntPtr /* SnapShot*/ snapshot); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_property_value(IntPtr /* DB */ db, string propname); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_repair_db(IntPtr /* Options*/ options, string name, out IntPtr error); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_destroy_db(IntPtr /* Options*/ options, string name, out IntPtr error); - - #region extensions - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_free(IntPtr /* void */ ptr); - - #endregion - - - #endregion - - #region Env - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_create_default_env(); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_env_destroy(IntPtr /*Env*/ cache); - #endregion - - #region Iterator - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_destroy(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.U1)] - public static extern bool leveldb_iter_valid(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_seek_to_first(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_seek_to_last(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_seek(IntPtr /*Iterator*/ iterator, byte[] key, UIntPtr length); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_next(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_prev(IntPtr /*Iterator*/ iterator); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_iter_key(IntPtr /*Iterator*/ iterator, out UIntPtr length); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_iter_value(IntPtr /*Iterator*/ iterator, out UIntPtr length); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_iter_get_error(IntPtr /*Iterator*/ iterator, out IntPtr error); - #endregion - - #region Options - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_options_create(); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_destroy(IntPtr /*Options*/ options); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_create_if_missing(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_error_if_exists(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_info_log(IntPtr /*Options*/ options, IntPtr /* Logger */ logger); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_paranoid_checks(IntPtr /*Options*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_env(IntPtr /*Options*/ options, IntPtr /*Env*/ env); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_write_buffer_size(IntPtr /*Options*/ options, UIntPtr size); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_max_open_files(IntPtr /*Options*/ options, int max); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_cache(IntPtr /*Options*/ options, IntPtr /*Cache*/ cache); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_block_size(IntPtr /*Options*/ options, UIntPtr size); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_block_restart_interval(IntPtr /*Options*/ options, int interval); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_compression(IntPtr /*Options*/ options, CompressionType level); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_comparator(IntPtr /*Options*/ options, IntPtr /*Comparator*/ comparer); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_options_set_filter_policy(IntPtr /*Options*/ options, IntPtr /*FilterPolicy*/ policy); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_filterpolicy_create_bloom(int bits_per_key); - #endregion - - #region ReadOptions - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_readoptions_create(); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_readoptions_destroy(IntPtr /*ReadOptions*/ options); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_readoptions_set_verify_checksums(IntPtr /*ReadOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_readoptions_set_fill_cache(IntPtr /*ReadOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_readoptions_set_snapshot(IntPtr /*ReadOptions*/ options, IntPtr /*SnapShot*/ snapshot); - #endregion - - #region WriteBatch - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_writebatch_create(); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writebatch_destroy(IntPtr /* WriteBatch */ batch); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writebatch_clear(IntPtr /* WriteBatch */ batch); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writebatch_put(IntPtr /* WriteBatch */ batch, byte[] key, UIntPtr keylen, byte[] val, UIntPtr vallen); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writebatch_delete(IntPtr /* WriteBatch */ batch, byte[] key, UIntPtr keylen); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writebatch_iterate(IntPtr /* WriteBatch */ batch, object state, Action put, Action deleted); - #endregion - - #region WriteOptions - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_writeoptions_create(); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writeoptions_destroy(IntPtr /*WriteOptions*/ options); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_writeoptions_set_sync(IntPtr /*WriteOptions*/ options, [MarshalAs(UnmanagedType.U1)] bool o); - #endregion - - #region Cache - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr leveldb_cache_create_lru(int capacity); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_cache_destroy(IntPtr /*Cache*/ cache); - #endregion - - #region Comparator - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern IntPtr /* leveldb_comparator_t* */ - leveldb_comparator_create( - IntPtr /* void* */ state, - IntPtr /* void (*)(void*) */ destructor, - IntPtr - /* int (*compare)(void*, - const char* a, size_t alen, - const char* b, size_t blen) */ - compare, - IntPtr /* const char* (*)(void*) */ name); - - [DllImport("libleveldb", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] - public static extern void leveldb_comparator_destroy(IntPtr /* leveldb_comparator_t* */ cmp); - - #endregion - } - - internal static class NativeHelper - { - public static void CheckError(IntPtr error) - { - if (error != IntPtr.Zero) - { - string message = Marshal.PtrToStringAnsi(error); - Native.leveldb_free(error); - throw new LevelDBException(message); - } - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/Options.cs b/packages/neo-one-node-vm/lib/Storage/Level/Options.cs deleted file mode 100644 index bfe4f4c3a0..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/Options.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; - -namespace NEOONE.Storage.LevelDB -{ - public class Options - { - public static readonly Options Default = new Options(); - internal readonly IntPtr handle = Native.leveldb_options_create(); - - public bool CreateIfMissing - { - set - { - Native.leveldb_options_set_create_if_missing(handle, value); - } - } - - public bool ErrorIfExists - { - set - { - Native.leveldb_options_set_error_if_exists(handle, value); - } - } - - public bool ParanoidChecks - { - set - { - Native.leveldb_options_set_paranoid_checks(handle, value); - } - } - - public int WriteBufferSize - { - set - { - Native.leveldb_options_set_write_buffer_size(handle, (UIntPtr)value); - } - } - - public int MaxOpenFiles - { - set - { - Native.leveldb_options_set_max_open_files(handle, value); - } - } - - public int BlockSize - { - set - { - Native.leveldb_options_set_block_size(handle, (UIntPtr)value); - } - } - - public int BlockRestartInterval - { - set - { - Native.leveldb_options_set_block_restart_interval(handle, value); - } - } - - public CompressionType Compression - { - set - { - Native.leveldb_options_set_compression(handle, value); - } - } - - public IntPtr FilterPolicy - { - set - { - Native.leveldb_options_set_filter_policy(handle, value); - } - } - - ~Options() - { - Native.leveldb_options_destroy(handle); - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs b/packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs deleted file mode 100644 index c4a26cfae3..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/ReadOptions.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; - -namespace NEOONE.Storage.LevelDB -{ - public class ReadOptions - { - public static readonly ReadOptions Default = new ReadOptions(); - internal readonly IntPtr handle = Native.leveldb_readoptions_create(); - - public bool VerifyChecksums - { - set - { - Native.leveldb_readoptions_set_verify_checksums(handle, value); - } - } - - public bool FillCache - { - set - { - Native.leveldb_readoptions_set_fill_cache(handle, value); - } - } - - public Snapshot Snapshot - { - set - { - Native.leveldb_readoptions_set_snapshot(handle, value.handle); - } - } - - ~ReadOptions() - { - Native.leveldb_readoptions_destroy(handle); - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs deleted file mode 100644 index 202b9039be..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/Snapshot.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; - -namespace NEOONE.Storage.LevelDB -{ - public class Snapshot : IDisposable - { - internal IntPtr db, handle; - - internal Snapshot(IntPtr db) - { - this.db = db; - this.handle = Native.leveldb_create_snapshot(db); - } - - public void Dispose() - { - if (handle != IntPtr.Zero) - { - Native.leveldb_release_snapshot(db, handle); - handle = IntPtr.Zero; - } - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs b/packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs deleted file mode 100644 index d2437e46fe..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Level/WriteBatch.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; - -namespace NEOONE.Storage.LevelDB -{ - public class WriteBatch - { - internal readonly IntPtr handle = Native.leveldb_writebatch_create(); - - ~WriteBatch() - { - Native.leveldb_writebatch_destroy(handle); - } - - public void Clear() - { - Native.leveldb_writebatch_clear(handle); - } - - public void Delete(byte[] key) - { - Native.leveldb_writebatch_delete(handle, key, (UIntPtr)key.Length); - } - - public void Put(byte[] key, byte[] value) - { - Native.leveldb_writebatch_put(handle, key, (UIntPtr)key.Length, value, (UIntPtr)value.Length); - } - } -} 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..af079a460c --- /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/LevelDBStore.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs similarity index 54% rename from packages/neo-one-node-vm/lib/Storage/LevelDBStore.cs rename to packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs index 2bdc8768b5..115645b310 100644 --- a/packages/neo-one-node-vm/lib/Storage/LevelDBStore.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs @@ -1,22 +1,17 @@ using Neo.Persistence; -using NEOONE.Storage.LevelDB; +using NEOONE.Storage.RocksDB; namespace NEOONE.Storage { - public class LevelDBStore + public class RocksDBStore { private string path; - public LevelDBStore(string path) + public RocksDBStore(string path) { this.path = path; } - public void Repar() - { - DB.Repair(path, Options.Default); - } - 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..0d5c7e3607 --- /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..961e867c73 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -0,0 +1,76 @@ +using Neo.IO.Caching; +using Neo.Persistence; +using RocksDbSharp; +using System; +using System.Collections.Generic; +using System.Linq; + +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.Next()) + yield return (it.Key(), it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid(); it.Prev()) + yield return (it.Key(), 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); + // Console.WriteLine($"trying to get from rocksdb store, key: {BitConverter.ToString(fullKey)}"); + 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..e492884e59 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs @@ -0,0 +1,92 @@ +using Neo.IO.Caching; +using Neo.Persistence; +using RocksDbSharp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; + +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.Next()) + yield return (it.Key(), it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid(); it.Prev()) + yield return (it.Key(), 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/lib/Storage/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/Snapshot.cs deleted file mode 100644 index 77422b6e12..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Snapshot.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using Neo.Persistence; -using NEOONE.Storage.LevelDB; -using System.Collections.Generic; -using Neo.IO.Caching; -using LevelSnapshot = NEOONE.Storage.LevelDB.Snapshot; -using LevelHelper = NEOONE.Storage.LevelDB.Helper; - -namespace NEOONE.Storage -{ - internal class Snapshot : ISnapshot - { - private readonly DB db; - private readonly LevelSnapshot snapshot; - private readonly ReadOptions options; - private readonly WriteBatch changeSet; - - public Snapshot(DB db) - { - this.db = db; - this.snapshot = db.GetSnapshot(); - this.options = new ReadOptions { FillCache = false, Snapshot = snapshot }; - this.changeSet = new WriteBatch(); - } - - public void Commit() - { - return; - } - - public void Delete(byte table, byte[] key) - { - return; - } - - public void Dispose() - { - snapshot.Dispose(); - } - - public IEnumerable<(byte[] Key, byte[] Value)> Seek(byte table, byte[] prefix, SeekDirection direction = SeekDirection.Forward) - { - return db.Seek(options, table, prefix, direction, (k, v) => (k[1..], v)); - } - - public void Put(byte table, byte[] key, byte[] value) - { - return; - } - - public byte[] TryGet(byte table, byte[] key) - { - return db.Get(options, LevelHelper.CreateKey(table, key)); - } - } -} diff --git a/packages/neo-one-node-vm/lib/Storage/Store.cs b/packages/neo-one-node-vm/lib/Storage/Store.cs deleted file mode 100644 index 0a639a0686..0000000000 --- a/packages/neo-one-node-vm/lib/Storage/Store.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Neo.IO.Caching; -using NEOONE.Storage.LevelDB; -using Neo.Persistence; -using System; -using System.Collections.Generic; -using LevelHelper = NEOONE.Storage.LevelDB.Helper; - -namespace NEOONE.Storage -{ - internal class Store : IStore - { - private const byte SYS_Version = 0xf0; - private readonly DB db; - - public Store(string path) - { - this.db = DB.Open(path, new Options { CreateIfMissing = true, FilterPolicy = Native.leveldb_filterpolicy_create_bloom(15) }); - } - - public void Delete(byte table, byte[] key) - { - throw new InvalidOperationException("C# LevelDB Storage is readonly"); - } - - public void Dispose() - { - db.Dispose(); - } - - public IEnumerable<(byte[], byte[])> Seek(byte table, byte[] prefix, SeekDirection direction = SeekDirection.Forward) - { - return db.Seek(ReadOptions.Default, table, prefix, direction, (k, v) => (k[1..], v)); - } - - public ISnapshot GetSnapshot() - { - return new Snapshot(db); - } - - public void Put(byte table, byte[] key, byte[] value) - { - throw new InvalidOperationException("C# LevelDB Storage is readonly"); - } - - public void PutSync(byte table, byte[] key, byte[] value) - { - throw new InvalidOperationException("C# LevelDB Storage is readonly"); - } - - public byte[] TryGet(byte table, byte[] key) - { - return db.Get(ReadOptions.Default, LevelHelper.CreateKey(table, key)); - } - } -} diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index 624b651e29..57d41ede0f 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,5 +1,11 @@ import { common, VMState } from '@neo-one/client-common'; -import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; +import { + CallFlags, + SerializableContainer, + serializeScriptContainer, + SnapshotName, + TriggerType, +} from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; import { parseNotifications, parseStackItems } from './converters'; @@ -8,7 +14,7 @@ import { DispatcherFunc } from './types'; export interface CreateOptions { readonly trigger: TriggerType; - readonly container?: Verifiable; + readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; readonly gas: number; readonly testMode: boolean; @@ -76,7 +82,7 @@ export class ApplicationEngine { method: 'create', args: { trigger, - container, + container: container ? serializeScriptContainer(container) : undefined, gas: common.fixed8FromDecimal(gas.toString()).toString(), snapshot, testMode, diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 862c3e877c..656170970f 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,11 +1,11 @@ import { VMState } from '@neo-one/client-common'; -import { CallFlags, SnapshotName, TriggerType, Verifiable } from '@neo-one/node-core'; +import { CallFlags, SerializedScriptContainer, SnapshotName, TriggerType } from '@neo-one/node-core'; import { NotificationReturn, StackItemReturn } from '../converters'; import { DefaultMethods, DispatchMethod } from '../types'; interface CreateEngineArgs { readonly trigger: TriggerType; - readonly container?: Verifiable; + readonly container?: SerializedScriptContainer; readonly gas: string; readonly snapshot?: SnapshotName; readonly testMode: boolean; diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index d139861c2c..1b20f0bb9c 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -1,7 +1,8 @@ -import { ScriptBuilder } from '@neo-one/client-common'; +import { ScriptBuilder, VMState } from '@neo-one/client-common'; import { TriggerType } from '@neo-one/node-core'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; +import { blockchainSettingsToProtocolSettings } from '../utils'; describe('Dispatcher Tests', () => { const dispatcher = new Dispatcher(); @@ -17,7 +18,7 @@ describe('Dispatcher Tests', () => { gas: 0, }, (engine) => { - expect(engine.state).toEqual('BREAK'); + expect(engine.state).toEqual(VMState.BREAK); const script = new ScriptBuilder(); script.emitOp('NOP'); @@ -28,13 +29,13 @@ describe('Dispatcher Tests', () => { }, ); - expect(state).toEqual('HALT'); + expect(state).toEqual(VMState.HALT); // check that the dispatcher reset the engine. const postEngine = new ApplicationEngine(dispatcher); expect(postEngine.resultStack).toEqual([]); expect(postEngine.gasConsumed).toEqual(0); - expect(postEngine.state).toEqual('BREAK'); + expect(postEngine.state).toEqual(VMState.BREAK); expect(() => postEngine.execute()).toThrow(); }); @@ -93,7 +94,7 @@ describe('Dispatcher Tests', () => { expect(result.memoryPoolMaxTransactions).toEqual(input.memoryPoolMaxTransactions); }); - test('', () => { - console.log(dispatcher.test()); + test('Dispatcher returns config without initializing config', () => { + expect(dispatcher.getConfig()).toBeDefined(); }); }); diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 3a160c24a0..007622f676 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -30,13 +30,20 @@ "fs-extra": "^8.1.0", "leveldown": "^5.1.1", "levelup": "4.1.0", + "rocksdb": "^4.1.0", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/client-common": "^2.7.0", "@neo-one/build-tools": "^1.0.0", + "@neo-one/node-neo-settings": "^2.7.0", "@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", + "bn.js": "^5.0.0", "gulp": "~4.0.2" } } 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..a74c1ac139 --- /dev/null +++ b/packages/neo-one-node/src/__data__/data.ts @@ -0,0 +1,64 @@ +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 { genesisJSON, secondBlockJSON, thirdBlockJSON } from './jsonBlocks'; + +const convertBlock = (json: BlockJSON) => + 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: Buffer.from(json.witnesses[0].invocation, 'base64'), + verification: Buffer.from(json.witnesses[0].verification, 'base64'), + }), + transactions: json.tx.map( + (tx) => + new Transaction({ + hash: JSONHelper.readUInt256(tx.hash), + nonce: tx.nonce, + attributes: [], + script: Buffer.from(tx.script, 'base64'), + systemFee: new BN(tx.sysfee), + networkFee: new BN(tx.netfee), + validUntilBlock: tx.validuntilblock, + witnesses: tx.witnesses.map( + (witness) => + new Witness({ + invocation: Buffer.from(witness.invocation, 'base64'), + verification: Buffer.from(witness.verification, 'base64'), + }), + ), + 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), + }), + ), + }), + ), + consensusData: json.consensusdata + ? new ConsensusData({ + primaryIndex: json.consensusdata.primary, + nonce: new BN(json.consensusdata.nonce, 16), + }) + : undefined, + }); + +const genesisBlockFromJSON = convertBlock(genesisJSON as any); +const secondBlockFromJSON = convertBlock(secondBlockJSON as any); +const thirdBlockFromJSON = convertBlock(thirdBlockJSON as any); + +export const data = { + genesisBlock: genesisBlockFromJSON, + secondBlock: secondBlockFromJSON, + thirdBlock: thirdBlockFromJSON, +}; 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..3241e83d5c --- /dev/null +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -0,0 +1,100 @@ +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 is 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: '0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5', + size: 700, + version: 0, + previousblockhash: '0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45', + merkleroot: '0x9ff5ba403c81151c0d031b548fe6cff82ef61a01be72c38ecc81d4bc2f1ee01c', + time: 1596537327793, + index: 1, + nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', + witnesses: [ + { + invocation: + 'DED/2tpnw4uN5407xKQuwAXw+Hm9L4P51hSMfjwbEcm7pN+aFdn5+d/VxT9ifDX0KQRGlbericqr6h2gQvnJYvHqDECO9w/7PAccs3K3yqAZ4zDTpsnxxDU5EyR1PNNcBUx31lFGyHtjcxhce+YNYxcJc2zOFFk+lFmCBn+ZiF1HZrkPDEBbpwRGODeexXqSws2VQPrOg/BiCNYKmAj3vPW8HvC3ypnly/Hfy8lYF9iZiIighzUALC4QzQpxdq1IdNMSH22jDEAe/l0FF8HXc6e20zT6x0D8XvrITHsKMxxe4S5hGYwojgBDjJPcMwvJbT83AF+sorbZc7SMaCGwT1XOEg+9M0G2DEDOK/OsvMqyKgyHf/gz5QFgQxPjHKuuMoN38+OLuMRP36K4Eunv7oql3KstrgpVIqZHtETEHmxMEFIFXu5hFEa8', + verification: + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + }, + ], + consensusdata: { + primary: 1, + nonce: 'f490dfe92971e572', + }, + tx: [], + confirmations: 294767, + nextblockhash: '0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae', +}; + +export const thirdBlockJSON = { + hash: '0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae', + size: 700, + version: 0, + previousblockhash: '0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5', + merkleroot: '0x905819ef1743d2f7e522dacc90a365dd7e872ebdee74f2dfcad61d5089dc9f64', + time: 1596537468402, + index: 2, + nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', + witnesses: [ + { + invocation: + 'DEC3IxKTiG/yHShrtaN2aDBWLCoiLCvaUHmir1TovNGookWVKqB6NxwJb1capeJk50HtWntpz4B/k0oDd9Y33F8xDEDikpijBQ+rl4WJCHN7DPumv8OvtBhszmDKqX3wEJyaKAUL8rLsncDbsgIwJTxPyMUDIrU8BbVIEYDAH0KvB5AfDECcu9VKxSaC5mJdWvwguqw74ZU31UIG2cn5FMGg/EPMwFQeJEW/HTZNIIJNvE8lQ5i6C7wZ5QJFRLXavqDwvO+TDEBokh+09rXIVbcmzGBqddJ+Kq9mp7UAH9XTcTtDiQaeKQ39krUyySuaUjZm54kHsi70OsAqkK+hfSIpYZ4qKLeUDEA5qVvZMvHzv9NR6ekPvKpTquy32qgY+quCJt1BSeBaOGAZ4wTVs3Guw+HvFfarRPORYy186jVzQM1tAbPR+oiQ', + verification: + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + }, + ], + consensusdata: { + primary: 1, + nonce: '3b23f5541d704aaa', + }, + tx: [], + confirmations: 311250, + nextblockhash: '0xfd4d6fdf33eaec2d574590af1c8cbfcaa9d990b4ecc1cf0e60670b951be214a2', +}; 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..b3e3568bb3 --- /dev/null +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -0,0 +1,63 @@ +import { common } from '@neo-one/client-common'; +import { Blockchain } from '@neo-one/node-blockchain'; +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 { data } from '../__data__'; + +describe('blockchain persists second block', () => { + test('test', async () => { + const blockchainSettings = createTest(); + const levelDBPath = '/Users/danielbyrne/Desktop/test-location'; + const db = LevelUp(RocksDB(levelDBPath)); + + const storage = levelupStorage({ + db, + context: { messageMagic: blockchainSettings.messageMagic }, + }); + + const dispatcher = new Dispatcher({ + levelDBPath, + protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), + }); + + const native = new NativeContainer(blockchainSettings); + const blockchain = await Blockchain.create({ + settings: blockchainSettings, + storage, + vm: dispatcher, + native, + }); + + const genesisBlock = await blockchain.getBlock(0); + expect(genesisBlock).toBeDefined(); + if (genesisBlock === undefined) { + throw new Error('for ts'); + } + + expect(blockchainSettings.genesisBlock.equals(genesisBlock)).toEqual(true); + const meta = await storage.blockHashIndex.tryGet(); + expect(meta?.hash).toEqual(blockchainSettings.genesisBlock.hash); + + // Persist index 1 block + const prePersistSecondBlock = await blockchain.getBlock(1); + expect(prePersistSecondBlock).not.toBeDefined(); + + await blockchain.persistBlock({ block: data.secondBlock }); + + const postPersistSecondBlock = await blockchain.getBlock(1); + expect(postPersistSecondBlock).toBeDefined(); + + // Persist index 2 block + const prePersistThirdBlock = await blockchain.getBlock(2); + expect(prePersistThirdBlock).not.toBeDefined(); + + await blockchain.persistBlock({ block: data.thirdBlock }); + + const postPersistThirdBlock = await blockchain.getBlock(2); + expect(postPersistThirdBlock).toBeDefined(); + }); +}); diff --git a/rush.json b/rush.json index 7d8b898f3a..a99907c459 100644 --- a/rush.json +++ b/rush.json @@ -2,7 +2,7 @@ "$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.10.0", + "nodeSupportedVersionRange": ">=10.13.0 <=12.18.4", "ensureConsistentVersions": true, "suppressNodeLtsWarning": true, From 467bec8e52833d1a97fefde662090413be0fdde0 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 13 Oct 2020 13:27:53 -0700 Subject: [PATCH 106/141] feat(node): persist up to block 5300 checkin (#2184) --- .../rush/browser-approved-packages.json | 4 + common/config/rush/common-versions.json | 1 + common/config/rush/yarn.lock | 33 ++ .../neo-one-client-common/src/JSONHelper.ts | 2 + .../transaction/TransactionStateModel.ts | 2 +- .../neo-one-client-common/src/models/types.ts | 17 +- .../models/manifest/ContractManifestModel.ts | 4 +- .../manifest/ContractMethodDescriptorModel.ts | 2 +- .../neo-one-node-blockchain/src/Blockchain.ts | 34 +- packages/neo-one-node-blockchain/src/utils.ts | 17 +- packages/neo-one-node-core/package.json | 1 + .../neo-one-node-core/src/ContractIDState.ts | 2 +- .../neo-one-node-core/src/HeaderHashList.ts | 2 +- .../neo-one-node-core/src/Serializable.ts | 2 +- packages/neo-one-node-core/src/StorageItem.ts | 11 +- packages/neo-one-node-core/src/Witness.ts | 4 +- .../src/manifest/ContractPermission.ts | 4 +- .../manifest/ContractPermissionDescriptor.ts | 12 +- .../capabilities/FullNodeCapability.ts | 9 +- .../network/capabilities/NodeCapability.ts | 2 - .../network/capabilities/ServerCapability.ts | 2 +- .../src/payload/ChangeViewPayloadCompact.ts | 2 +- .../src/payload/CommitPayloadCompact.ts | 2 +- .../src/payload/ConsensusPayload.ts | 10 +- .../message/RecoveryConsensusMessage.ts | 2 +- .../src/transaction/Transaction.ts | 5 +- packages/neo-one-node-core/src/vm.ts | 7 - packages/neo-one-node-network/src/Network.ts | 5 +- packages/neo-one-node-protocol/package.json | 2 + packages/neo-one-node-protocol/src/Message.ts | 400 ++++++++---------- packages/neo-one-node-protocol/src/Node.ts | 150 +++---- .../neo-one-node-protocol/src/PeerData.ts | 1 - .../neo-one-node-protocol/src/lz4Helper.ts | 35 ++ .../src/payload/GetBlockByIndexPayload.ts | 2 +- .../src/payload/MerkleBlockPayload.ts | 3 +- .../src/payload/PingPayload.ts | 10 +- .../src/payload/VersionPayload.ts | 2 +- .../src/payload/index.ts | 2 +- .../neo-one-node-protocol/src/types/lz4.d.ts | 5 + packages/neo-one-node-protocol/tsconfig.json | 3 +- .../src/createHandler.ts | 129 +++--- .../neo-one-node-storage-common/src/index.ts | 2 +- .../neo-one-node-storage-common/src/keys.ts | 2 +- .../neo-one-node-vm/src/converters/changes.ts | 4 +- .../src/converters/notifications.ts | 4 +- packages/neo-one-node/src/__data__/data.ts | 23 +- .../neo-one-node/src/__data__/jsonBlocks.ts | 50 +++ .../src/__tests__/blockchain.test.ts | 29 +- .../src/__tests__/fullNode.test.ts | 58 +++ packages/neo-one-node/src/startFullNode.ts | 8 +- packages/neo-one-react-common/tsconfig.json | 2 +- 51 files changed, 640 insertions(+), 486 deletions(-) create mode 100644 packages/neo-one-node-protocol/src/lz4Helper.ts create mode 100644 packages/neo-one-node-protocol/src/types/lz4.d.ts create mode 100644 packages/neo-one-node/src/__tests__/fullNode.test.ts diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json index 60b87ffe43..94f9774bbb 100644 --- a/common/config/rush/browser-approved-packages.json +++ b/common/config/rush/browser-approved-packages.json @@ -846,6 +846,10 @@ "name": "lru-cache", "allowedCategories": [ "production", "web" ] }, + { + "name": "lz4", + "allowedCategories": [ "production" ] + }, { "name": "markdown-it", "allowedCategories": [ "web" ] diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json index b88b6d53b5..7e77f5e653 100644 --- a/common/config/rush/common-versions.json +++ b/common/config/rush/common-versions.json @@ -1,6 +1,7 @@ { "$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", diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index 79d998f9b4..f4b4e3fed0 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2555,6 +2555,7 @@ 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" @@ -2644,6 +2645,7 @@ 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": @@ -2667,6 +2669,8 @@ 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" @@ -4042,6 +4046,13 @@ "@types/minipass" "*" "@types/node" "*" +"@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" "*" + "@types/toposort@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/toposort/-/toposort-2.0.3.tgz#dc490842b77c3e910c8d727ff0bdb2fb124cb41b" @@ -7678,6 +7689,11 @@ csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== +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" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" @@ -13782,6 +13798,16 @@ 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= +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" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -21117,6 +21143,13 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" +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" 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/models/transaction/TransactionStateModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts index 611e108780..236ac9d7a0 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts @@ -14,7 +14,7 @@ export class TransactionStateModel) { this.blockIndex = options.blockIndex; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 36eea04a2f..922dc2565e 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,9 +1,10 @@ import { JSONArray, JSONObject } from '@neo-one/utils'; +import { UInt256Hex } from '../common'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; import { VerifyResultModel } from './VerifyResultModel'; -import { VMState } from './vm'; +import { VMState, VMStateJSON } from './vm'; import { WitnessScopeModel } from './WitnessScopeModel'; export interface ContractParameterDefinitionJSON { @@ -269,6 +270,14 @@ export interface TransactionJSON { readonly data?: TransactionReceiptJSON; } +// TODO: temporary using this instead of TransactionWithInvocationDataJSON +export interface VerboseTransactionJSON extends TransactionJSON { + readonly blockhash: UInt256Hex; + readonly confirmations: number; + readonly blocktime: string; + readonly vmstate: VMStateJSON; +} + // TODO: not going to use this right now because still copying C# code export interface TransactionWithInvocationDataJSON extends TransactionJSON { // TODO: this may be off slightly. Not sure where script and gas belong. They may belong in TransactionJSON @@ -414,8 +423,10 @@ export interface VerifyTransactionResultJSON { } export interface RelayTransactionResultJSON { - readonly transaction: TransactionWithInvocationDataJSON; - readonly verifyResult?: VerifyTransactionResultJSON; + // TODO: reimplement transactionJSONWithInvocationData + readonly transaction: TransactionJSON; + // TODO: reimplement the longform verify transaction result + readonly verifyResult?: VerifyResultJSON; } export interface ValidatorJSON { 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 index 645002c33e..76d7b7edf9 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -94,11 +94,11 @@ export class ContractManifestModel< storage: this.hasStorage, payable: this.payable, }, - supportedStandards: this.supportedStandards, + 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)), - safeMethods: this.safeMethods, + safemethods: this.safeMethods, extra: this.extra, }; } 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 index e853e090f6..dea125bc5e 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts @@ -32,7 +32,7 @@ export class ContractMethodDescriptorModel< return { ...super.serializeJSON(), offset: this.offset, - returnType: toJSONContractParameterType(this.returnType), + returntype: toJSONContractParameterType(this.returnType), }; } } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 476bc234ee..7e0b64ab38 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,4 +1,5 @@ import { common, UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { createChild, nodeLogger } from '@neo-one/logger'; import { Block, Blockchain as BlockchainType, @@ -32,8 +33,7 @@ import { utils } from './utils'; import { verifyWitnesses } from './verify'; import { wrapExecuteScripts } from './wrapExecuteScripts'; -// TODO: bring logger over when its time; -const logger = console; +const logger = createChild(nodeLogger, { service: 'blockchain' }); export interface CreateBlockchainOptions { readonly onPersistNativeContractScript?: Buffer; @@ -44,10 +44,10 @@ export interface CreateBlockchainOptions { } export interface BlockchainOptions extends CreateBlockchainOptions { - readonly currentBlock?: Block; - // readonly previousBlockIndex?: number; // tslint:disable-next-line: readonly-array readonly headerIndex: UInt256[]; + readonly storedHeaderCount: number; + readonly currentBlock?: Block; } interface Entry { @@ -57,6 +57,7 @@ interface Entry { readonly verify: boolean; } +const hashListBatchSize = 2000; export const recoverHeaderIndex = async (storage: Storage) => { const initHeaderIndex = await storage.headerHashList.all$ .pipe( @@ -66,6 +67,7 @@ export const recoverHeaderIndex = async (storage: Storage) => { .toPromise(); const storedHeaderCount = initHeaderIndex.length; + logger.debug({ name: 'recover_header_index_stored_count', count: storedHeaderCount }); if (storedHeaderCount !== 0) { const hashIndex = await storage.headerHashIndex.get(); @@ -79,21 +81,23 @@ export const recoverHeaderIndex = async (storage: Storage) => { hash = previousHash; } - return initHeaderIndex.concat(extraHashes); + return { headerIndex: initHeaderIndex.concat(extraHashes), storedHeaderCount }; } } - return storage.blocks.all$ + const sortedTrimmedBlocks = await storage.blocks.all$ .pipe( - map((block) => block.header.hash), toArray(), + map((blocks) => blocks.slice().sort(utils.blockComparator)), ) .toPromise(); + + return { headerIndex: sortedTrimmedBlocks.map((block) => block.header.hash), storedHeaderCount: 0 }; }; export class Blockchain { public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { - const headerIndex = await recoverHeaderIndex(storage); + const { headerIndex, storedHeaderCount } = await recoverHeaderIndex(storage); if (headerIndex.length > 0) { const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: headerIndex[headerIndex.length - 1] }); if (currentBlockTrimmed === undefined) { @@ -104,6 +108,7 @@ export class Blockchain { return new Blockchain({ headerIndex, + storedHeaderCount, settings, storage, native, @@ -114,6 +119,7 @@ export class Blockchain { const blockchain = new Blockchain({ headerIndex, + storedHeaderCount, settings, storage, native, @@ -152,7 +158,7 @@ export class Blockchain { public constructor(options: BlockchainOptions) { this.headerIndex = options.headerIndex; - this.mutableStoredHeaderCount = this.headerIndex.length; + this.mutableStoredHeaderCount = options.storedHeaderCount; this.settings = options.settings; this.storage = options.storage; this.native = options.native; @@ -567,7 +573,7 @@ export class Blockchain { } private async saveHeaderHashList(): Promise { - if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { + if (this.headerIndex.length - this.storedHeaderCount < hashListBatchSize) { return; } @@ -606,8 +612,14 @@ export class Blockchain { await this.verifyBlock(block); } - const blockchain = this.createPersistingBlockchain(); const currentHeaderCount = this.headerIndex.length; + if (block.transactions.length !== 0) { + logger.debug({ name: 'BLOCK_PERSIST_WITH_TRANSACTION', block: block.serializeJSON(this.serializeJSONContext) }); + logger.error({ name: 'SEE THIS ONE LOOK AT IT' }); + logger.error({ name: 'SEE THIS ONE LOOK AT IT' }); + } + + const blockchain = this.createPersistingBlockchain(); if (block.index === currentHeaderCount) { this.headerIndex.push(block.hash); diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index f0a05b7fdd..a46f04bdda 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -11,6 +11,7 @@ import { } from '@neo-one/client-common'; import { ApplicationEngine, + BlockBase, BlockchainStorage, CallFlags, ECDsaVerifyPrice, @@ -34,8 +35,6 @@ const getOnPersistNativeContractScript = coreUtils.lazy(() => { return script.build(); }); -const hashListBatchSize = 2000; - const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transaction) => ({ transaction, trigger: engine.trigger, @@ -167,12 +166,24 @@ const verifyContract = async ( return { fee: coreUtils.ZERO, size: 0 }; }; +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, verifyContract, getCalculateNetworkFee, + blockComparator, }; diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index 0a7162073a..ffeec9585a 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -25,6 +25,7 @@ "@neo-one/build-tools": "^1.0.0", "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", + "@types/through": "^0.0.30", "gulp": "~4.0.2", "tslib": "^1.10.0" } diff --git a/packages/neo-one-node-core/src/ContractIDState.ts b/packages/neo-one-node-core/src/ContractIDState.ts index 0743d5ef2c..8d36d1dac4 100644 --- a/packages/neo-one-node-core/src/ContractIDState.ts +++ b/packages/neo-one-node-core/src/ContractIDState.ts @@ -33,7 +33,7 @@ export class ContractIDState implements SerializableWire { public readonly nextId: number; public readonly size = IOHelper.sizeOfUInt32LE; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ nextId }: ContractIDStateAdd) { this.nextId = nextId; diff --git a/packages/neo-one-node-core/src/HeaderHashList.ts b/packages/neo-one-node-core/src/HeaderHashList.ts index 1e8aacd4e4..e6d1a48b82 100644 --- a/packages/neo-one-node-core/src/HeaderHashList.ts +++ b/packages/neo-one-node-core/src/HeaderHashList.ts @@ -31,7 +31,7 @@ export class HeaderHashList implements SerializableWire { } public readonly hashes: readonly UInt256[]; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ hashes }: HeaderHashListAdd) { this.hashes = hashes; } diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index ad62249414..1c34fb323b 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -9,7 +9,7 @@ import { BinaryReader } from './utils'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; -export type SerializableContainerType = 'Block' | 'Signers' | 'Transaction'; +export type SerializableContainerType = 'Block' | 'Signers' | 'Transaction' | 'ConsensusPayload'; export interface SerializableContainer extends SerializableWire { readonly type: SerializableContainerType; diff --git a/packages/neo-one-node-core/src/StorageItem.ts b/packages/neo-one-node-core/src/StorageItem.ts index 17e9cb670c..20b67a2a87 100644 --- a/packages/neo-one-node-core/src/StorageItem.ts +++ b/packages/neo-one-node-core/src/StorageItem.ts @@ -1,6 +1,7 @@ -import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; +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 @@ -97,4 +98,12 @@ export class StorageItem implements SerializableWire { isConstant: this.isConstant, }); } + + public serializeJSON(key: StorageKey) { + return { + key: JSONHelper.writeBuffer(key.serializeWire()), + value: JSONHelper.writeBuffer(this.value), + isConstant: this.isConstant, + }; + } } diff --git a/packages/neo-one-node-core/src/Witness.ts b/packages/neo-one-node-core/src/Witness.ts index a5b9950cf4..bcb7a04f85 100644 --- a/packages/neo-one-node-core/src/Witness.ts +++ b/packages/neo-one-node-core/src/Witness.ts @@ -42,8 +42,8 @@ export class Witness extends WitnessModel implements SerializableJSON !group.publicKey.equals(this.contract.hashOrGroup as ECPoint)) ) { return false; diff --git a/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts index 393f2506cb..51f0956dd4 100644 --- a/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts +++ b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts @@ -3,13 +3,15 @@ import { ContractPermissionDescriptorModel } from '@neo-one/client-full-common'; export class ContractPermissionDescriptor extends ContractPermissionDescriptorModel { public static deserializeJSON(json: ContractPermissionDescriptorJSON): ContractPermissionDescriptor { - if (json.length === 42) { - return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readUInt160(json) }); + // 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 (json.length === 66) { - return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readECPoint(json) }); + if (jsonString.length === 66) { + return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readECPoint(jsonString) }); } - if (json === '*') { + if (jsonString === '*') { return new ContractPermissionDescriptor(); } diff --git a/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts b/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts index 66337dd969..155fea4292 100644 --- a/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts +++ b/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, createSerializeWire } from '@neo-one/client-common'; +import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; import { BinaryReader } from '../../utils'; import { NodeCapabilityBase } from './NodeCapabilityBase'; @@ -11,7 +11,10 @@ export interface FullNodeCapabilityAdd { 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({ @@ -27,7 +30,7 @@ export class FullNodeCapability extends NodeCapabilityBase { } public readonly startHeight: number; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ startHeight }: FullNodeCapabilityAdd) { super({ type: NodeCapabilityType.FullNode }); diff --git a/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts b/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts index fe888effe3..75baee6a7f 100644 --- a/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts +++ b/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts @@ -14,8 +14,6 @@ export const deserializeNodeCapabilityWireBase = (options: DeserializeWireBaseOp switch (type) { case NodeCapabilityType.TcpServer: - return ServerCapability.deserializeWireBase(options); - case NodeCapabilityType.WsServer: return ServerCapability.deserializeWireBase(options); diff --git a/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts b/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts index fe9d03086f..0c8d42509a 100644 --- a/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts +++ b/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts @@ -30,7 +30,7 @@ export class ServerCapability extends NodeCapabilityBase { } public readonly port: number; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ type, port }: ServerCapabilityAdd) { super({ type }); diff --git a/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts index 4e2bb07232..f3a0d30522 100644 --- a/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts +++ b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts @@ -37,7 +37,7 @@ export class ChangeViewPayloadCompact implements SerializableWire { public readonly originalViewNumber: number; public readonly timestamp: BN; public readonly invocationScript: Buffer; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ validatorIndex, originalViewNumber, timestamp, invocationScript }: ChangeViewPayloadCompactAdd) { this.validatorIndex = validatorIndex; diff --git a/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts index 6d1f56b0fb..99599c7dfa 100644 --- a/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts +++ b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts @@ -36,7 +36,7 @@ export class CommitPayloadCompact implements SerializableWire { public readonly viewNumber: number; public readonly signature: Buffer; public readonly invocationScript: Buffer; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ validatorIndex, viewNumber, signature, invocationScript }: CommitPayloadCompactAdd) { this.validatorIndex = validatorIndex; diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index 5bd42e9819..ae462501a6 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -1,6 +1,11 @@ import { BinaryWriter, createSerializeWire, crypto, InvalidFormatError } from '@neo-one/client-common'; import { NativeContainer } from '../Native'; -import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from '../Serializable'; import { BlockchainStorage } from '../Storage'; import { BinaryReader, utils } from '../utils'; import { Verifiable, VerifyOptions } from '../Verifiable'; @@ -15,7 +20,7 @@ export interface VerifyConsensusPayloadOptions extends VerifyOptions { readonly height: number; } -export class ConsensusPayload extends UnsignedConsensusPayload implements SerializableWire, Verifiable { +export class ConsensusPayload extends UnsignedConsensusPayload implements SerializableContainer, Verifiable { public static deserializeWireBase(options: DeserializeWireBaseOptions, validatorsCount = 7): ConsensusPayload { const { reader } = options; const { @@ -49,6 +54,7 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial }); } + public readonly type: SerializableContainerType = 'ConsensusPayload'; public readonly witness: Witness; public readonly serializeUnsigned = createSerializeWire(this.serializeWireBaseUnsigned); public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); diff --git a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts index ff0493646d..a906375292 100644 --- a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts @@ -82,7 +82,7 @@ export class RecoveryConsensusMessage extends ConsensusMessageBase { public readonly changeViewMessages: _.NumericDictionary; public readonly preparationMessages: _.NumericDictionary; public readonly commitMessages: _.NumericDictionary; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ viewNumber, diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 80f859ad46..21c6e28852 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -11,6 +11,7 @@ import { TransactionModel, TransactionModelAdd, UInt160, + VerboseTransactionJSON, VerifyResultModel, VMStateJSON, } from '@neo-one/client-common'; @@ -275,12 +276,12 @@ export class Transaction validuntilblock: this.validUntilBlock, signers: this.signers.map((signer) => signer.serializeJSON()), attributes: this.attributes.map((attr) => attr.serializeJSON()), - script: JSONHelper.writeBuffer(this.script), + script: JSONHelper.writeBase64Buffer(this.script), witnesses: this.witnesses.map((witness) => witness.serializeJSON()), }; } - public serializeJSONWithInvocationData(data: VerboseData) { + public serializeJSONWithInvocationData(data: VerboseData): VerboseTransactionJSON { const base = this.serializeJSON(); return { diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 1d623dc6d9..9f1a727068 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -11,13 +11,6 @@ export enum TriggerType { Application = 0x10, } -export type ScriptContainerType = 'Signers' | 'Transaction' | 'Block'; - -export interface SerializedScriptContainer { - readonly type: ScriptContainerType; - readonly buffer: Buffer; -} - export interface Notification { readonly scriptContainer: SerializableContainer; readonly scriptHash: UInt160; diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index a13b6d9fa6..e8f4c0eba1 100644 --- a/packages/neo-one-node-network/src/Network.ts +++ b/packages/neo-one-node-network/src/Network.ts @@ -324,8 +324,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 { @@ -500,7 +501,7 @@ 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}`, ); diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index d97055551f..72b7497d75 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -29,6 +29,7 @@ "ip-address": "^6.0.0", "lodash": "^4.17.15", "lru-cache": "^5.0.0", + "lz4": "0.6.3", "tslib": "^1.10.0" }, "devDependencies": { @@ -37,6 +38,7 @@ "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/lru-cache": "^5.1.0", + "@types/node": "^12.7.7", "gulp": "~4.0.2" } } diff --git a/packages/neo-one-node-protocol/src/Message.ts b/packages/neo-one-node-protocol/src/Message.ts index 5d82a478db..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'; @@ -20,7 +17,8 @@ import { import { makeErrorWithCode, utils } from '@neo-one/utils'; import { Transform } from 'stream'; import { assertCommand, Command } from './Command'; -import { assertMessageFlags } from './MessageFlags'; +import { lz4Helper } from './lz4Helper'; +import { assertMessageFlags, MessageFlags } from './MessageFlags'; import { AddrPayload, FilterAddPayload, @@ -33,6 +31,7 @@ import { PingPayload, VersionPayload, } from './payload'; + export type MessageValue = | { readonly command: Command.Addr; readonly payload: AddrPayload } | { readonly command: Command.Block; readonly payload: Block } @@ -59,7 +58,8 @@ export type MessageValue = | { readonly command: Command.Reject }; export interface MessageAdd { - readonly magic: number; + readonly flags: MessageFlags; + readonly payloadBuffer: Buffer; readonly value: MessageValue; } @@ -67,9 +67,145 @@ export const PAYLOAD_MAX_SIZE = 0x02000000; const compressionMinSize = 128; const compressionThreshold = 64; -const calculateChecksum = (buffer: Buffer) => common.toUInt32LE(crypto.hash256(buffer)); +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(``); + } +}; 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; @@ -77,154 +213,17 @@ export class Message implements SerializableWire { const command = assertCommand(reader.readInt8()); const payloadBuffer = reader.readVarBytesLE(PAYLOAD_MAX_SIZE); - // TODO: pickup here, we need to work out compressing / decompressing the message payload - // and how that will be stored in the class; + 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.GetBlockByIndex: - value = { - command: Command.GetBlockByIndex, - payload: GetBlockByIndexPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.GetData: - value = { - command: Command.GetData, - payload: InvPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.GetHeaders: - value = { - command: Command.GetHeaders, - payload: GetBlockByIndexPayload.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.Transaction: - value = { - command: Command.Transaction, - payload: Transaction.deserializeWire(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, payload: InvPayload.deserializeWire(payloadOptions) }; - break; - case Command.Ping: - value = { command: Command.Ping, payload: PingPayload.deserializeWire(payloadOptions) }; - - break; - case Command.Pong: - value = { command: Command.Pong, payload: PingPayload.deserializeWire(payloadOptions) }; - - 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 { @@ -234,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.Transaction: - 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); } } @@ -324,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; @@ -378,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/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index 885e85b61d..1aad26f246 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -45,7 +45,7 @@ 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, @@ -140,7 +140,7 @@ const MEM_POOL_SIZE = 5000; 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 = 5000; const GET_BLOCKS_THROTTLE_MS = 1000; const TRIM_MEMPOOL_THROTTLE = 5000; const GET_BLOCKS_CLOSE_COUNT = 2; @@ -153,6 +153,8 @@ interface PeerHealth { readonly checkTimeSeconds: number; } +const trimMemPool = () => Promise.reject(new Error('not implemented yet')); + export class Node implements INode { public readonly blockchain: Blockchain; // tslint:disable-next-line readonly-keyword @@ -163,7 +165,6 @@ export class Node implements INode { private readonly externalPort: number; private readonly nonce: number; private readonly userAgent: string; - private readonly capabilities: readonly NodeCapability[]; private mutableKnownBlockHashes: ScalingBloem; private readonly tempKnownBlockHashes: Set; private mutableKnownTransactionHashes: ScalingBloem; @@ -179,11 +180,12 @@ 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 && block.index < this.mutableBlockIndex[peer.endpoint]) { if (this.mutableGetBlocksRequestsCount > GET_BLOCKS_CLOSE_COUNT) { this.mutableBestPeer = this.findBestPeer(peer); this.network.blacklistAndClose(peer); @@ -198,10 +200,11 @@ export class Node implements INode { this.mutableGetBlocksRequestTime = Date.now(); this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.GetBlocks, payload: new GetBlocksPayload({ hashStart: block.hash, + count: this.mutableGetBlocksRequestsCount * 100, }), }), ); @@ -210,37 +213,38 @@ 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); // tslint:disable-next-line no-unnecessary-type-annotation - 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.networkFee({ - fees: this.blockchain.settings.fees, - }); - - return { transaction, networkFee }; - }), - ); - - const hashesToRemove = _.take( - // tslint:disable-next-line no-array-mutation - transactionAndFees.slice().sort(compareTransactionAndFees), - this.blockchain.settings.memoryPoolMaxTransactions, - ).map((transactionAndFee) => transactionAndFee.transaction.hashHex); - hashesToRemove.forEach((hash) => { - // tslint:disable-next-line no-dynamic-delete - delete this.mutableMemPool[hash]; - }); - } - }, TRIM_MEMPOOL_THROTTLE); + // 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.networkFee({ + // fees: this.blockchain.settings.fees, + // }); + + // return { transaction, networkFee }; + // }), + // ); + + // const hashesToRemove = _.take( + // // tslint:disable-next-line no-array-mutation + // transactionAndFees.slice().sort(compareTransactionAndFees), + // this.blockchain.settings.memoryPoolMaxTransactions, + // ).map((transactionAndFee) => transactionAndFee.transaction.hashHex); + // hashesToRemove.forEach((hash) => { + // // tslint:disable-next-line no-dynamic-delete + // delete this.mutableMemPool[hash]; + // }); + // } + // }, TRIM_MEMPOOL_THROTTLE); public constructor({ blockchain, @@ -285,10 +289,6 @@ export class Node implements INode { this.mutableGetBlocksRequestsCount = 1; this.consensusCache = new LRUCache(10000); this.mutableBlockIndex = {}; - - const fullNodeCapability = new FullNodeCapability({ startHeight: this.blockchain.currentBlockIndex }); - const tcpCapability = new ServerCapability({ type: NodeCapabilityType.TcpServer, port: this.externalPort }); - this.capabilities = [fullNodeCapability, tcpCapability]; } public get version(): Version { @@ -300,6 +300,13 @@ export class Node implements INode { }; } + 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; } @@ -410,7 +417,7 @@ export class Node implements INode { } this.transactionVerificationContext.addTransaction(transaction); this.relayTransactionInternal(transaction); - await this.trimMemPool(); + await trimMemPool(); } } @@ -446,7 +453,7 @@ export class Node implements INode { } public relayConsensusPayload(payload: ConsensusPayload): void { - const message = this.createMessage({ + const message = Message.create({ command: Command.Inv, payload: new InvPayload({ type: InventoryType.Consensus, @@ -459,7 +466,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 { @@ -467,7 +474,7 @@ export class Node implements INode { } private relayTransactionInternal(transaction: Transaction): void { - const message = this.createMessage({ + const message = Message.create({ command: Command.Inv, payload: new InvPayload({ type: InventoryType.TX, @@ -489,7 +496,7 @@ export class Node implements INode { private readonly negotiate = async (peer: Peer): Promise> => { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Version, payload: VersionPayload.create({ magic: this.blockchain.settings.messageMagic, @@ -521,8 +528,8 @@ export class Node implements INode { }) : undefined; - this.sendMessage(peer, this.createMessage({ command: Command.Verack })); - + const verackMessage = Message.create({ command: Command.Verack }); + this.sendMessage(peer, verackMessage); const nextMessage = await peer.receiveMessage(30000); if (nextMessage.value.command !== Command.Verack) { throw new NegotiationError(nextMessage); @@ -537,7 +544,7 @@ export class Node implements INode { return { ...acc, relay: true, - lastBlockIndex: fullCap.startHeight, + startHeight: fullCap.startHeight, }; case NodeCapabilityType.TcpServer: @@ -557,13 +564,11 @@ export class Node implements INode { }, { relay: false, port: 0, startHeight: 0 }, ); - this.mutableBlockIndex[peer.endpoint] = startHeight; return { data: { nonce: versionPayload.nonce, - startHeight, mutableBloomFilter: undefined, address, listenPort: port, @@ -601,13 +606,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(); @@ -629,12 +635,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 { @@ -671,7 +679,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 { @@ -842,12 +850,13 @@ export class Node implements INode { 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); } private async persistBlock(block: Block): Promise { + const startTime = Date.now(); if (this.blockchain.currentBlockIndex > block.index || this.tempKnownBlockHashes.has(block.hashHex)) { return; } @@ -868,9 +877,9 @@ 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({ + Message.create({ command: Command.Inv, payload: new InvPayload({ type: InventoryType.Block, @@ -879,7 +888,11 @@ export class Node implements INode { }), ); } - logger.info({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index }); + logger.info({ + name: 'neo_relay_block', + [Labels.NEO_BLOCK_INDEX]: block.index, + timeToPersist: `${(Date.now() - startTime) / 1000} seconds`, + }); } catch (err) { logger.error({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index, err }); throw err; @@ -937,7 +950,7 @@ export class Node implements INode { if (addressList.length > 0) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Addr, payload: new AddrPayload({ addressList }), }), @@ -974,7 +987,7 @@ export class Node implements INode { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Inv, payload: new InvPayload({ type: InventoryType.Block, @@ -1000,7 +1013,7 @@ export class Node implements INode { if (peer.data.mutableBloomFilter === undefined) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Block, payload: block, }), @@ -1008,7 +1021,7 @@ export class Node implements INode { } else { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.MerkleBlock, payload: MerkleBlockPayload.create({ block, @@ -1037,7 +1050,7 @@ export class Node implements INode { if (transaction !== undefined) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Transaction, payload: transaction, }), @@ -1058,7 +1071,7 @@ export class Node implements INode { if (peer.data.mutableBloomFilter === undefined) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Block, payload: block, }), @@ -1066,7 +1079,7 @@ export class Node implements INode { } else { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.MerkleBlock, payload: MerkleBlockPayload.create({ block, @@ -1090,7 +1103,7 @@ export class Node implements INode { if (payload !== undefined) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Consensus, payload, }), @@ -1107,7 +1120,7 @@ export class Node implements INode { InvPayload.createGroup(getData.type, notFound).forEach((payload) => { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.NotFound, payload, }), @@ -1146,7 +1159,7 @@ export class Node implements INode { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Headers, payload: new HeadersPayload({ headers }), }), @@ -1182,7 +1195,7 @@ export class Node implements INode { if (hashes.length > 0) { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.GetData, payload: new InvPayload({ type: inv.type, hashes }), }), @@ -1197,7 +1210,7 @@ export class Node implements INode { ).forEach((payload) => { this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Inv, payload, }), @@ -1215,7 +1228,7 @@ export class Node implements INode { this.updateLastBlockIndex(peer.endpoint, payload); this.sendMessage( peer, - this.createMessage({ + Message.create({ command: Command.Pong, payload: PingPayload.create(this.blockchain.currentBlockIndex, payload.nonce), }), @@ -1243,11 +1256,4 @@ export class Node implements INode { this.mutableBlockIndex[endpoint] = payload.lastBlockIndex; } } - - 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 b6c5ca3205..8c62858890 100644 --- a/packages/neo-one-node-protocol/src/PeerData.ts +++ b/packages/neo-one-node-protocol/src/PeerData.ts @@ -4,7 +4,6 @@ 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/GetBlockByIndexPayload.ts b/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts index 4777870234..9e7758fa4d 100644 --- a/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts @@ -38,7 +38,7 @@ export class GetBlockByIndexPayload { public readonly indexStart: number; public readonly count: number; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ indexStart, count }: GetBlockByIndexPayloadAdd) { this.indexStart = indexStart; diff --git a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts index df24419db9..94ab97761c 100644 --- a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, IOHelper, SerializableWire, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, createSerializeWire, IOHelper, SerializableWire, UInt256 } from '@neo-one/client-common'; import { BinaryReader, Block, @@ -75,6 +75,7 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { }); } + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public readonly contentCount: number; public readonly hashes: readonly UInt256[]; public readonly flags: Buffer; diff --git a/packages/neo-one-node-protocol/src/payload/PingPayload.ts b/packages/neo-one-node-protocol/src/payload/PingPayload.ts index a715da689e..72082a477d 100644 --- a/packages/neo-one-node-protocol/src/payload/PingPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/PingPayload.ts @@ -1,11 +1,5 @@ import { BinaryWriter, createSerializeWire } from '@neo-one/client-common'; -import { - BinaryReader, - DeserializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - utils, -} from '@neo-one/node-core'; +import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions, utils } from '@neo-one/node-core'; export interface PingPayloadAdd { readonly lastBlockIndex: number; @@ -49,7 +43,7 @@ export class PingPayload { public readonly timestamp: number; public readonly nonce: number; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ lastBlockIndex, timestamp, nonce }: PingPayloadAdd) { this.lastBlockIndex = lastBlockIndex; diff --git a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts index 1d75e68326..d06e62c5bb 100644 --- a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts @@ -74,7 +74,7 @@ export class VersionPayload { public readonly userAgent: string; public readonly capabilities: readonly NodeCapability[]; - public readonly serializeWire = createSerializeWire(this.serializeWireBase); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ magic, version, timestamp, nonce, userAgent, capabilities }: VersionPayloadAdd) { this.magic = magic; diff --git a/packages/neo-one-node-protocol/src/payload/index.ts b/packages/neo-one-node-protocol/src/payload/index.ts index edef78ea8a..88100270a0 100644 --- a/packages/neo-one-node-protocol/src/payload/index.ts +++ b/packages/neo-one-node-protocol/src/payload/index.ts @@ -8,6 +8,6 @@ export { InvPayload } from './InvPayload'; export { MerkleBlockPayload } from './MerkleBlockPayload'; export { NetworkAddress } from './NetworkAddress'; export { PingPayload } from './PingPayload'; -export { VersionPayload, SERVICES } from './VersionPayload'; +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 index bfb2319087..791f85c17e 100644 --- a/packages/neo-one-node-protocol/tsconfig.json +++ b/packages/neo-one-node-protocol/tsconfig.json @@ -1,3 +1,4 @@ { - "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" + "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/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 523ee3babb..0ae68704c1 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -6,6 +6,7 @@ import { JSONHelper, RelayTransactionResultJSON, ScriptBuilder, + toJSONVerifyResult, toVMStateJSON, toWitnessScope, TransactionJSON, @@ -28,7 +29,7 @@ import { TransactionState, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; -import { filter, switchMap, take, timeout, toArray } from 'rxjs/operators'; +import { filter, map, switchMap, take, timeout, toArray } from 'rxjs/operators'; const logger = createChild(nodeLogger, { component: 'rpc-handler' }); @@ -352,7 +353,7 @@ export const createHandler = ({ [RPC_METHODS.getblockhash]: async (args) => { const height = args[0]; checkHeight(height); - const hash = await blockchain.getBlockHash(height); + const hash = blockchain.getBlockHash(height); return hash === undefined ? undefined : JSONHelper.writeUInt256(hash); }, @@ -630,49 +631,49 @@ export const createHandler = ({ address: common.uInt160ToString(hash), }; }, - [RPC_METHODS.getnep5balances]: async (args) => { - const hash = JSONHelper.readUInt160(args[0]); - const account = await blockchain.account.tryGet({ hash }); - if (account === undefined) { - throw new JSONRPCError(-100, 'Unknown account'); - } - const resultBalances: Array<{ - readonly assethash: string; - readonly amount: string; - readonly lastupdatedblock: number; - }> = []; - const balances = Object.entries(account.balances); - // tslint:disable-next-line: no-loop-statement - for (const balance of balances) { - // tslint:disable-next-line: no-array-mutation - resultBalances.push({ - assethash: balance[0], - amount: balance[1]?.toString() ?? '0', - lastupdatedblock: -1, // TODO: in account balance in blockchain.account we need to store the "lastUpdateBlock" as well - }); - } + // [RPC_METHODS.getnep5balances]: async (args) => { + // const hash = JSONHelper.readUInt160(args[0]); + // const account = await blockchain.account.tryGet({ hash }); + // if (account === undefined) { + // throw new JSONRPCError(-100, 'Unknown account'); + // } + // const resultBalances: Array<{ + // readonly assethash: string; + // readonly amount: string; + // readonly lastupdatedblock: number; + // }> = []; + // const balances = Object.entries(account.balances); + // // tslint:disable-next-line: no-loop-statement + // for (const balance of balances) { + // // tslint:disable-next-line: no-array-mutation + // resultBalances.push({ + // assethash: balance[0], + // amount: balance[1]?.toString() ?? '0', + // lastupdatedblock: -1, // TODO: in account balance in blockchain.account we need to store the "lastUpdateBlock" as well + // }); + // } - return { - balance: resultBalances, - address: common.uInt160ToString(hash), - }; - }, + // return { + // balance: resultBalances, + // address: common.uInt160ToString(hash), + // }; + // }, // Settings - [RPC_METHODS.updatesettings]: async (args) => { - const { settings } = blockchain; - const newSettings = { - ...settings, - secondsPerBlock: args[0].secondsPerBlock, - }; + // [RPC_METHODS.updatesettings]: async (args) => { + // const { settings } = blockchain; + // const newSettings = { + // ...settings, + // secondsPerBlock: args[0].secondsPerBlock, + // }; - blockchain.updateSettings(newSettings); + // blockchain.updateSettings(newSettings); - return true; - }, - [RPC_METHODS.getsettings]: async () => ({ - millisecondsPerBlock: blockchain.settings.millisecondsPerBlock, - }), + // return true; + // }, + // [RPC_METHODS.getsettings]: async () => ({ + // millisecondsPerBlock: blockchain.settings.millisecondsPerBlock, + // }), // NEO•ONE // TODO: I think we can get away with not using this but we need to make the change in the provider @@ -701,28 +702,31 @@ export const createHandler = ({ try { const [transactionJSON, result] = await Promise.all([ - transaction.serializeJSON(blockchain.serializeJSONContext), + transaction.serializeJSON(), 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 resultJSON = result.verifyResult !== undefined ? toJSONVerifyResult(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, + // })), + // }, + // }; return { - ...resultJSON, transaction: transactionJSON, + verifyResult: resultJSON, }; } catch (error) { throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); @@ -730,13 +734,18 @@ export const createHandler = ({ }, [RPC_METHODS.getallstorage]: 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) { return []; } - const items = await blockchain.storageItem.getAll$({ id: contract.id }).pipe(toArray()).toPromise(); - return items.map((item) => item.serializeJSON(blockchain.serializeJSONContext)); + return blockchain.storages + .find$(Buffer.from([contract.id])) + .pipe( + map(({ key, value }) => value.serializeJSON(key)), + toArray(), + ) + .toPromise(); }, [RPC_METHODS.gettransactionreceipt]: async (args) => { 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 94ee2d0934..93e57471ac 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -2,7 +2,7 @@ import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo import { BlockKey, StorageKey, StreamOptions } from '@neo-one/node-core'; import { BN } from 'bn.js'; -enum Prefix { +export enum Prefix { Block = 0x01, Transaction = 0x02, Contract = 0x50, diff --git a/packages/neo-one-node-vm/src/converters/changes.ts b/packages/neo-one-node-vm/src/converters/changes.ts index ce149289ea..c8f6ee0571 100644 --- a/packages/neo-one-node-vm/src/converters/changes.ts +++ b/packages/neo-one-node-vm/src/converters/changes.ts @@ -46,13 +46,13 @@ const addPrefixToKey = (type: ItemType, key: Buffer) => { * we should export them from a common place like `node-core` for use in * `node-storage-levelup` and here. */ -interface PutBatch { +export interface PutBatch { readonly type: 'put'; readonly key: Buffer; readonly value: Buffer; } -interface DeleteBatch { +export interface DeleteBatch { readonly type: 'del'; readonly key: Buffer; } diff --git a/packages/neo-one-node-vm/src/converters/notifications.ts b/packages/neo-one-node-vm/src/converters/notifications.ts index 35f486812f..7c6494cf26 100644 --- a/packages/neo-one-node-vm/src/converters/notifications.ts +++ b/packages/neo-one-node-vm/src/converters/notifications.ts @@ -1,9 +1,9 @@ import { common } from '@neo-one/client-common'; -import { Notification } from '@neo-one/node-core'; +import { Notification, SerializableContainer } from '@neo-one/node-core'; import { parseStackItems, StackItemReturn } from './stackItems'; export interface NotificationReturn { - readonly scriptContainer: Buffer; + readonly scriptContainer: SerializableContainer; readonly scriptHash: Buffer; readonly eventName: string; readonly state: readonly StackItemReturn[]; diff --git a/packages/neo-one-node/src/__data__/data.ts b/packages/neo-one-node/src/__data__/data.ts index a74c1ac139..0bd0d2d8a1 100644 --- a/packages/neo-one-node/src/__data__/data.ts +++ b/packages/neo-one-node/src/__data__/data.ts @@ -1,7 +1,7 @@ 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 { genesisJSON, secondBlockJSON, thirdBlockJSON } from './jsonBlocks'; +import { debugBlockJSON, genesisJSON, secondBlockJSON, thirdBlockJSON } from './jsonBlocks'; const convertBlock = (json: BlockJSON) => new Block({ @@ -15,8 +15,8 @@ const convertBlock = (json: BlockJSON) => }), merkleRoot: JSONHelper.readUInt256(json.merkleroot), witness: new Witness({ - invocation: Buffer.from(json.witnesses[0].invocation, 'base64'), - verification: Buffer.from(json.witnesses[0].verification, 'base64'), + invocation: JSONHelper.readBase64Buffer(json.witnesses[0].invocation), + verification: JSONHelper.readBase64Buffer(json.witnesses[0].verification), }), transactions: json.tx.map( (tx) => @@ -24,15 +24,15 @@ const convertBlock = (json: BlockJSON) => hash: JSONHelper.readUInt256(tx.hash), nonce: tx.nonce, attributes: [], - script: Buffer.from(tx.script, 'base64'), + script: JSONHelper.readBase64Buffer(tx.script), systemFee: new BN(tx.sysfee), networkFee: new BN(tx.netfee), validUntilBlock: tx.validuntilblock, witnesses: tx.witnesses.map( (witness) => new Witness({ - invocation: Buffer.from(witness.invocation, 'base64'), - verification: Buffer.from(witness.verification, 'base64'), + invocation: JSONHelper.readBase64Buffer(witness.invocation), + verification: JSONHelper.readBase64Buffer(witness.verification), }), ), version: tx.version, @@ -53,12 +53,9 @@ const convertBlock = (json: BlockJSON) => : undefined, }); -const genesisBlockFromJSON = convertBlock(genesisJSON as any); -const secondBlockFromJSON = convertBlock(secondBlockJSON as any); -const thirdBlockFromJSON = convertBlock(thirdBlockJSON as any); - export const data = { - genesisBlock: genesisBlockFromJSON, - secondBlock: secondBlockFromJSON, - thirdBlock: thirdBlockFromJSON, + genesisBlock: convertBlock(genesisJSON as any), + secondBlock: convertBlock(secondBlockJSON as any), + thirdBlock: convertBlock(thirdBlockJSON as any), + debugBlock: convertBlock(debugBlockJSON as any), }; diff --git a/packages/neo-one-node/src/__data__/jsonBlocks.ts b/packages/neo-one-node/src/__data__/jsonBlocks.ts index 3241e83d5c..ed98b9fcf1 100644 --- a/packages/neo-one-node/src/__data__/jsonBlocks.ts +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -98,3 +98,53 @@ export const thirdBlockJSON = { confirmations: 311250, nextblockhash: '0xfd4d6fdf33eaec2d574590af1c8cbfcaa9d990b4ecc1cf0e60670b951be214a2', }; + +export const debugBlockJSON = { + version: 0, + hash: '0x62b9c6556b0acfc6e8c1f650bf02b6e68970840fbfadc5a60ef3b2c15adba1d2', + size: 948, + previousblockhash: '0x4ee710e3c8ab3355782ea19bc6e8015a64dba5cb518aaba5f2a9e8191ecc44da', + merkleroot: '0x9ab319ff358ef291ce343994d5b6cb323254e00f3bd3dfa855ef8003cf0ac21e', + time: '1596623855243', + index: 5363, + nextconsensus: 'NUQ6Q4BWvHU71HNxPQ4LMSHPMK1jSz1nw4', + witnesses: [ + { + invocation: + 'DEAIdyv6wls3FN47Rw4//yXM2L0TE2ci3Eo3lC2cx7OmrzU6rlk5HKtg0NVS2tuAAgcV48h3cWVBf082zJiGzbCyDEDnYdZuYpaICaSdp1dReL2EEa7gNWm+UZhG1Deus04IPA6tzLrvbd2GR9WNHAUeZMleS1pxTOe/tfajscwTxOcPDEDpfcTZoKaK0qp9vwkgDw5ysaLsQgcH4++NCcXc9z+dCl9wBkuJ+PGIKAPsV9JUGEXhMtJBCx1t8hdlUJKXy6JIDEAZet+oQR2V7A6VCRh0OPy8ai1fxi3uHnKlQqi7UrYC2PnD3/E6YFMR/hRLYUdZuyX+MYeLP+svnOQ/QLd63DdbDECF+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: '1248390', + 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 index b3e3568bb3..bb8b1b178b 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -4,6 +4,7 @@ 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 { BN } from 'bn.js'; import LevelUp from 'levelup'; import RocksDB from 'rocksdb'; import { data } from '../__data__'; @@ -32,32 +33,6 @@ describe('blockchain persists second block', () => { native, }); - const genesisBlock = await blockchain.getBlock(0); - expect(genesisBlock).toBeDefined(); - if (genesisBlock === undefined) { - throw new Error('for ts'); - } - - expect(blockchainSettings.genesisBlock.equals(genesisBlock)).toEqual(true); - const meta = await storage.blockHashIndex.tryGet(); - expect(meta?.hash).toEqual(blockchainSettings.genesisBlock.hash); - - // Persist index 1 block - const prePersistSecondBlock = await blockchain.getBlock(1); - expect(prePersistSecondBlock).not.toBeDefined(); - - await blockchain.persistBlock({ block: data.secondBlock }); - - const postPersistSecondBlock = await blockchain.getBlock(1); - expect(postPersistSecondBlock).toBeDefined(); - - // Persist index 2 block - const prePersistThirdBlock = await blockchain.getBlock(2); - expect(prePersistThirdBlock).not.toBeDefined(); - - await blockchain.persistBlock({ block: data.thirdBlock }); - - const postPersistThirdBlock = await blockchain.getBlock(2); - expect(postPersistThirdBlock).toBeDefined(); + await blockchain.persistBlock({ block: data.debugBlock }); }); }); 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..ec171fc1d4 --- /dev/null +++ b/packages/neo-one-node/src/__tests__/fullNode.test.ts @@ -0,0 +1,58 @@ +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 c7b70b3887..dafa80e74a 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -11,8 +11,8 @@ import { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node- import { composeDisposables, 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'; export interface LoggingOptions { readonly level?: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent'; @@ -59,10 +59,10 @@ export const startFullNode = async ({ setGlobalLogLevel(telemetry.logging.level); } - const levelDown = customLeveldown === undefined ? LevelDOWN(dataPath) : customLeveldown; + const rocks = customLeveldown === undefined ? RocksDB(dataPath) : customLeveldown; disposable = composeDisposables(disposable, async () => { await new Promise((resolve, reject) => { - levelDown.close((err) => { + rocks.close((err) => { if (err) { reject(err); } else { @@ -73,7 +73,7 @@ export const startFullNode = async ({ }); const storage = levelupStorage({ - db: LevelUp(levelDown), + db: LevelUp(rocks), context: { messageMagic: blockchainSettings.messageMagic }, }); diff --git a/packages/neo-one-react-common/tsconfig.json b/packages/neo-one-react-common/tsconfig.json index 762ea59430..dadfe6c6f6 100644 --- a/packages/neo-one-react-common/tsconfig.json +++ b/packages/neo-one-react-common/tsconfig.json @@ -1,4 +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", "static/global.d.ts"] + "include": ["src", "static/**/*.svg", "../neo-one-build-tools/types/global.d.ts"] } From 64ea6dde0ed125c0b82a8f10ae886ef5bfa2c6fd Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 14 Oct 2020 12:22:38 -0700 Subject: [PATCH 107/141] fix(node): fix stackitem deserializing, headerHashList saving (#2185) --- .../neo-one-node-blockchain/src/Blockchain.ts | 3 +- packages/neo-one-node-blockchain/src/utils.ts | 3 + .../neo-one-node-core/src/HeaderHashList.ts | 2 +- .../src/StackItems/StackItems.ts | 2 +- packages/neo-one-node-core/src/errors.ts | 3 +- .../src/transaction/Transaction.ts | 6 +- packages/neo-one-node-core/src/utils/utils.ts | 162 +++++++++++++++++ .../neo-one-node-native/src/AccountStates.ts | 19 +- packages/neo-one-node-native/src/NEOToken.ts | 5 +- packages/neo-one-node-native/src/Policy.ts | 3 +- packages/neo-one-node-native/src/utils.ts | 172 ------------------ .../neo-one-node-storage-common/src/keys.ts | 8 +- .../neo-one-node-storage-levelup/src/read.ts | 2 +- .../lib/Dispatcher.Snapshot.cs | 4 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 1 - .../lib/Storage/RocksDB/Snapshot.cs | 1 - packages/neo-one-node/src/__data__/data.ts | 4 +- .../neo-one-node/src/__data__/jsonBlocks.ts | 4 +- .../src/__tests__/blockchain.test.ts | 24 ++- 19 files changed, 216 insertions(+), 212 deletions(-) delete mode 100644 packages/neo-one-node-native/src/utils.ts diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 7e0b64ab38..4d633d81f1 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -57,7 +57,6 @@ interface Entry { readonly verify: boolean; } -const hashListBatchSize = 2000; export const recoverHeaderIndex = async (storage: Storage) => { const initHeaderIndex = await storage.headerHashList.all$ .pipe( @@ -573,7 +572,7 @@ export class Blockchain { } private async saveHeaderHashList(): Promise { - if (this.headerIndex.length - this.storedHeaderCount < hashListBatchSize) { + if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { return; } diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index a46f04bdda..3d2d89e488 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -24,6 +24,8 @@ import { import { BN } from 'bn.js'; import { ScriptVerifyError } from './errors'; +const hashListBatchSize = 2000; + const getOnPersistNativeContractScript = coreUtils.lazy(() => { const hashes = [common.nativeHashes.GAS, common.nativeHashes.NEO]; const script = new ScriptBuilder(); @@ -180,6 +182,7 @@ const blockComparator = ({ index: aIndex }: TBlock, { export const utils = { ...coreUtils, + hashListBatchSize, getApplicationExecuted, getCallReceipt, getOnPersistNativeContractScript, diff --git a/packages/neo-one-node-core/src/HeaderHashList.ts b/packages/neo-one-node-core/src/HeaderHashList.ts index e6d1a48b82..3cebdc8907 100644 --- a/packages/neo-one-node-core/src/HeaderHashList.ts +++ b/packages/neo-one-node-core/src/HeaderHashList.ts @@ -37,6 +37,6 @@ export class HeaderHashList implements SerializableWire { } public serializeWireBase(writer: BinaryWriter) { - writer.writeArray(this.hashes, writer.writeUInt256); + writer.writeArray(this.hashes, (hash) => writer.writeUInt256(hash)); } } diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index c4c9afd2e7..c06e927cc8 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -56,7 +56,7 @@ export const getAssertStackItemType = (isFunc: (item: any) => item is T, type return item; } - throw new InvalidStackItemTypeError(StackItemType[type]); + throw new InvalidStackItemTypeError(StackItemType[type], item.type); }; export const isNullStackItem: (item: any) => item is NullStackItem = getIsStackItemType(StackItemType.Any); diff --git a/packages/neo-one-node-core/src/errors.ts b/packages/neo-one-node-core/src/errors.ts index b76e84d44d..621129b3ac 100644 --- a/packages/neo-one-node-core/src/errors.ts +++ b/packages/neo-one-node-core/src/errors.ts @@ -51,7 +51,8 @@ export const InvalidStackItemError = makeErrorWithCode( ); export const InvalidStackItemTypeError = makeErrorWithCode( 'INVALID_STACK_ITEM_TYPE_ERROR', - (type: string) => `Invalid StackItemType, expected: ${type}`, + (type: string, found?: string) => + `Invalid StackItemType, expected: ${type}${found !== undefined ? ` found: ${found}` : ''}`, ); export const InvalidPrimitiveStackItemError = makeErrorWithCode( 'INVALID_PRIMITIVE_STACK_ITEM_ERROR', diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 21c6e28852..ac3bd88589 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -89,12 +89,12 @@ export class Transaction } const nonce = reader.readUInt32LE(); - const systemFee = reader.readUInt64LE(); + const systemFee = reader.readInt64LE(); if (systemFee.ltn(0)) { throw new InvalidFormatError(`Expected systemFee to be greater than 0, found: ${systemFee.toString()}`); } - const networkFee = reader.readUInt64LE(); + const networkFee = reader.readInt64LE(); if (networkFee.ltn(0)) { throw new InvalidFormatError(`Expected networkFee to be greater than 0, found: ${networkFee.toString()}`); } @@ -272,7 +272,7 @@ export class Transaction nonce: this.nonce, sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, sysfee: JSONHelper.writeUInt64LE(this.systemFee), - netfee: JSONHelper.writeUInt64(this.networkFee), + netfee: JSONHelper.writeUInt64LE(this.networkFee), validuntilblock: this.validUntilBlock, signers: this.signers.map((signer) => signer.serializeJSON()), attributes: this.attributes.map((attr) => attr.serializeJSON()), diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 02115724c8..a10684cbf0 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -3,7 +3,25 @@ import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { randomBytes } from 'crypto'; import _ from 'lodash'; +import { + ArrayStackItem, + assertPrimitiveStackItem, + assertStackItem, + assertStackItemType, + BooleanStackItem, + BufferStackItem, + ByteStringStackItem, + IntegerStackItem, + MapStackItem, + NullStackItem, + PrimitiveStackItem, + StackItem, + StackItemType, + StructStackItem, +} from '../StackItems'; import { StreamOptions } from '../Storage'; +import { StorageItem } from '../StorageItem'; +import { BinaryReader } from './BinaryReader'; const toASCII = (bytes: Buffer) => { let result = ''; @@ -200,6 +218,147 @@ const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: stri throw new InvalidFormatError(); }; +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; + +const getInteroperable = (item: StorageItem, fromStackItem: (item: StackItem) => T): T => { + const buffer = item.value; + const reader = new BinaryReader(buffer); + const deserializedStackItem = deserialize(reader, 16, 34); + + return fromStackItem(deserializedStackItem); +}; + +// tslint:disable: no-array-mutation no-loop-statement increment-decrement +const deserialize = (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)))); + 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 + +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); +}; + /* crude method but it does what we want it to do */ const generateSearchRange = (lookupKey: Buffer): StreamOptions => { const asBN = new BN(lookupKey); @@ -227,5 +386,8 @@ export const utils = { weightedAverage, weightedFilter, wildCardFromJSON, + getInteroperable, + getSerializableArray, + getSerializableArrayFromStorageItem, generateSearchRange, }; diff --git a/packages/neo-one-node-native/src/AccountStates.ts b/packages/neo-one-node-native/src/AccountStates.ts index 77b754e17f..572a3dbf46 100644 --- a/packages/neo-one-node-native/src/AccountStates.ts +++ b/packages/neo-one-node-native/src/AccountStates.ts @@ -1,12 +1,5 @@ import { common, ECPoint } from '@neo-one/client-common'; -import { - assertBooleanStackItem, - assertBufferStackItem, - assertIntegerStackItem, - assertStructStackItem, - StackItem, - StructStackItem, -} from '@neo-one/node-core'; +import { assertIntegerStackItem, assertStructStackItem, StackItem, StructStackItem } from '@neo-one/node-core'; import { BN } from 'bn.js'; export interface AccountStateAdd { @@ -38,10 +31,8 @@ export class NEOAccountState extends AccountState { public static fromStackItem(item: StackItem) { const structItem = assertStructStackItem(item); const { balance } = super.fromStackItem(structItem); - const balanceHeight = assertIntegerStackItem(structItem.array[1]).getInteger(); - const voteTo = structItem.array[2].isNull - ? undefined - : common.bufferToECPoint(assertBufferStackItem(structItem.array[2]).getBuffer()); + const balanceHeight = structItem.array[1].getInteger(); + const voteTo = structItem.array[2].isNull ? undefined : common.bufferToECPoint(structItem.array[2].getBuffer()); return new NEOAccountState({ balance, @@ -68,8 +59,8 @@ export interface CandidateStateAdd { export class CandidateState { public static fromStackItem(item: StackItem) { const structItem = assertStructStackItem(item); - const registered = assertBooleanStackItem(structItem.array[0]).getBoolean(); - const votes = assertIntegerStackItem(structItem.array[1]).getInteger(); + const registered = structItem.array[0].getBoolean(); + const votes = structItem.array[1].getInteger(); return new CandidateState({ registered, diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts index c95b001e6f..b46a866de7 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -1,12 +1,11 @@ import { common, crypto, ECPoint, UInt160 } from '@neo-one/client-common'; -import { BlockchainSettings, Candidate, NativeContractStorageContext } from '@neo-one/node-core'; +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 { GASToken } from './GASToken'; import { NEP5NativeContract } from './Nep5'; -import { utils } from './utils'; export class NEOToken extends NEP5NativeContract { public readonly totalAmount: BN; @@ -37,7 +36,7 @@ export class NEOToken extends NEP5NativeContract { } public async getCandidates(storage: NativeContractStorageContext): Promise { - const searchKey = this.createStorageKey(this.prefixes.candidate).toStorageKey().serializeWire(); + const searchKey = this.createStorageKey(this.prefixes.candidate).toSearchPrefix(); return storage.storages .find$(searchKey) diff --git a/packages/neo-one-node-native/src/Policy.ts b/packages/neo-one-node-native/src/Policy.ts index 1111f93c14..15a401c572 100644 --- a/packages/neo-one-node-native/src/Policy.ts +++ b/packages/neo-one-node-native/src/Policy.ts @@ -1,9 +1,8 @@ import { common, UInt160 } from '@neo-one/client-common'; -import { NativeContractStorageContext } from '@neo-one/node-core'; +import { NativeContractStorageContext, utils } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { GASToken } from './GASToken'; import { NativeContract } from './NativeContract'; -import { utils } from './utils'; // tslint:disable-next-line: export-name export class PolicyContract extends NativeContract { diff --git a/packages/neo-one-node-native/src/utils.ts b/packages/neo-one-node-native/src/utils.ts deleted file mode 100644 index 82a92e88f4..0000000000 --- a/packages/neo-one-node-native/src/utils.ts +++ /dev/null @@ -1,172 +0,0 @@ -import { InvalidFormatError } from '@neo-one/client-common'; -import { - ArrayStackItem, - assertPrimitiveStackItem, - assertStackItemType, - BinaryReader, - BooleanStackItem, - BufferStackItem, - ByteStringStackItem, - IntegerStackItem, - MapStackItem, - NullStackItem, - PrimitiveStackItem, - StackItem, - StackItemType, - StorageItem, - StructStackItem, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; - -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; - -const getInteroperable = (item: StorageItem, fromStackItem: (item: StackItem) => T): T => { - const buffer = item.value; - const reader = new BinaryReader(buffer); - const deserializedStackItem = deserialize(reader, 16, 34); - - return fromStackItem(deserializedStackItem); -}; - -// tslint:disable: no-array-mutation no-loop-statement increment-decrement -const deserialize = (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)))); - 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: - const arrayCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: arrayCount })); - undeserialized += arrayCount; - break; - - case StackItemType.Struct: - const structCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: structCount })); - undeserialized += structCount; - break; - - case StackItemType.Map: - const mapCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: mapCount })); - undeserialized += mapCount * 2; - break; - - default: - throw new InvalidFormatError(`Invalid StackItemType, found: ${type}`); - } - } - - let stackTemp: StackItem[] = []; - while (deserialized.length > 0) { - const item = deserialized.pop(); - 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); - stackTemp = stackTemp.slice(item.elementCount); - stackTemp.push(new ArrayStackItem(arrayElements)); - break; - - case StackItemType.Struct: - const structElements = stackTemp.slice(0, item.elementCount); - stackTemp = stackTemp.slice(item.elementCount); - stackTemp.push(new StructStackItem(structElements)); - break; - - case StackItemType.Map: - const mapElements = stackTemp.slice(0, item.elementCount * 2); - stackTemp = stackTemp.slice(item.elementCount * 2); - stackTemp.push( - 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.push(item); - } - } - - return stackTemp[0]; -}; -// tslint:enable: no-array-mutation no-loop-statement increment-decrement - -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 = { - getInteroperable, - getSerializableArray, - getSerializableArrayFromStorageItem, -}; diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index 93e57471ac..563ff4638b 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -22,7 +22,11 @@ const getCreateKey = ({ }: { readonly serializeKey: (key: Key) => Buffer; readonly prefix: Prefix; -}) => (key: Key) => Buffer.concat([Buffer.from([prefix]), serializeKey(key)]); +}) => { + const prefixKey = Buffer.from([prefix]); + + return (key: Key) => Buffer.concat([prefixKey, serializeKey(key)]); +}; const getMetadataKey = ({ prefix }: { readonly prefix: Prefix }) => Buffer.from([prefix]); @@ -35,7 +39,7 @@ const serializeHeaderHashListKey = (key: number) => { /* crude method but it does what we want it to do */ const generateSearchRange = (lookupKey: Buffer): Required => { - const asBN = new BN(lookupKey, 'le'); + const asBN = new BN(lookupKey); const lte = asBN.addn(1).toBuffer(); if (lte.length !== lookupKey.length) { throw new InvalidFormatError('not sure how this happened'); diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index c27df618aa..24b3e073b8 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -137,7 +137,7 @@ export function createFind$({ }): (lookup: Buffer) => Observable> { return (lookup: Buffer) => streamToObservable>(() => db.createReadStream(getSearchRange(lookup))).pipe( - map(({ key, value }) => ({ key: deserializeKey(key), value: deserializeValue(value) })), + map(({ key, value }) => ({ key: deserializeKey(key.slice(1)), value: deserializeValue(value) })), ); } diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 292b0b4232..3dc3d50aa2 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -183,7 +183,7 @@ private bool _snapshotTransactionsDelete(StoreView snapshot, UInt256 hash) private bool _snapshotChangeBlockHashIndex(StoreView snapshot, uint index, UInt256 hash) { - var hashIndex = snapshot.BlockHashIndex.GetAndChange(); + HashIndexState hashIndex = snapshot.BlockHashIndex.GetAndChange(); hashIndex.Index = index; hashIndex.Hash = hash; @@ -192,7 +192,7 @@ private bool _snapshotChangeBlockHashIndex(StoreView snapshot, uint index, UInt2 private bool _snapshotChangeHeaderHashIndex(StoreView snapshot, uint index, UInt256 hash) { - var hashIndex = snapshot.HeaderHashIndex.GetAndChange(); + HashIndexState hashIndex = snapshot.HeaderHashIndex.GetAndChange(); hashIndex.Index = index; hashIndex.Hash = hash; diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index c10f1f1da2..a79bc4d709 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -125,7 +125,6 @@ private bool _dispose() private dynamic _test() { - // return BitConverter.ToString(Blockchain.onPersistNativeContractScript); return true; } diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs index 961e867c73..d1293d8817 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -3,7 +3,6 @@ using RocksDbSharp; using System; using System.Collections.Generic; -using System.Linq; namespace NEOONE.Storage.RocksDB { diff --git a/packages/neo-one-node/src/__data__/data.ts b/packages/neo-one-node/src/__data__/data.ts index 0bd0d2d8a1..e06fbf2bfb 100644 --- a/packages/neo-one-node/src/__data__/data.ts +++ b/packages/neo-one-node/src/__data__/data.ts @@ -25,8 +25,8 @@ const convertBlock = (json: BlockJSON) => nonce: tx.nonce, attributes: [], script: JSONHelper.readBase64Buffer(tx.script), - systemFee: new BN(tx.sysfee), - networkFee: new BN(tx.netfee), + systemFee: JSONHelper.readUInt64LE(tx.sysfee), + networkFee: JSONHelper.readUInt64LE(tx.netfee), validUntilBlock: tx.validuntilblock, witnesses: tx.witnesses.map( (witness) => diff --git a/packages/neo-one-node/src/__data__/jsonBlocks.ts b/packages/neo-one-node/src/__data__/jsonBlocks.ts index ed98b9fcf1..0b487da2c5 100644 --- a/packages/neo-one-node/src/__data__/jsonBlocks.ts +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -111,7 +111,7 @@ export const debugBlockJSON = { witnesses: [ { invocation: - 'DEAIdyv6wls3FN47Rw4//yXM2L0TE2ci3Eo3lC2cx7OmrzU6rlk5HKtg0NVS2tuAAgcV48h3cWVBf082zJiGzbCyDEDnYdZuYpaICaSdp1dReL2EEa7gNWm+UZhG1Deus04IPA6tzLrvbd2GR9WNHAUeZMleS1pxTOe/tfajscwTxOcPDEDpfcTZoKaK0qp9vwkgDw5ysaLsQgcH4++NCcXc9z+dCl9wBkuJ+PGIKAPsV9JUGEXhMtJBCx1t8hdlUJKXy6JIDEAZet+oQR2V7A6VCRh0OPy8ai1fxi3uHnKlQqi7UrYC2PnD3/E6YFMR/hRLYUdZuyX+MYeLP+svnOQ/QLd63DdbDECF+j8cO7NY612P4TBjh+4Bifsa93mpbmRWzPDHnCik+mSPqE4MqMoiPyXYKyxekJyzMm95WHQm/f3KniYT6j4q', + '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==', }, @@ -128,7 +128,7 @@ export const debugBlockJSON = { nonce: 206553393, sender: 'NTZJ91cwZWiad8uj8sLMF7X6j8Ed41Cim6', sysfee: '0000000000897376', - netfee: '1248390', + netfee: '0000000000130c86', validuntilblock: 2107762, signers: [ { diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index bb8b1b178b..37c549fbbf 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,12 +1,14 @@ import { common } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { NativeContainer } from '@neo-one/node-native'; +import { StorageKey, StreamOptions } from '@neo-one/node-core'; +import { KeyBuilder, 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 { BN } from 'bn.js'; import LevelUp from 'levelup'; import RocksDB from 'rocksdb'; +import { map, toArray } from 'rxjs/operators'; import { data } from '../__data__'; describe('blockchain persists second block', () => { @@ -25,6 +27,8 @@ describe('blockchain persists second block', () => { protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); + // console.log(dispatcher.test()); + const native = new NativeContainer(blockchainSettings); const blockchain = await Blockchain.create({ settings: blockchainSettings, @@ -33,6 +37,22 @@ describe('blockchain persists second block', () => { native, }); - await blockchain.persistBlock({ block: data.debugBlock }); + await new Promise((resolve, reject) => + db + .createReadStream() + .on('data', (data: any) => { + console.log(`key: ${data.key.toString('hex')}`); + console.log(`value: ${data.key.toString('hex')}`); + }) + .on('error', (error) => { + reject(error); + }) + .on('close', resolve) + .on('end', resolve), + ); + + // console.log(blockchain.currentBlockIndex); + + // await blockchain.persistBlock({ block: data.debugBlock }); }); }); From eadaa486b55d519bc0c8895cf4a2a40a7ca3e850 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 15 Oct 2020 14:32:19 -0700 Subject: [PATCH 108/141] feat(nep5): add nep5 balance/transfer models and storage (#2182) --- .../neo-one-client-common/src/models/index.ts | 1 + .../src/models/nep5/Nep5BalanceKeyModel.ts | 24 +++ .../src/models/nep5/Nep5BalanceModel.ts | 23 ++ .../src/models/nep5/Nep5TransferKeyModel.ts | 38 ++++ .../src/models/nep5/Nep5TransferModel.ts | 32 +++ .../src/models/nep5/index.ts | 4 + .../neo-one-node-blockchain/src/Blockchain.ts | 24 ++- .../src/getNep5ChangeSet.ts | 196 ++++++++++++++++++ packages/neo-one-node-blockchain/src/utils.ts | 4 +- packages/neo-one-node-core/src/Native.ts | 2 +- packages/neo-one-node-core/src/Nep5Balance.ts | 49 +++++ .../neo-one-node-core/src/Nep5BalanceKey.ts | 42 ++++ .../neo-one-node-core/src/Nep5Transfer.ts | 61 ++++++ .../neo-one-node-core/src/Nep5TransferKey.ts | 53 +++++ packages/neo-one-node-core/src/Storage.ts | 17 +- packages/neo-one-node-core/src/index.ts | 4 + packages/neo-one-node-core/src/utils/utils.ts | 17 +- packages/neo-one-node-core/src/vm.ts | 6 +- .../src/middleware/rpc.ts | 12 +- .../src/setupRPCServer.ts | 5 +- .../neo-one-node-neo-settings/src/common.ts | 4 +- packages/neo-one-node-protocol/src/Node.ts | 2 +- .../neo-one-node-rpc-handler/package.json | 2 + .../src/createHandler.ts | 133 ++++++------ .../neo-one-node-storage-common/src/keys.ts | 38 +++- .../neo-one-node-storage-levelup/package.json | 2 + .../src/__tests__/levelUpStorage.test.ts | 33 ++- .../src/convertChange.ts | 33 +++ .../src/levelUpStorage.ts | 43 +++- .../neo-one-node-storage-levelup/src/read.ts | 14 +- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 2 +- packages/neo-one-node-vm/lib/ReturnHelpers.cs | 46 +++- .../neo-one-node/src/__data__/jsonBlocks.ts | 2 +- .../src/__tests__/blockchain.test.ts | 5 +- packages/neo-one-node/src/startFullNode.ts | 1 + 35 files changed, 865 insertions(+), 109 deletions(-) create mode 100644 packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts create mode 100644 packages/neo-one-client-common/src/models/nep5/Nep5BalanceModel.ts create mode 100644 packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts create mode 100644 packages/neo-one-client-common/src/models/nep5/Nep5TransferModel.ts create mode 100644 packages/neo-one-client-common/src/models/nep5/index.ts create mode 100644 packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts create mode 100644 packages/neo-one-node-core/src/Nep5Balance.ts create mode 100644 packages/neo-one-node-core/src/Nep5BalanceKey.ts create mode 100644 packages/neo-one-node-core/src/Nep5Transfer.ts create mode 100644 packages/neo-one-node-core/src/Nep5TransferKey.ts diff --git a/packages/neo-one-client-common/src/models/index.ts b/packages/neo-one-client-common/src/models/index.ts index d7e78010b4..b07f03ae13 100644 --- a/packages/neo-one-client-common/src/models/index.ts +++ b/packages/neo-one-client-common/src/models/index.ts @@ -6,5 +6,6 @@ export * from './StorageFlagsModel'; export * from './WitnessModel'; export * from './WitnessScopeModel'; export * from './transaction'; +export * from './nep5'; export * from './types'; export * from './vm'; 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..732461e464 --- /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.writeVarBytesLE(this.userScriptHash); + writer.writeVarBytesLE(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..5a4a0a82ac --- /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 blockXferNotificationIndex: number; +} + +export class Nep5TransferKeyModel implements SerializableWire { + public readonly userScriptHash: UInt160; + public readonly timestampMS: BN; + public readonly assetScriptHash: UInt160; + public readonly blockXferNotificationIndex: number; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ + userScriptHash, + timestampMS, + assetScriptHash, + blockXferNotificationIndex, + }: Nep5TransferKeyModelAdd) { + this.userScriptHash = userScriptHash; + this.timestampMS = timestampMS; + this.assetScriptHash = assetScriptHash; + this.blockXferNotificationIndex = blockXferNotificationIndex; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeVarBytesLE(this.userScriptHash); + writer.writeUInt64LE(this.timestampMS); + writer.writeVarBytesLE(this.assetScriptHash); + writer.writeUInt32LE(this.blockXferNotificationIndex); + } +} 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-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 4d633d81f1..9319f4c665 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -28,6 +28,7 @@ import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; import { flatMap, map, toArray } from 'rxjs/operators'; import { BlockVerifyError, ConsensusPayloadVerifyError, GenesisBlockNotRegisteredError } from './errors'; +import { getNep5ChangeSet } from './getNep5ChangeSet'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; @@ -226,6 +227,18 @@ export class Blockchain { return this.storage.blocks; } + public get nep5Balances() { + return this.storage.nep5Balances; + } + + public get nep5TransfersReceived() { + return this.storage.nep5TransfersReceived; + } + + public get nep5TransfersSent() { + return this.storage.nep5TransfersSent; + } + public get transactions() { return this.storage.transactions; } @@ -614,8 +627,6 @@ export class Blockchain { const currentHeaderCount = this.headerIndex.length; if (block.transactions.length !== 0) { logger.debug({ name: 'BLOCK_PERSIST_WITH_TRANSACTION', block: block.serializeJSON(this.serializeJSONContext) }); - logger.error({ name: 'SEE THIS ONE LOOK AT IT' }); - logger.error({ name: 'SEE THIS ONE LOOK AT IT' }); } const blockchain = this.createPersistingBlockchain(); @@ -626,6 +637,15 @@ export class Blockchain { const { changeBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); await this.storage.commitBatch(changeBatch); + + // This ordering could cause issues. Lookout. + const nep5ChangeSet = getNep5ChangeSet({ + applicationsExecuted, + block, + settings: this.settings, + runEngineWrapper: this.runEngineWrapper, + }); + await this.storage.commit(nep5ChangeSet); await this.saveHeaderHashList(); await this.updateBlockMetadata(block); diff --git a/packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts b/packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts new file mode 100644 index 0000000000..1fe5bad444 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts @@ -0,0 +1,196 @@ +import { common, ScriptBuilder, VMState } from '@neo-one/client-common'; +import { + ApplicationExecuted, + Block, + BlockchainSettings, + CallReceipt, + ChangeSet, + Nep5Balance, + Nep5BalanceKey, + Nep5Transfer, + Nep5TransferKey, + RunEngineOptions, + StackItemType, + Transaction, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +export function getNep5ChangeSet({ + applicationsExecuted, + block, + settings, + runEngineWrapper, +}: { + readonly applicationsExecuted: readonly ApplicationExecuted[]; + readonly block: Block; + readonly settings: BlockchainSettings; + readonly runEngineWrapper: (options: RunEngineOptions) => CallReceipt; +}): ChangeSet { + let transferIndex = 0; + const nep5BalancesChanged = new Set(); + const mutableNep5BalancesChangedKeys: Nep5BalanceKey[] = []; + const mutableTransfersSent: Array<{ readonly key: Nep5TransferKey; readonly value: Nep5Transfer }> = []; + const mutableTransfersReceived: Array<{ readonly key: Nep5TransferKey; readonly value: Nep5Transfer }> = []; + + applicationsExecuted.forEach((appExecuted) => { + if (appExecuted.state === VMState.FAULT) { + return; + } + + appExecuted.notifications.forEach((notifyEventArgs) => { + const { scriptContainer, scriptHash, eventName, state: stateItems } = notifyEventArgs; + + if (stateItems.length === 0) { + return; + } + if (eventName !== 'Transfer') { + return; + } + if (stateItems.length < 3) { + return; + } + if (!stateItems[0].isNull && stateItems[0].type !== StackItemType.ByteString) { + return; + } + if (!stateItems[1].isNull && stateItems[1].type !== StackItemType.ByteString) { + return; + } + const amountItem = stateItems[2]; + if (!(amountItem.type === StackItemType.ByteString || amountItem.type === StackItemType.Integer)) { + 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 transfered 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: from, assetScriptHash: scriptHash }); + const toKeyString = toKey.serializeWire().toString('hex'); + if (!nep5BalancesChanged.has(toKeyString)) { + nep5BalancesChanged.add(toKeyString); + mutableNep5BalancesChangedKeys.push(toKey); + } + } + + if (scriptContainer.type === 'Transaction') { + const amount = amountItem.getInteger(); + const txHash = Transaction.deserializeWire({ + buffer: scriptContainer.buffer, + context: { messageMagic: settings.messageMagic }, + }).hash; + + if (!from.equals(common.ZERO_UINT160)) { + mutableTransfersSent.push({ + key: new Nep5TransferKey({ + userScriptHash: from, + timestampMS: block.timestamp, + assetScriptHash: scriptHash, + blockXferNotificationIndex: 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, + blockXferNotificationIndex: transferIndex, + }), + value: new Nep5Transfer({ + userScriptHash: from, + txHash, + blockIndex: block.index, + amountBuffer: amount.toBuffer(), + }), + }); + } + + transferIndex += 1; + } + }); + }); + + const nep5BalancePairs = mutableNep5BalancesChangedKeys.map((key) => { + const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); + const callReceipt = runEngineWrapper({ script, gas: 100000000, snapshot: 'main' }); + const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); + + return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: block.index }) }; + }); + + const nep5BalanceChangeSet: ChangeSet = nep5BalancePairs.map(({ key, value }) => { + if (value.balance.eqn(0)) { + return { + type: 'delete', + change: { + type: 'nep5Balance', + key, + }, + }; + } + + return { + type: 'add', + change: { + type: 'nep5Balance', + key, + value, + }, + subType: 'update', + }; + }); + const nep5TransfersSentChangeSet: ChangeSet = mutableTransfersSent.map(({ key, value }) => ({ + type: 'add', + subType: 'add', + change: { + type: 'nep5TransferSent', + key, + value, + }, + })); + const nep5TransfersReceivedChangeSet: ChangeSet = mutableTransfersReceived.map(({ key, value }) => ({ + type: 'add', + subType: 'add', + change: { + type: 'nep5TransferReceived', + key, + value, + }, + })); + + return nep5BalanceChangeSet.concat(nep5TransfersReceivedChangeSet, nep5TransfersSentChangeSet); +} diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index 3d2d89e488..c99d129fbd 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -43,14 +43,14 @@ const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transac state: engine.state, gasConsumed: engine.gasConsumed, stack: engine.resultStack, - // notifications: engine.notifications, + notifications: engine.notifications, }); const getCallReceipt = (engine: ApplicationEngine) => ({ state: engine.state, gasConsumed: engine.gasConsumed, stack: engine.resultStack, - // notifications: engine.notifications, + notifications: engine.notifications, }); export interface TempWalletAccount { diff --git a/packages/neo-one-node-core/src/Native.ts b/packages/neo-one-node-core/src/Native.ts index 17c5a002a7..34c4638920 100644 --- a/packages/neo-one-node-core/src/Native.ts +++ b/packages/neo-one-node-core/src/Native.ts @@ -1,4 +1,4 @@ -import { common, ECPoint, UInt160 } from '@neo-one/client-common'; +import { ECPoint, UInt160 } from '@neo-one/client-common'; import { BN } from 'bn.js'; import { ReadFindStorage } from './Storage'; import { StorageItem } from './StorageItem'; 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..afe3794357 --- /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 blockXferNotificationIndex: 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 blockXferNotificationIndex = reader.readUInt16LE(); + + return new this({ + userScriptHash, + timestampMS, + assetScriptHash, + blockXferNotificationIndex, + }); + } + + 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, + blockXferNotificationIndex: this.blockXferNotificationIndex, + }); + } +} diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index ceb6d2415b..b5398373ab 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -3,6 +3,10 @@ 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'; @@ -36,7 +40,7 @@ export interface ReadAllStorage extends ReadStorage { } export interface ReadFindStorage extends ReadStorage { - readonly find$: (lookup: Buffer) => Observable>; + readonly find$: (lookup: Buffer, secondaryLookup?: Buffer) => Observable>; } export interface ReadGetAllStorage extends ReadStorage { @@ -110,11 +114,15 @@ export type AddChange = | { 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: '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 }; export type DeleteChange = | { readonly type: 'contract'; readonly key: ContractKey } - | { readonly type: 'storage'; readonly key: StorageKey }; + | { 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' } @@ -124,6 +132,9 @@ export type ChangeSet = readonly Change[]; export interface BlockchainStorage { readonly blocks: ReadStorage; + readonly nep5Balances: ReadFindStorage; + readonly nep5TransfersSent: ReadFindStorage; + readonly nep5TransfersReceived: ReadFindStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; readonly storages: ReadFindStorage; diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index adb22398d2..04eee3adca 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -33,3 +33,7 @@ export * from './Witness'; export * from './CallFlags'; export * from './TransactionData'; export * from './Node'; +export * from './Nep5Balance'; +export * from './Nep5Transfer'; +export * from './Nep5BalanceKey'; +export * from './Nep5TransferKey'; diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index a10684cbf0..05ca6668ac 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -205,7 +205,7 @@ function equals( const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: string) => T) => { if (typeof json === 'string') { if (json !== '*') { - // TODO: more descriptive; + // TODO: more descriptive throw new InvalidFormatError(); } @@ -359,20 +359,6 @@ const getSerializableArrayFromStorageItem = ( return getSerializableArray(value, readValue, max); }; -/* crude method but it does what we want it to do */ -const generateSearchRange = (lookupKey: Buffer): StreamOptions => { - 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, - }; -}; - export const utils = { ...clientUtils, toASCII, @@ -389,5 +375,4 @@ export const utils = { getInteroperable, getSerializableArray, getSerializableArrayFromStorageItem, - generateSearchRange, }; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 9f1a727068..42fc9b4230 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -12,7 +12,7 @@ export enum TriggerType { } export interface Notification { - readonly scriptContainer: SerializableContainer; + readonly scriptContainer: SerializedScriptContainer; readonly scriptHash: UInt160; readonly eventName: string; readonly state: readonly StackItem[]; @@ -22,7 +22,7 @@ export interface CallReceipt { readonly state: VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; - // readonly notifications: readonly Notification[]; + readonly notifications: readonly Notification[]; } export type SnapshotName = 'main' | 'clone'; @@ -79,7 +79,7 @@ export interface ApplicationExecuted { readonly state: VMState; readonly gasConsumed: number; readonly stack: readonly StackItem[]; - // readonly notifications: readonly Notification[]; + readonly notifications: readonly Notification[]; } export interface VM { 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-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 913e2aff1a..45f655e6de 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -88,9 +88,10 @@ const getDeployNativeContracts = () => { interface GetGenesisBlockOptions { readonly consensusAddress: UInt160; + readonly privateNet?: boolean; } -const getGenesisBlock = ({ consensusAddress }: GetGenesisBlockOptions) => +const getGenesisBlock = ({ consensusAddress, privateNet }: GetGenesisBlockOptions) => new Block({ previousHash: clientCommon.ZERO_UINT256, timestamp: new BN(Date.UTC(2016, 6, 15, 15, 8, 21)), @@ -107,6 +108,7 @@ const getGenesisBlock = ({ consensusAddress }: GetGenesisBlockOptions) => export const common = ({ privateNet, consensusAddress }: Options) => ({ genesisBlock: getGenesisBlock({ consensusAddress, + privateNet, }), decrementInterval: DECREMENT_INTERVAL, generationAmount: privateNet ? GENERATION_AMOUNT_PRIVATE : GENERATION_AMOUNT, diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index 1aad26f246..ffd41577db 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -274,7 +274,7 @@ 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:3.0.0-preview`; + this.userAgent = `NEO:neo-one-js:3.0.0-preview3`; this.mutableMemPool = {}; this.transactionVerificationContext = new TransactionVerificationContext({ diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index 5cfa323cf0..973aebb1a4 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -18,6 +18,8 @@ "@neo-one/logger": "^2.6.1", "@neo-one/node-core": "^2.7.0", "@neo-one/utils": "^2.6.1", + "@types/bn.js": "^4.11.5", + "bn.js": "^5.0.0", "rxjs": "^6.5.3", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 0ae68704c1..80f29c7185 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,26 +1,22 @@ import { - assertVMStateJSON, CallReceiptJSON, common, crypto, JSONHelper, RelayTransactionResultJSON, - ScriptBuilder, toJSONVerifyResult, toVMStateJSON, - toWitnessScope, TransactionJSON, - VMState, - WitnessScopeModel, } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Blockchain, getEndpointConfig, NativeContainer, + Nep5Transfer, + Nep5TransferKey, Node, RelayTransactionResult, - Signer, Signers, stackItemToJSON, StorageKey, @@ -29,6 +25,7 @@ import { TransactionState, } from '@neo-one/node-core'; import { Labels } 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' }); @@ -111,10 +108,10 @@ const RPC_METHODS: { readonly [key: string]: string } = { sendtoaddress: 'sendtoaddress', // NEP5 - getnep5transfers: 'getnep5transfers', // add to RPCClient? - getnep5balances: 'getnep5balances', // add to RPCClient? + getnep5transfers: 'getnep5transfers', + getnep5balances: 'getnep5balances', - // I want to say both of these can be removed since you can make changes to policy contract storage + // TODO: I want to say both of these can be removed since you can make changes to policy contract storage updatesettings: 'updatesettings', getsettings: 'getsettings', @@ -513,8 +510,8 @@ export const createHandler = ({ // SmartContract // TODO: we didn't use invokefunction in the past, whether or not that will still be the case is up in the air - [RPC_METHODS.invokefunction]: async (args) => { - throw new Error('not implemented'); + [RPC_METHODS.invokefunction]: async (_args) => { + throw new JSONRPCError(-101, 'Not implemented'); // const scriptHash = JSONHelper.readUInt160(args[0]); // const operation = args[1]; // const params = args.length >= 3 ? args[2].map((arg) => ContractParameter.fromJSON(arg)) : []; @@ -568,7 +565,7 @@ export const createHandler = ({ throw new JSONRPCError(-101, 'Not implemented'); }, [RPC_METHODS.getapplicationlog]: async () => { - // TODO: this is very similar to our "getinvocationdata" + // TODO: this looks very similar to our "getinvocationdata" throw new JSONRPCError(-101, 'Not implemented'); }, @@ -609,55 +606,72 @@ export const createHandler = ({ // Nep5 [RPC_METHODS.getnep5transfers]: async (args) => { - const hash = JSONHelper.readUInt160(args[0]); + const scriptHash = JSONHelper.readUInt160(args[0]); + const address = crypto.scriptHashToAddress({ addressVersion: blockchain.settings.addressVersion, scriptHash }); + 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'); } - // TODO: - // get all NEP5 transfers either by address or time specified - // or can get all blocks over the time period - // then get all transactions from those blocks - // then filter transactions by address + const startTimeBytes = new BN(startTime, 10).toBuffer('le').reverse(); + const endTimeBytes = new BN(endTime, 10).toBuffer('le').reverse(); + const mapToTransfers = ({ key, value }: { key: Nep5TransferKey; value: Nep5Transfer }) => ({ + timestamp: key.timestampMS.toNumber(), + assethash: common.uInt160ToString(key.assetScriptHash), + transferaddress: common.uInt160ToString(value.userScriptHash), + amount: value.amount.toString(), + blockindex: value.blockIndex, + transfernotifyindex: key.blockXferNotificationIndex, + txhash: common.uInt256ToString(value.txHash), + }); + const sentPromise = blockchain.nep5TransfersSent + .find$(startTimeBytes, endTimeBytes) + .pipe(take(1000), map(mapToTransfers), toArray()) + .toPromise(); + const receivedPromise = blockchain.nep5TransfersSent + .find$(startTimeBytes, endTimeBytes) + .pipe(take(1000), map(mapToTransfers), toArray()) + .toPromise(); - // possiblities: TransferData, InvocationData, Account, Transaction, Action + const [sent, received] = await Promise.all([sentPromise, receivedPromise]); return { - sent: [], - transfersReceived: [], - address: common.uInt160ToString(hash), + sent, + received, + address, }; }, - // [RPC_METHODS.getnep5balances]: async (args) => { - // const hash = JSONHelper.readUInt160(args[0]); - // const account = await blockchain.account.tryGet({ hash }); - // if (account === undefined) { - // throw new JSONRPCError(-100, 'Unknown account'); - // } - // const resultBalances: Array<{ - // readonly assethash: string; - // readonly amount: string; - // readonly lastupdatedblock: number; - // }> = []; - // const balances = Object.entries(account.balances); - // // tslint:disable-next-line: no-loop-statement - // for (const balance of balances) { - // // tslint:disable-next-line: no-array-mutation - // resultBalances.push({ - // assethash: balance[0], - // amount: balance[1]?.toString() ?? '0', - // lastupdatedblock: -1, // TODO: in account balance in blockchain.account we need to store the "lastUpdateBlock" as well - // }); - // } + [RPC_METHODS.getnep5balances]: async (args) => { + const scriptHash = JSONHelper.readUInt160(args[0]); + const address = crypto.scriptHashToAddress({ addressVersion: blockchain.settings.addressVersion, scriptHash }); + const nep5Balances = await blockchain.nep5Balances + .find$(scriptHash) + .pipe( + 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, + }; + }), + toArray(), + ) + .toPromise(); - // return { - // balance: resultBalances, - // address: common.uInt160ToString(hash), - // }; - // }, + return { + balance: nep5Balances, + address, + }; + }, // Settings // [RPC_METHODS.updatesettings]: async (args) => { @@ -667,7 +681,8 @@ export const createHandler = ({ // secondsPerBlock: args[0].secondsPerBlock, // }; - // blockchain.updateSettings(newSettings); + // TODO: implement this + // blockchain.updateSettings(newSettings); // return true; // }, @@ -738,6 +753,7 @@ export const createHandler = ({ if (contract === undefined) { return []; } + // const items = await blockchain.storages.find$(contract.id).pipe(toArray()).toPromise(); return blockchain.storages .find$(Buffer.from([contract.id])) @@ -790,18 +806,17 @@ export const createHandler = ({ return result; }, - [RPC_METHODS.getinvocationdata]: async (args) => { - const transaction = await blockchain.transaction.get({ - hash: JSONHelper.readUInt256(args[0]), - }); - - const result = await transaction.serializeJSONWithInvocationData(blockchain.serializeJSONContext); + [RPC_METHODS.getinvocationdata]: async () => { + 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.invocationData === undefined) { - throw new JSONRPCError(-103, 'Invalid Transaction'); - } + // if (result.data === undefined) { + // throw new JSONRPCError(-103, 'Invalid Transaction'); + // } - return result.invocationData; + // return result.data; }, [RPC_METHODS.getnetworksettings]: async () => { const settings = blockchain.settings; diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index 563ff4638b..db0be55b7c 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -1,5 +1,5 @@ import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; -import { BlockKey, StorageKey, StreamOptions } from '@neo-one/node-core'; +import { BlockKey, Nep5BalanceKey, Nep5TransferKey, StorageKey, StreamOptions } from '@neo-one/node-core'; import { BN } from 'bn.js'; export enum Prefix { @@ -11,6 +11,9 @@ export enum Prefix { CurrentBlock = 0xc0, CurrentHeader = 0xc1, ContractID = 0xc2, + Nep5Balance = 0xf8, + Nep5TransferSent = 0xf9, + Nep5TransferReceived = 0xfa, // NEO•ONE prefix, watch out for future collisions with https://github.com/neo-project/neo/blob/master/src/neo/Persistence/Prefixes.cs Settings = 0xdd, @@ -54,7 +57,13 @@ const generateSearchRange = (lookupKey: Buffer): Required => { const createGetSearchRange = (prefix: Prefix) => { const bufferKey = Buffer.from([prefix]); - return (lookupKey: Buffer): Required => { + 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 { @@ -91,6 +100,21 @@ const createStorageKey = getCreateKey({ 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, @@ -116,12 +140,22 @@ const maxHeaderHashListKey = createHeaderHashListKey(0xffffffff); const getStorageSearchRange = createGetSearchRange(Prefix.Storage); +const getNep5BalanceSearchRange = createGetSearchRange(Prefix.Nep5Balance); +const getNep5TransferReceivedSearchRange = createGetSearchRange(Prefix.Nep5TransferReceived); +const getNep5TransferSentSearchRange = createGetSearchRange(Prefix.Nep5TransferSent); + export const keys = { createBlockKey, + createNep5BalanceKey, + createNep5TransferSentKey, + createNep5TransferReceivedKey, createTransactionKey, createContractKey, createStorageKey, getStorageSearchRange, + getNep5BalanceSearchRange, + getNep5TransferReceivedSearchRange, + getNep5TransferSentSearchRange, createHeaderHashListKey, blockHashIndexKey, headerHashIndexKey, diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 9ff7dba0e1..042d45f7ae 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -19,6 +19,7 @@ "@neo-one/utils": "^2.6.1", "@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", @@ -29,6 +30,7 @@ "@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" } 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 924389c609..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, StorageItem, StorageKey } 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 '../'; @@ -41,4 +50,26 @@ describe('levelUpStorage', () => { 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/convertChange.ts b/packages/neo-one-node-storage-levelup/src/convertChange.ts index d2453276eb..c86879b76e 100644 --- a/packages/neo-one-node-storage-levelup/src/convertChange.ts +++ b/packages/neo-one-node-storage-levelup/src/convertChange.ts @@ -12,6 +12,33 @@ import { UnknownChangeTypeError, UnknownTypeError } from './errors'; const convertAddChange = (change: AddChange): readonly PutBatch[] => { switch (change.type) { + case 'nep5Balance': + return [ + { + type: 'put', + key: keys.createNep5BalanceKey(change.key), + value: change.value.serializeWire(), + }, + ]; + + case 'nep5TransferReceived': + return [ + { + type: 'put', + key: keys.createNep5TransferReceivedKey(change.key), + value: change.value.serializeWire(), + }, + ]; + + case 'nep5TransferSent': + return [ + { + type: 'put', + key: keys.createNep5TransferSentKey(change.key), + value: change.value.serializeWire(), + }, + ]; + case 'block': return [ { @@ -104,6 +131,12 @@ const convertDeleteChange = (change: DeleteChange): DelBatch => { key: keys.createStorageKey(change.key), }; + case 'nep5Balance': + return { + type: 'del', + key: keys.createNep5BalanceKey(change.key), + }; + default: utils.assertNever(change); throw new UnknownTypeError(); diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 7afe8d76c5..0609480af6 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,4 +1,3 @@ -import { common } from '@neo-one/client-common'; import { BinaryReader, BlockKey, @@ -8,8 +7,12 @@ import { HashIndexState, // InvocationData, HeaderHashList, - Storage, + Nep5Balance, // TransactionData, + Nep5BalanceKey, + Nep5Transfer, + Nep5TransferKey, + Storage, StorageItem, StorageKey, TransactionState, @@ -82,6 +85,42 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage return { blocks, + nep5Balances: read.createReadFindStorage({ + db, + getSearchRange: keys.getNep5BalanceSearchRange, + serializeKey: keys.createNep5BalanceKey, + deserializeValue: (buffer) => + Nep5Balance.deserializeWire({ + context, + buffer, + }), + deserializeKey: (buffer) => Nep5BalanceKey.deserializeWire({ context, buffer }), + }), + + nep5TransfersReceived: read.createReadFindStorage({ + db, + getSearchRange: keys.getNep5TransferReceivedSearchRange, + serializeKey: keys.createNep5TransferReceivedKey, + deserializeValue: (buffer) => + Nep5Transfer.deserializeWire({ + context, + buffer, + }), + deserializeKey: (buffer) => Nep5TransferKey.deserializeWire({ context, buffer }), + }), + + nep5TransfersSent: read.createReadFindStorage({ + db, + getSearchRange: keys.getNep5TransferSentSearchRange, + serializeKey: keys.createNep5TransferSentKey, + deserializeValue: (buffer) => + Nep5Transfer.deserializeWire({ + context, + buffer, + }), + deserializeKey: (buffer) => Nep5TransferKey.deserializeWire({ context, buffer }), + }), + transactions: read.createReadStorage({ db, serializeKey: keys.createTransactionKey, diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index 24b3e073b8..4f3c87c82e 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -131,14 +131,14 @@ export function createFind$({ deserializeValue, }: { readonly db: LevelUp; - readonly getSearchRange: (key: Buffer) => StreamOptions; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; readonly deserializeKey: (key: Buffer) => Key; readonly deserializeValue: (value: Buffer) => Value; -}): (lookup: Buffer) => Observable> { - return (lookup: Buffer) => - streamToObservable>(() => db.createReadStream(getSearchRange(lookup))).pipe( - map(({ key, value }) => ({ key: deserializeKey(key.slice(1)), value: deserializeValue(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({ @@ -149,7 +149,7 @@ export function createReadFindStorage({ deserializeValue, }: { readonly db: LevelUp; - readonly getSearchRange: (key: Buffer) => StreamOptions; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; readonly serializeKey: SerializeKey; readonly deserializeKey: (value: Buffer) => Key; readonly deserializeValue: (value: Buffer) => Value; diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index bb455d9a58..9b85e1e2fc 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -16,7 +16,7 @@ private enum ContainerType { Block, Transaction, - Signer, + Signers, } private IVerifiable deserializeContainer(dynamic args) diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index 437e3e6741..0c5b8d6f35 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -4,6 +4,7 @@ using Neo.SmartContract; using Neo.VM.Types; using Neo; +using Neo.Network.P2P.Payloads; namespace NEOONE { @@ -144,14 +145,14 @@ public static dynamic convertStackItem(StackItem item) public class NotifyEventReturn { - public byte[] scriptContainer; + public SerializedScriptContainer scriptContainer; public byte[] scriptHash; public string eventName; public dynamic[] state; public NotifyEventReturn(NotifyEventArgs notifyEvent) { - this.scriptContainer = ((ISerializable)notifyEvent.ScriptContainer).ToArray(); + this.scriptContainer = new SerializedScriptContainer(notifyEvent.ScriptContainer); this.scriptHash = notifyEvent.ScriptHash.ToArray(); this.eventName = notifyEvent.EventName; this.state = convertStackItem(notifyEvent.State); @@ -180,5 +181,46 @@ public ProtocolSettingsReturn(ProtocolSettings value) this.memoryPoolMaxTransactions = value.MemoryPoolMaxTransactions; } } + + public enum ScriptContainerType + { + block, + transaction, + signers, + consensuspayload, + } + + public class SerializedScriptContainer + { + public ScriptContainerType type; + public byte[] buffer; + public SerializedScriptContainer(ISerializable scriptContainer) + { + this.type = GetScriptContainerType(scriptContainer); + this.buffer = scriptContainer.ToArray(); + } + + private ScriptContainerType GetScriptContainerType(ISerializable scriptContainer) + { + if (scriptContainer is Block) + { + return ScriptContainerType.block; + } + if (scriptContainer is Transaction) + { + return ScriptContainerType.transaction; + } + if (scriptContainer is Signer) + { + return ScriptContainerType.signers; + } + if (scriptContainer is ConsensusPayload) + { + return ScriptContainerType.consensuspayload; + } + + throw new ArgumentException($"{scriptContainer.ToString()} is not a valid serializable ScriptContainer"); + } + } } } diff --git a/packages/neo-one-node/src/__data__/jsonBlocks.ts b/packages/neo-one-node/src/__data__/jsonBlocks.ts index 0b487da2c5..23a08e62e5 100644 --- a/packages/neo-one-node/src/__data__/jsonBlocks.ts +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -30,7 +30,7 @@ export const genesisJSON = { signers: [ { account: '0xa7213b15cc18d19c810f644e37411d882ee561ca', - scopes: 'FeeOnly', // FeeOnly should be None. This indicates that this JSON data is from Preview 2 or earlier, not Preview 3 + scopes: 'FeeOnly', // FeeOnly should be None. This indicates that this JSON data could be from Preview 2 or earlier, not Preview 3 }, ], attributes: [], diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index 37c549fbbf..066c67c253 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,4 +1,3 @@ -import { common } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; import { StorageKey, StreamOptions } from '@neo-one/node-core'; import { KeyBuilder, NativeContainer } from '@neo-one/node-native'; @@ -11,8 +10,8 @@ import RocksDB from 'rocksdb'; import { map, toArray } from 'rxjs/operators'; import { data } from '../__data__'; -describe('blockchain persists second block', () => { - test('test', async () => { +describe('Blockchain storage works', () => { + test('Blockchain can persist and retrieve blocks', async () => { const blockchainSettings = createTest(); const levelDBPath = '/Users/danielbyrne/Desktop/test-location'; const db = LevelUp(RocksDB(levelDBPath)); diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index dafa80e74a..9465484f9c 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -130,6 +130,7 @@ export const startFullNode = async ({ blockchain, node, options: rpcOptions, + native, }); disposable = composeDisposables(disposable, rpcDisposable); From c006771b512a26ba2cfb78e4e7a7adddaedecc20 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Fri, 16 Oct 2020 14:40:57 -0700 Subject: [PATCH 109/141] feat(node): more node persistence work check in, adding nep5 tracking (#2187) * feat(node): publish neo-n1-fork and pin it in @neo-one/node-vm c# csproj. Update headerIndex data structure * feat(node): VM notification parsing cleaned up, need to fix nep5transfer tracking --- packages/neo-one-node-blockchain/package.json | 2 + .../neo-one-node-blockchain/src/Blockchain.ts | 211 +++++++++++------- .../src/HeaderIndexCache.ts | 123 ++++++++++ .../src/PersistingBlockchain.ts | 84 +------ .../src/StorageCache.ts | 6 +- ...p5ChangeSet.ts => getNep5UpdateOptions.ts} | 105 +++------ packages/neo-one-node-blockchain/src/utils.ts | 16 +- packages/neo-one-node-core/src/Blockchain.ts | 2 +- .../neo-one-node-core/src/HeaderHashList.ts | 2 +- .../neo-one-node-core/src/Notification.ts | 38 ++++ .../neo-one-node-core/src/Serializable.ts | 3 +- packages/neo-one-node-core/src/Signers.ts | 6 + packages/neo-one-node-core/src/Storage.ts | 15 +- packages/neo-one-node-core/src/Verifiable.ts | 2 +- packages/neo-one-node-core/src/index.ts | 1 + packages/neo-one-node-core/src/utils/utils.ts | 2 - packages/neo-one-node-core/src/vm.ts | 13 +- packages/neo-one-node-network/src/Network.ts | 4 + packages/neo-one-node-protocol/src/Node.ts | 13 +- .../src/createHandler.ts | 6 +- .../neo-one-node-storage-common/src/keys.ts | 17 +- .../src/levelUpStorage.ts | 6 +- .../neo-one-node-storage-levelup/src/read.ts | 37 +++ .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 67 +++++- packages/neo-one-node-vm/lib/Dispatcher.cs | 3 +- .../neo-one-node-vm/lib/Dispatcher.csproj | 10 +- packages/neo-one-node-vm/lib/ReturnHelpers.cs | 57 ----- .../lib/Storage/RocksDB/Snapshot.cs | 4 +- .../lib/Storage/RocksDB/Store.cs | 3 - .../neo-one-node-vm/src/ApplicationEngine.ts | 4 +- packages/neo-one-node-vm/src/Dispatcher.ts | 3 +- .../neo-one-node-vm/src/converters/index.ts | 1 - .../src/converters/notifications.ts | 20 -- .../src/__tests__/blockchain.test.ts | 31 +-- .../src/__tests__/fullNode.test.ts | 1 + 35 files changed, 512 insertions(+), 406 deletions(-) create mode 100644 packages/neo-one-node-blockchain/src/HeaderIndexCache.ts rename packages/neo-one-node-blockchain/src/{getNep5ChangeSet.ts => getNep5UpdateOptions.ts} (59%) create mode 100644 packages/neo-one-node-core/src/Notification.ts delete mode 100644 packages/neo-one-node-vm/src/converters/notifications.ts diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 004676b3b3..efdf2d487c 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -19,6 +19,7 @@ "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", + "lru-cache": "^5.0.0", "rxjs": "^6.5.3" }, "devDependencies": { @@ -31,6 +32,7 @@ "@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", diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 9319f4c665..92399f0545 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,17 +1,20 @@ -import { common, UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { common, ScriptBuilder, UInt256, VerifyResultModel } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { + ApplicationExecuted, Block, Blockchain as BlockchainType, BlockchainSettings, CallReceipt, Change, + ChangeSet, ConsensusPayload, DeserializeWireContext, HashIndexState, Header, Mempool, NativeContainer, + Nep5Balance, RunEngineOptions, Signers, Storage, @@ -26,9 +29,10 @@ import { import { Labels } from '@neo-one/utils'; import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; -import { flatMap, map, toArray } from 'rxjs/operators'; +import { map, toArray } from 'rxjs/operators'; import { BlockVerifyError, ConsensusPayloadVerifyError, GenesisBlockNotRegisteredError } from './errors'; -import { getNep5ChangeSet } from './getNep5ChangeSet'; +import { getNep5UpdateOptions } from './getNep5UpdateOptions'; +import { HeaderIndexCache } from './HeaderIndexCache'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; @@ -46,8 +50,7 @@ export interface CreateBlockchainOptions { export interface BlockchainOptions extends CreateBlockchainOptions { // tslint:disable-next-line: readonly-array - readonly headerIndex: UInt256[]; - readonly storedHeaderCount: number; + readonly headerIndexCache: HeaderIndexCache; readonly currentBlock?: Block; } @@ -59,30 +62,32 @@ interface Entry { } export const recoverHeaderIndex = async (storage: Storage) => { - const initHeaderIndex = await storage.headerHashList.all$ - .pipe( - flatMap((value) => value.hashes), - toArray(), - ) - .toPromise(); - - const storedHeaderCount = initHeaderIndex.length; - logger.debug({ name: 'recover_header_index_stored_count', count: storedHeaderCount }); - + 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 extraHashes: readonly UInt256[] = []; + let currentHashes: readonly UInt256[] = []; if (hashIndex.index >= storedHeaderCount) { let hash = hashIndex.hash; - // tslint:disable-next-line: no-loop-statement possible-timing-attack - while (hash !== initHeaderIndex[storedHeaderCount - 1]) { - extraHashes = [hash].concat(extraHashes); + 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 { headerIndex: initHeaderIndex.concat(extraHashes), storedHeaderCount }; } + + return new HeaderIndexCache({ + storage, + initStorageCount: storedHeaderCount, + initCurrentHeaderHashes: currentHashes, + }); } const sortedTrimmedBlocks = await storage.blocks.all$ @@ -92,14 +97,20 @@ export const recoverHeaderIndex = async (storage: Storage) => { ) .toPromise(); - return { headerIndex: sortedTrimmedBlocks.map((block) => block.header.hash), storedHeaderCount: 0 }; + return new HeaderIndexCache({ + storage, + initStorageCount: 0, + initCurrentHeaderHashes: sortedTrimmedBlocks.map((block) => block.hash), + }); }; export class Blockchain { public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { - const { headerIndex, storedHeaderCount } = await recoverHeaderIndex(storage); - if (headerIndex.length > 0) { - const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: headerIndex[headerIndex.length - 1] }); + const headerIndexCache = await recoverHeaderIndex(storage); + logger.debug({ name: 'header_index_length', length: headerIndexCache.length }); + if (headerIndexCache.length > 0) { + const currentHeaderIndex = await headerIndexCache.get(headerIndexCache.length - 1); + const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: currentHeaderIndex }); if (currentBlockTrimmed === undefined) { throw new Error('testing'); } @@ -107,8 +118,7 @@ export class Blockchain { const currentBlock = await currentBlockTrimmed.getBlock(storage.transactions); return new Blockchain({ - headerIndex, - storedHeaderCount, + headerIndexCache, settings, storage, native, @@ -118,8 +128,7 @@ export class Blockchain { } const blockchain = new Blockchain({ - headerIndex, - storedHeaderCount, + headerIndexCache, settings, storage, native, @@ -138,12 +147,11 @@ export class Blockchain { public readonly onPersistNativeContractScript: Buffer; // tslint:disable-next-line: readonly-array - private readonly headerIndex: UInt256[]; + private readonly headerIndexCache: HeaderIndexCache; private readonly storage: Storage; private readonly native: NativeContainer; private readonly vm: VM; - private mutableStoredHeaderCount: number; private mutableBlockQueue: PriorityQueue = new PriorityQueue({ comparator: (a, b) => a.block.index - b.block.index, }); @@ -157,8 +165,7 @@ export class Blockchain { private mutableBlock$: Subject = new Subject(); public constructor(options: BlockchainOptions) { - this.headerIndex = options.headerIndex; - this.mutableStoredHeaderCount = options.storedHeaderCount; + this.headerIndexCache = options.headerIndexCache; this.settings = options.settings; this.storage = options.storage; this.native = options.native; @@ -184,16 +191,12 @@ export class Blockchain { return this.mutablePreviousBlock; } - public get storedHeaderCount(): number { - return this.mutableStoredHeaderCount; - } - public get currentBlockIndex(): number { return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; } public get currentHeaderIndex(): number { - return this.headerIndex.length; + return this.headerIndexCache.length; } public get block$(): Observable { @@ -341,7 +344,8 @@ export class Blockchain { } public async getBlock(hashOrIndex: UInt256 | number): Promise { - const hash = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : hashOrIndex; + const hashPromise = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : Promise.resolve(hashOrIndex); + const hash = await hashPromise; if (hash === undefined) { return undefined; } @@ -354,7 +358,6 @@ export class Blockchain { return this.previousBlock; } - // TODO: this should really just take a hash, and then the rpc handler can call `blockchain.getBlockHash` if its an index. const trimmedBlock = await this.blocks.tryGet({ hashOrIndex: hash }); if (trimmedBlock === undefined) { return undefined; @@ -367,16 +370,17 @@ export class Blockchain { return trimmedBlock.getBlock(this.transactions); } - public getBlockHash(index: number): UInt256 | undefined { - if (this.headerIndex.length <= index) { + public async getBlockHash(index: number): Promise { + if (this.headerIndexCache.length <= index) { return undefined; } - return this.headerIndex[index]; + return this.headerIndexCache.get(index); } public async getHeader(hashOrIndex: UInt256 | number): Promise
{ - const hash = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : hashOrIndex; + const hashPromise = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : Promise.resolve(hashOrIndex); + const hash = await hashPromise; if (hash === undefined) { return undefined; } @@ -489,7 +493,7 @@ export class Blockchain { engine.setInstructionPointer(offset); engine.execute(); - return utils.getCallReceipt(engine); + return utils.getCallReceipt(engine, container); }, ); }); @@ -584,21 +588,7 @@ export class Blockchain { logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); } - private async saveHeaderHashList(): Promise { - if (this.headerIndex.length - this.storedHeaderCount < utils.hashListBatchSize) { - return; - } - - const blockchain = this.createPersistingBlockchain(); - const { changeSet, countIncrement } = await blockchain.getHeaderHashListChanges( - this.headerIndex, - this.storedHeaderCount, - ); - await this.storage.commit(changeSet); - this.mutableStoredHeaderCount += countIncrement; - } - - private async updateBlockMetadata(block: Block): Promise { + private updateBlockMetadata(block: Block): ChangeSet { const newHashIndexState = new HashIndexState({ hash: block.hash, index: block.index }); const updateBlockHashIndex: Change = { type: 'add', @@ -616,7 +606,71 @@ export class Blockchain { this.mutableCurrentBlock = block; this.mutableCurrentHeader = block.header; - return this.storage.commit([updateBlockHashIndex, updateHeaderHashIndex]); + return [updateBlockHashIndex, updateHeaderHashIndex]; + } + + private updateNep5Balances({ + applicationsExecuted, + block, + }: { + readonly applicationsExecuted: readonly ApplicationExecuted[]; + readonly block: Block; + }) { + const { assetKeys, transfersSent, transfersReceived } = getNep5UpdateOptions({ + applicationsExecuted, + block, + }); + const nep5BalancePairs = assetKeys.map((key) => { + const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); + const callReceipt = this.runEngineWrapper({ script, gas: 100000000, snapshot: 'main' }); + const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); + + return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: this.currentBlockIndex }) }; + }); + + const nep5BalanceChangeSet: ChangeSet = nep5BalancePairs.map(({ key, value }) => { + if (value.balance.eqn(0)) { + return { + type: 'delete', + change: { + type: 'nep5Balance', + key, + }, + }; + } + + return { + type: 'add', + change: { + type: 'nep5Balance', + key, + value, + }, + subType: 'update', + }; + }); + + 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, + }, + })); + + return nep5BalanceChangeSet.concat(nep5TransfersReceivedChangeSet, nep5TransfersSentChangeSet); } private async persistBlockInternal(block: Block, verify?: boolean): Promise { @@ -624,37 +678,36 @@ export class Blockchain { await this.verifyBlock(block); } - const currentHeaderCount = this.headerIndex.length; - if (block.transactions.length !== 0) { - logger.debug({ name: 'BLOCK_PERSIST_WITH_TRANSACTION', block: block.serializeJSON(this.serializeJSONContext) }); + if (block.transactions.length > 0) { + const hash = + block.transactions[0].sender !== undefined ? common.uInt160ToString(block.transactions[0].sender) : undefined; + logger.debug({ name: 'TRY_THIS_TEST_TRANSACTION_HASH', hash }); } - const blockchain = this.createPersistingBlockchain(); + const currentHeaderCount = this.headerIndexCache.length; if (block.index === currentHeaderCount) { - this.headerIndex.push(block.hash); + await this.headerIndexCache.push(block.hash); } - const { changeBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); - await this.storage.commitBatch(changeBatch); + const { changeBatch: persistBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); + await this.storage.commitBatch(persistBatch); - // This ordering could cause issues. Lookout. - const nep5ChangeSet = getNep5ChangeSet({ - applicationsExecuted, - block, - settings: this.settings, - runEngineWrapper: this.runEngineWrapper, - }); - await this.storage.commit(nep5ChangeSet); - await this.saveHeaderHashList(); + const blockMetadataBatch = this.updateBlockMetadata(block); + await this.storage.commit(blockMetadataBatch); - await this.updateBlockMetadata(block); + const nep5Updates = this.updateNep5Balances({ applicationsExecuted, block }); + if (nep5Updates.length > 0) { + logger.debug({ name: 'incoming_nep5_updates', nep5Updates }); + } + await this.storage.commit(nep5Updates); + + this.vm.updateSnapshots(); } private createPersistingBlockchain(): PersistingBlockchain { return new PersistingBlockchain({ onPersistNativeContractScript: this.onPersistNativeContractScript, - storage: this.storage, vm: this.vm, }); } 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..2a23b2b96a --- /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 index 4539eb03f3..13bf33e31e 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -1,69 +1,21 @@ // tslint:disable no-array-mutation no-object-mutation -import { common, UInt256, VMState } from '@neo-one/client-common'; -import { - // Action, - // ActionKey, - // ActionsKey, - ApplicationExecuted, - Block, - // BlockData, - // BlockDataKey, - // InvocationData, - // InvocationDataKey, - // InvocationResultSuccess, - // LogAction, - // NotificationAction, - // ScriptContainerType, - ChangeSet, - HeaderHashList, - // TransactionData, - // TransactionDataKey, - // TransactionDataUpdate, - HeaderKey, - SnapshotHandler, - Storage, - Transaction, - TriggerType, - VM, -} from '@neo-one/node-core'; +import { common, VMState } from '@neo-one/client-common'; +import { ApplicationExecuted, Block, SnapshotHandler, Transaction, TriggerType, VM } from '@neo-one/node-core'; import { PersistNativeContractsError } from './errors'; -import { ReadAddStorageCache } from './StorageCache'; -import { utils, utils as blockchainUtils } from './utils'; +import { utils as blockchainUtils } from './utils'; interface PersistingBlockchainOptions { readonly vm: VM; - readonly storage: Storage; readonly onPersistNativeContractScript: Buffer; } -interface GetHeaderHashListChangesResult { - readonly countIncrement: number; - readonly changeSet: ChangeSet; -} - -interface Caches { - readonly headerHashList: ReadAddStorageCache; -} - -// TODO: instead of an array for ApplicationExecuted we should push it to an observable export class PersistingBlockchain { private readonly vm: VM; - private readonly storage: Storage; private readonly onPersistNativeContractScript: Buffer; - private readonly caches: Caches; public constructor(options: PersistingBlockchainOptions) { this.vm = options.vm; - this.storage = options.storage; this.onPersistNativeContractScript = options.onPersistNativeContractScript; - this.caches = { - headerHashList: new ReadAddStorageCache({ - name: 'headerHashList', - readStorage: () => this.storage.headerHashList, - getKeyString: (key) => key.toString(), - createAddChange: (key, value) => ({ type: 'headerHashList', key, value }), - }), - }; } public persistBlock( @@ -105,37 +57,11 @@ export class PersistingBlockchain { main.clone(); const executedTransactions = this.persistTransactions(block, main, clone); - const finalApplicationsExecuted = appsExecuted.concat(executedTransactions); - return { changeBatch: main.getChangeSet(), applicationsExecuted: finalApplicationsExecuted }; + return { changeBatch: main.getChangeSet(), applicationsExecuted: appsExecuted.concat(executedTransactions) }; }); } - // TODO: (not critical) almost all of this logic can be expressed in an observable setup, busy work for later. - public async getHeaderHashListChanges( - headerIndex: readonly UInt256[], - storedCount: number, - ): Promise { - let increment = 0; - // tslint:disable-next-line: no-loop-statement - while (headerIndex.length - (storedCount + increment) >= utils.hashListBatchSize) { - const index = storedCount + increment; - await this.caches.headerHashList.add( - index, - new HeaderHashList({ - hashes: headerIndex.slice(index, index + utils.hashListBatchSize), - }), - ); - - increment += utils.hashListBatchSize; - } - - return { - countIncrement: increment, - changeSet: this.caches.headerHashList.getChangeSet(), - }; - } - private persistTransactions( block: Block, main: SnapshotHandler, @@ -176,7 +102,7 @@ export class PersistingBlockchain { main.clone(); } - return blockchainUtils.getApplicationExecuted(engine); + return blockchainUtils.getApplicationExecuted(engine, transaction); }, ); } diff --git a/packages/neo-one-node-blockchain/src/StorageCache.ts b/packages/neo-one-node-blockchain/src/StorageCache.ts index 57d0bdf7d2..5bbb482069 100644 --- a/packages/neo-one-node-blockchain/src/StorageCache.ts +++ b/packages/neo-one-node-blockchain/src/StorageCache.ts @@ -110,7 +110,7 @@ class BaseReadStorageCache { 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: CreateAddChange; protected readonly createDeleteChange: ((key: Key) => DeleteChange) | undefined; @@ -151,6 +151,10 @@ class BaseReadStorageCache { }); } + public clearChangeSet(): void { + this.mutableValues = {}; + } + public getTrackedChangeSet(): TrackedChangeSet { const createDeleteChange = this.createDeleteChange; diff --git a/packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts similarity index 59% rename from packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts rename to packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts index 1fe5bad444..bab5d35a42 100644 --- a/packages/neo-one-node-blockchain/src/getNep5ChangeSet.ts +++ b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts @@ -1,36 +1,38 @@ -import { common, ScriptBuilder, VMState } from '@neo-one/client-common'; +import { common, VMState } from '@neo-one/client-common'; import { ApplicationExecuted, Block, - BlockchainSettings, - CallReceipt, - ChangeSet, - Nep5Balance, + isByteStringStackItem, + isIntegerStackItem, Nep5BalanceKey, Nep5Transfer, Nep5TransferKey, - RunEngineOptions, - StackItemType, - Transaction, } from '@neo-one/node-core'; -import { BN } from 'bn.js'; +import { utils } from './utils'; -export function getNep5ChangeSet({ +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, - settings, - runEngineWrapper, }: { readonly applicationsExecuted: readonly ApplicationExecuted[]; readonly block: Block; - readonly settings: BlockchainSettings; - readonly runEngineWrapper: (options: RunEngineOptions) => CallReceipt; -}): ChangeSet { +}): Nep5UpdateOptions { let transferIndex = 0; const nep5BalancesChanged = new Set(); const mutableNep5BalancesChangedKeys: Nep5BalanceKey[] = []; - const mutableTransfersSent: Array<{ readonly key: Nep5TransferKey; readonly value: Nep5Transfer }> = []; - const mutableTransfersReceived: Array<{ readonly key: Nep5TransferKey; readonly value: Nep5Transfer }> = []; + const mutableTransfersSent: Nep5TransferReturn[] = []; + const mutableTransfersReceived: Nep5TransferReturn[] = []; applicationsExecuted.forEach((appExecuted) => { if (appExecuted.state === VMState.FAULT) { @@ -38,7 +40,7 @@ export function getNep5ChangeSet({ } appExecuted.notifications.forEach((notifyEventArgs) => { - const { scriptContainer, scriptHash, eventName, state: stateItems } = notifyEventArgs; + const { container, scriptHash, eventName, state: stateItems } = notifyEventArgs; if (stateItems.length === 0) { return; @@ -49,14 +51,14 @@ export function getNep5ChangeSet({ if (stateItems.length < 3) { return; } - if (!stateItems[0].isNull && stateItems[0].type !== StackItemType.ByteString) { + if (!stateItems[0].isNull && !isByteStringStackItem(stateItems[0])) { return; } - if (!stateItems[1].isNull && stateItems[1].type !== StackItemType.ByteString) { + if (!stateItems[1].isNull && isByteStringStackItem(stateItems[1])) { return; } const amountItem = stateItems[2]; - if (!(amountItem.type === StackItemType.ByteString || amountItem.type === StackItemType.Integer)) { + if (!(isByteStringStackItem(amountItem) || isIntegerStackItem(amountItem))) { return; } const fromBytes = stateItems[0].isNull ? undefined : stateItems[0].getBuffer(); @@ -98,12 +100,9 @@ export function getNep5ChangeSet({ } } - if (scriptContainer.type === 'Transaction') { + if (utils.isTransaction(container)) { const amount = amountItem.getInteger(); - const txHash = Transaction.deserializeWire({ - buffer: scriptContainer.buffer, - context: { messageMagic: settings.messageMagic }, - }).hash; + const txHash = container.hash; if (!from.equals(common.ZERO_UINT160)) { mutableTransfersSent.push({ @@ -144,53 +143,9 @@ export function getNep5ChangeSet({ }); }); - const nep5BalancePairs = mutableNep5BalancesChangedKeys.map((key) => { - const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); - const callReceipt = runEngineWrapper({ script, gas: 100000000, snapshot: 'main' }); - const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); - - return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: block.index }) }; - }); - - const nep5BalanceChangeSet: ChangeSet = nep5BalancePairs.map(({ key, value }) => { - if (value.balance.eqn(0)) { - return { - type: 'delete', - change: { - type: 'nep5Balance', - key, - }, - }; - } - - return { - type: 'add', - change: { - type: 'nep5Balance', - key, - value, - }, - subType: 'update', - }; - }); - const nep5TransfersSentChangeSet: ChangeSet = mutableTransfersSent.map(({ key, value }) => ({ - type: 'add', - subType: 'add', - change: { - type: 'nep5TransferSent', - key, - value, - }, - })); - const nep5TransfersReceivedChangeSet: ChangeSet = mutableTransfersReceived.map(({ key, value }) => ({ - type: 'add', - subType: 'add', - change: { - type: 'nep5TransferReceived', - key, - value, - }, - })); - - return nep5BalanceChangeSet.concat(nep5TransfersReceivedChangeSet, nep5TransfersSentChangeSet); + return { + assetKeys: mutableNep5BalancesChangedKeys, + transfersSent: mutableTransfersSent, + transfersReceived: mutableTransfersReceived, + }; } diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index c99d129fbd..a4f4f6215e 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -16,9 +16,11 @@ import { CallFlags, ECDsaVerifyPrice, getOpCodePrice, + Notification, Transaction, TriggerType, utils as coreUtils, + Verifiable, VM, } from '@neo-one/node-core'; import { BN } from 'bn.js'; @@ -37,20 +39,23 @@ const getOnPersistNativeContractScript = coreUtils.lazy(() => { return script.build(); }); -const getApplicationExecuted = (engine: ApplicationEngine, transaction?: Transaction) => ({ - transaction, +// 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, + notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), }); -const getCallReceipt = (engine: ApplicationEngine) => ({ +const getCallReceipt = (engine: ApplicationEngine, container?: Verifiable) => ({ state: engine.state, gasConsumed: engine.gasConsumed, stack: engine.resultStack, - notifications: engine.notifications, + notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), }); export interface TempWalletAccount { @@ -189,4 +194,5 @@ export const utils = { verifyContract, getCalculateNetworkFee, blockComparator, + isTransaction, }; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 36318462fd..2074f4b02d 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -43,7 +43,7 @@ export interface Blockchain extends BlockchainStorage { readonly getBlock: (hashOrIndex: UInt256 | number) => Promise; readonly getHeader: (hashOrIndex: UInt256 | number) => Promise
; - readonly getBlockHash: (index: number) => UInt256 | undefined; + readonly getBlockHash: (index: number) => Promise; readonly getNextBlockHash: (hash: UInt256) => Promise; readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; diff --git a/packages/neo-one-node-core/src/HeaderHashList.ts b/packages/neo-one-node-core/src/HeaderHashList.ts index 3cebdc8907..6041085577 100644 --- a/packages/neo-one-node-core/src/HeaderHashList.ts +++ b/packages/neo-one-node-core/src/HeaderHashList.ts @@ -16,7 +16,7 @@ export type HeaderKey = number; export class HeaderHashList implements SerializableWire { public static deserializeWireBase(options: DeserializeWireBaseOptions): HeaderHashList { const { reader } = options; - const hashes = reader.readArray(reader.readUInt256); + const hashes = reader.readArray(() => reader.readUInt256()); return new this({ hashes, 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..98508ae703 --- /dev/null +++ b/packages/neo-one-node-core/src/Notification.ts @@ -0,0 +1,38 @@ +import { common, UInt160 } from '@neo-one/client-common'; +import { assertArrayStackItem, StackItem } 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 = array.slice(2); + + 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; + } +} diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index 1c34fb323b..f012d1c7ae 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -6,12 +6,13 @@ // import { StorageChange } from './storageChange'; import { SerializableWire } from '@neo-one/client-common'; 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 { +export interface SerializableContainer extends SerializableWire, Verifiable { readonly type: SerializableContainerType; } diff --git a/packages/neo-one-node-core/src/Signers.ts b/packages/neo-one-node-core/src/Signers.ts index a8ded45909..58f04485ae 100644 --- a/packages/neo-one-node-core/src/Signers.ts +++ b/packages/neo-one-node-core/src/Signers.ts @@ -8,6 +8,7 @@ import { } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, SerializableContainer, SerializableContainerType } from './Serializable'; import { Signer } from './Signer'; +import { Witness } from './Witness'; export interface SignersAdd { readonly signers: readonly Signer[]; @@ -45,11 +46,16 @@ export class Signers implements SerializableContainer { 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/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index b5398373ab..b041b85a1d 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -43,9 +43,7 @@ export interface ReadFindStorage extends ReadStorage { readonly find$: (lookup: Buffer, secondaryLookup?: Buffer) => Observable>; } -export interface ReadGetAllStorage extends ReadStorage { - readonly getAll$: (key?: Partial) => Observable; -} +export interface ReadAllFindStorage extends ReadAllStorage, ReadFindStorage {} export interface AddMetadataStorage { readonly add: (add: Value) => Promise; @@ -91,18 +89,12 @@ interface ReadAddUpdateMetadataStorage 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 {} - -interface LatestReadStorage extends ReadStorage { +export interface LatestReadStorage extends ReadStorage { readonly tryGetLatest: () => Promise; } @@ -132,7 +124,7 @@ export type ChangeSet = readonly Change[]; export interface BlockchainStorage { readonly blocks: ReadStorage; - readonly nep5Balances: ReadFindStorage; + readonly nep5Balances: ReadAllFindStorage; readonly nep5TransfersSent: ReadFindStorage; readonly nep5TransfersReceived: ReadFindStorage; readonly transactions: ReadStorage; @@ -146,7 +138,6 @@ export interface BlockchainStorage { export interface Storage extends BlockchainStorage { readonly blocks: ReadAllStorage; - readonly headerHashList: ReadAllStorage; readonly commit: (changeSet: ChangeSet) => Promise; // tslint:disable-next-line: readonly-array readonly commitBatch: (batch: AbstractBatch[]) => Promise; diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts index c74bc9953d..fcea5a5ede 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -20,7 +20,7 @@ export interface ExecuteScriptResult { export type VerifyWitnesses = ( vm: VM, - verifiable: Verifiable & SerializableContainer, + verifiable: SerializableContainer, storage: BlockchainStorage, native: NativeContainer, gasIn: number, diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 04eee3adca..530bf09d11 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -13,6 +13,7 @@ export * from './Header'; export * from './HeaderHashList'; export * from './Native'; export * from './network'; +export * from './Notification'; export * from './Prices'; export * from './payload'; export * from './Serializable'; diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 05ca6668ac..7ec2847221 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -19,7 +19,6 @@ import { StackItemType, StructStackItem, } from '../StackItems'; -import { StreamOptions } from '../Storage'; import { StorageItem } from '../StorageItem'; import { BinaryReader } from './BinaryReader'; @@ -205,7 +204,6 @@ function equals( const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: string) => T) => { if (typeof json === 'string') { if (json !== '*') { - // TODO: more descriptive throw new InvalidFormatError(); } diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 42fc9b4230..078623a246 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,6 +1,7 @@ -import { UInt160, UInt256, VMState } from '@neo-one/client-common'; +import { UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; +import { Notification } from './Notification'; import { SerializableContainer } from './Serializable'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; @@ -11,13 +12,6 @@ export enum TriggerType { Application = 0x10, } -export interface Notification { - readonly scriptContainer: SerializedScriptContainer; - readonly scriptHash: UInt160; - readonly eventName: string; - readonly state: readonly StackItem[]; -} - export interface CallReceipt { readonly state: VMState; readonly gasConsumed: number; @@ -50,7 +44,7 @@ export interface ApplicationEngine { readonly gasConsumed: number; readonly resultStack: readonly StackItem[]; readonly state: VMState; - readonly notifications: readonly Notification[]; + readonly notifications: readonly StackItem[]; readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; readonly execute: () => VMState; readonly setInstructionPointer: (position: number) => boolean; @@ -83,6 +77,7 @@ export interface ApplicationExecuted { } export interface VM { + readonly updateSnapshots: () => void; readonly withApplicationEngine: ( options: ApplicationEngineOptions, func: (engine: ApplicationEngine) => T, diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index e8f4c0eba1..5db5ceb58b 100644 --- a/packages/neo-one-node-network/src/Network.ts +++ b/packages/neo-one-node-network/src/Network.ts @@ -291,6 +291,10 @@ export class Network { // tslint:disable-next-line no-loop-statement while (!this.mutableStopped) { try { + logger.debug({ + name: 'neo_network_current_connected_peers', + num: Object.values(this.mutableConnectedPeers).length, + }); this.connectToPeers(); this.checkPeerHealth(); await new Promise((resolve) => { diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index ffd41577db..bd9afc7129 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -136,11 +136,16 @@ const compareTransactionAndFees = (val1: TransactionAndFee, val2: TransactionAnd 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_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 = 5000; +const GET_BLOCKS_TIME_MS = 1000; const GET_BLOCKS_THROTTLE_MS = 1000; const TRIM_MEMPOOL_THROTTLE = 5000; const GET_BLOCKS_CLOSE_COUNT = 2; @@ -204,7 +209,7 @@ export class Node implements INode { command: Command.GetBlocks, payload: new GetBlocksPayload({ hashStart: block.hash, - count: this.mutableGetBlocksRequestsCount * 100, + count: this.mutableGetBlocksRequestsCount * 50, }), }), ); @@ -856,7 +861,6 @@ export class Node implements INode { } private async persistBlock(block: Block): Promise { - const startTime = Date.now(); if (this.blockchain.currentBlockIndex > block.index || this.tempKnownBlockHashes.has(block.hashHex)) { return; } @@ -888,10 +892,9 @@ export class Node implements INode { }), ); } - logger.info({ + logger.debug({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index, - timeToPersist: `${(Date.now() - startTime) / 1000} seconds`, }); } catch (err) { logger.error({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index, err }); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 80f29c7185..91950c0ac5 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -350,7 +350,7 @@ export const createHandler = ({ [RPC_METHODS.getblockhash]: async (args) => { const height = args[0]; checkHeight(height); - const hash = blockchain.getBlockHash(height); + const hash = await blockchain.getBlockHash(height); return hash === undefined ? undefined : JSONHelper.writeUInt256(hash); }, @@ -617,8 +617,8 @@ export const createHandler = ({ throw new JSONRPCError(-32602, 'Invalid params'); } - const startTimeBytes = new BN(startTime, 10).toBuffer('le').reverse(); - const endTimeBytes = new BN(endTime, 10).toBuffer('le').reverse(); + const startTimeBytes = new BN(startTime).toBuffer(); + const endTimeBytes = new BN(endTime).toBuffer(); const mapToTransfers = ({ key, value }: { key: Nep5TransferKey; value: Nep5Transfer }) => ({ timestamp: key.timestampMS.toNumber(), assethash: common.uInt160ToString(key.assetScriptHash), diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index db0be55b7c..e01011f8aa 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -34,10 +34,10 @@ const getCreateKey = ({ const getMetadataKey = ({ prefix }: { readonly prefix: Prefix }) => Buffer.from([prefix]); const serializeHeaderHashListKey = (key: number) => { - const writer = new BinaryWriter(); - writer.writeUInt32LE(key); + const buffer = Buffer.alloc(4); + buffer.writeUInt32LE(key); - return writer.toBuffer(); + return buffer; }; /* crude method but it does what we want it to do */ @@ -135,11 +135,13 @@ const contractIDKey = getMetadataKey({ const minBlockKey = createBlockKey({ hashOrIndex: common.ZERO_UINT256 }); const maxBlockKey = createBlockKey({ hashOrIndex: common.MAX_UINT256 }); -const minHeaderHashListKey = createHeaderHashListKey(0); -const maxHeaderHashListKey = createHeaderHashListKey(0xffffffff); - 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); @@ -154,6 +156,7 @@ export const keys = { createStorageKey, getStorageSearchRange, getNep5BalanceSearchRange, + getAllNep5BalanceSearchRange, getNep5TransferReceivedSearchRange, getNep5TransferSentSearchRange, createHeaderHashListKey, @@ -162,6 +165,4 @@ export const keys = { contractIDKey, minBlockKey, maxBlockKey, - minHeaderHashListKey, - maxHeaderHashListKey, }; diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 0609480af6..ba0bea8f7e 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -85,8 +85,9 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage return { blocks, - nep5Balances: read.createReadFindStorage({ + nep5Balances: read.createReadAllFindStorage({ db, + searchRange: keys.getAllNep5BalanceSearchRange, getSearchRange: keys.getNep5BalanceSearchRange, serializeKey: keys.createNep5BalanceKey, deserializeValue: (buffer) => @@ -157,9 +158,8 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage }), }), - headerHashList: read.createReadAllStorage({ + headerHashList: read.createReadStorage({ db, - range: { gte: keys.minHeaderHashListKey, lte: keys.maxHeaderHashListKey }, serializeKey: keys.createHeaderHashListKey, deserializeValue: (buffer) => HeaderHashList.deserializeWire({ diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index 4f3c87c82e..a99fe265bb 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -1,5 +1,6 @@ // tslint:disable no-var-before-return prefer-immediate-return import { + ReadAllFindStorage, ReadAllStorage, ReadFindStorage, ReadMetadataStorage, @@ -172,6 +173,42 @@ export function createReadFindStorage({ }; } +export function createReadAllFindStorage({ + db, + searchRange, + getSearchRange, + serializeKey, + deserializeKey, + deserializeValue, +}: { + readonly db: LevelUp; + readonly searchRange: StreamOptions; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; + readonly serializeKey: SerializeKey; + readonly deserializeKey: (value: Buffer) => Key; + readonly deserializeValue: (value: Buffer) => Value; +}): ReadAllFindStorage { + const readStorage = createReadStorage({ + db, + serializeKey, + deserializeValue, + }); + + const all$ = createAll$({ db, range: searchRange, deserializeValue }); + + return { + get: readStorage.get, + tryGet: readStorage.tryGet, + find$: createFind$({ + db, + getSearchRange, + deserializeKey, + deserializeValue, + }), + all$, + }; +} + // TODO: do we need to reimplement this for something? // export function createReadGetAllStorage({ // db, diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 9b85e1e2fc..06bb281b93 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using Neo.IO; using Neo.Network.P2P.Payloads; using Neo.Persistence; using Neo.SmartContract; @@ -17,6 +18,7 @@ private enum ContainerType Block, Transaction, Signers, + ConsensusPayload, } private IVerifiable deserializeContainer(dynamic args) @@ -37,6 +39,12 @@ private IVerifiable deserializeContainer(dynamic args) 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"); } @@ -172,21 +180,27 @@ private TriggerType _getTrigger() return this.engine.Trigger; } + private dynamic _getContainer() + { + this.isEngineInitialized(); + return this.engine.ScriptContainer; + } + private long _getGasConsumed() { return this.engine != null ? this.engine.GasConsumed : 0; } - private ReturnHelpers.NotifyEventReturn[] _getNotifications() + private dynamic[] _getNotifications() { this.isEngineInitialized(); var events = this.engine.Notifications; if (events == null || events.Count == 0) { - return new ReturnHelpers.NotifyEventReturn[] { }; + return new dynamic[] { }; } - return events.Select((p) => new ReturnHelpers.NotifyEventReturn(p)).ToArray(); + return events.Select((p) => ReturnHelpers.convertStackItem(p.ToStackItem(new ReferenceCounter()))).ToArray(); } private bool isEngineInitialized() @@ -199,4 +213,51 @@ private bool isEngineInitialized() 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.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index a79bc4d709..f1e7982d1d 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -15,7 +15,6 @@ public partial class Dispatcher private IStore store; private bool init = false; private string path; - private enum BaseMethod { init, @@ -125,7 +124,7 @@ private bool _dispose() private dynamic _test() { - return true; + return this._getConfig(); } private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index 25219ed4fe..284ce6f2db 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -14,8 +14,8 @@ - + + @@ -24,10 +24,4 @@ true - - - - - - diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index 0c5b8d6f35..1a3818e3e5 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -142,22 +142,6 @@ public static dynamic convertStackItem(StackItem item) _ => convertStackItem((PrimitiveType)item) }; } - - public class NotifyEventReturn - { - public SerializedScriptContainer scriptContainer; - public byte[] scriptHash; - public string eventName; - public dynamic[] state; - - public NotifyEventReturn(NotifyEventArgs notifyEvent) - { - this.scriptContainer = new SerializedScriptContainer(notifyEvent.ScriptContainer); - this.scriptHash = notifyEvent.ScriptHash.ToArray(); - this.eventName = notifyEvent.EventName; - this.state = convertStackItem(notifyEvent.State); - } - } public class ProtocolSettingsReturn { public int magic; @@ -181,46 +165,5 @@ public ProtocolSettingsReturn(ProtocolSettings value) this.memoryPoolMaxTransactions = value.MemoryPoolMaxTransactions; } } - - public enum ScriptContainerType - { - block, - transaction, - signers, - consensuspayload, - } - - public class SerializedScriptContainer - { - public ScriptContainerType type; - public byte[] buffer; - public SerializedScriptContainer(ISerializable scriptContainer) - { - this.type = GetScriptContainerType(scriptContainer); - this.buffer = scriptContainer.ToArray(); - } - - private ScriptContainerType GetScriptContainerType(ISerializable scriptContainer) - { - if (scriptContainer is Block) - { - return ScriptContainerType.block; - } - if (scriptContainer is Transaction) - { - return ScriptContainerType.transaction; - } - if (scriptContainer is Signer) - { - return ScriptContainerType.signers; - } - if (scriptContainer is ConsensusPayload) - { - return ScriptContainerType.consensuspayload; - } - - throw new ArgumentException($"{scriptContainer.ToString()} is not a valid serializable ScriptContainer"); - } - } } } diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs index d1293d8817..bb5c50821a 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -47,10 +47,10 @@ public void Put(byte table, byte[] key, byte[] value) byte[] fullKey = store.getFullKey(table, keyOrPrefix); if (direction == SeekDirection.Forward) - for (it.Seek(fullKey); it.Valid(); it.Next()) + for (it.Seek(fullKey); it.Valid() && it.Key()[0] == table; it.Next()) yield return (it.Key(), it.Value()); else - for (it.SeekForPrev(fullKey); it.Valid(); it.Prev()) + for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) yield return (it.Key(), it.Value()); } diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs index e492884e59..338e95a50a 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs @@ -4,10 +4,7 @@ using System; using System.Collections.Generic; using System.IO; -using System.Reflection; using System.Runtime.CompilerServices; -using System.Text; -using System.Threading; namespace NEOONE.Storage.RocksDB { diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index 57d41ede0f..ebe8cf800e 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -8,7 +8,7 @@ import { } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { parseNotifications, parseStackItems } from './converters'; +import { parseStackItems } from './converters'; import { EngineMethods } from './Methods'; import { DispatcherFunc } from './types'; @@ -70,7 +70,7 @@ export class ApplicationEngine { } public get notifications() { - return parseNotifications( + return parseStackItems( this.dispatch({ method: 'getnotifications', }), diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index cffc0c3fc2..4e00288372 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -34,7 +34,6 @@ export class Dispatcher { public withSnapshots( func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, ) { - this.resetSnapshots(); const main = new SnapshotHandler(this, 'main'); const clone = new SnapshotHandler(this, 'clone'); @@ -65,7 +64,7 @@ export class Dispatcher { }); } - public resetSnapshots(): void { + public updateSnapshots(): void { this.dispatch({ method: 'snapshot_reset', }); diff --git a/packages/neo-one-node-vm/src/converters/index.ts b/packages/neo-one-node-vm/src/converters/index.ts index 944619d6d0..432b3f15ce 100644 --- a/packages/neo-one-node-vm/src/converters/index.ts +++ b/packages/neo-one-node-vm/src/converters/index.ts @@ -1,3 +1,2 @@ export * from './changes'; export * from './stackItems'; -export * from './notifications'; diff --git a/packages/neo-one-node-vm/src/converters/notifications.ts b/packages/neo-one-node-vm/src/converters/notifications.ts deleted file mode 100644 index 7c6494cf26..0000000000 --- a/packages/neo-one-node-vm/src/converters/notifications.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { common } from '@neo-one/client-common'; -import { Notification, SerializableContainer } from '@neo-one/node-core'; -import { parseStackItems, StackItemReturn } from './stackItems'; - -export interface NotificationReturn { - readonly scriptContainer: SerializableContainer; - readonly scriptHash: Buffer; - readonly eventName: string; - readonly state: readonly StackItemReturn[]; -} - -const parseNotification = (notification: NotificationReturn): Notification => ({ - scriptContainer: notification.scriptContainer, - scriptHash: common.asUInt160(notification.scriptHash), - eventName: notification.eventName, - state: parseStackItems(notification.state), -}); - -export const parseNotifications = (notifications: readonly NotificationReturn[]): readonly Notification[] => - notifications.map(parseNotification); diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index 066c67c253..c28bd12cc2 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,3 +1,4 @@ +import { common, crypto, JSONHelper } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; import { StorageKey, StreamOptions } from '@neo-one/node-core'; import { KeyBuilder, NativeContainer } from '@neo-one/node-native'; @@ -26,29 +27,17 @@ describe('Blockchain storage works', () => { protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); - // console.log(dispatcher.test()); + const balances = await storage.nep5Balances.all$.pipe(toArray()).toPromise(); - const native = new NativeContainer(blockchainSettings); - const blockchain = await Blockchain.create({ - settings: blockchainSettings, - storage, - vm: dispatcher, - native, - }); + console.log(balances); - await new Promise((resolve, reject) => - db - .createReadStream() - .on('data', (data: any) => { - console.log(`key: ${data.key.toString('hex')}`); - console.log(`value: ${data.key.toString('hex')}`); - }) - .on('error', (error) => { - reject(error); - }) - .on('close', resolve) - .on('end', resolve), - ); + // const native = new NativeContainer(blockchainSettings); + // const blockchain = await Blockchain.create({ + // settings: blockchainSettings, + // storage, + // vm: dispatcher, + // native, + // }); // console.log(blockchain.currentBlockIndex); diff --git a/packages/neo-one-node/src/__tests__/fullNode.test.ts b/packages/neo-one-node/src/__tests__/fullNode.test.ts index ec171fc1d4..d7a9534b9d 100644 --- a/packages/neo-one-node/src/__tests__/fullNode.test.ts +++ b/packages/neo-one-node/src/__tests__/fullNode.test.ts @@ -27,6 +27,7 @@ describe('full node test', () => { 'http://seed5t.neo.org:20333', ], }; + const rpcOptions = { http: { port: 8080, From ab2b56108077583e67783e71997216cb760aa156 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 16 Oct 2020 16:31:07 -0700 Subject: [PATCH 110/141] fix(nep5): fix nep5 updates (#2188) --- packages/neo-one-node-blockchain/src/Blockchain.ts | 3 --- .../neo-one-node-blockchain/src/getNep5UpdateOptions.ts | 2 +- packages/neo-one-node-core/src/Notification.ts | 2 +- packages/neo-one-node-core/src/StackItems/StackItems.ts | 9 +++++++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 92399f0545..17af2f7ded 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -697,9 +697,6 @@ export class Blockchain { await this.storage.commit(blockMetadataBatch); const nep5Updates = this.updateNep5Balances({ applicationsExecuted, block }); - if (nep5Updates.length > 0) { - logger.debug({ name: 'incoming_nep5_updates', nep5Updates }); - } await this.storage.commit(nep5Updates); this.vm.updateSnapshots(); diff --git a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts index bab5d35a42..91a70565b0 100644 --- a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts +++ b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts @@ -54,7 +54,7 @@ export function getNep5UpdateOptions({ if (!stateItems[0].isNull && !isByteStringStackItem(stateItems[0])) { return; } - if (!stateItems[1].isNull && isByteStringStackItem(stateItems[1])) { + if (!stateItems[1].isNull && !isByteStringStackItem(stateItems[1])) { return; } const amountItem = stateItems[2]; diff --git a/packages/neo-one-node-core/src/Notification.ts b/packages/neo-one-node-core/src/Notification.ts index 98508ae703..828d6a92fd 100644 --- a/packages/neo-one-node-core/src/Notification.ts +++ b/packages/neo-one-node-core/src/Notification.ts @@ -14,7 +14,7 @@ export class Notification { const array = assertArrayStackItem(stackItem).array; const scriptHash = common.bufferToUInt160(array[0].getBuffer()); const eventName = array[1].getString(); - const state = array.slice(2); + const state = assertArrayStackItem(array[2]).array; return new Notification({ container, diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index c06e927cc8..4f370056f1 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -73,6 +73,8 @@ export const isMapStackItem: (item: any) => item is MapStackItem = getIsStackIte 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); @@ -108,6 +110,13 @@ export const assertStructStackItem: (item: any) => StructStackItem = getAssertSt 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, From 492e79745e09b802d2f150db8c7965f47acbc83f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 19 Oct 2020 15:08:50 -0700 Subject: [PATCH 111/141] feat(node): build node-bin, fix various bugs + final cleanup (#2200) --- .dockerignore | 1 - actions/dockerhub/Dockerfile | 2 +- .../src/builds/buildTypescript.ts | 4 +- .../neo-one-client-common/src/models/types.ts | 17 ++-- packages/neo-one-client-common/src/types.ts | 33 ++++---- .../src/provider/NEOONEDataProvider.ts | 24 ++---- packages/neo-one-client/package.json | 3 +- packages/neo-one-client/src/index.ts | 41 +-------- .../package.json | 3 +- packages/neo-one-developer-tools/package.json | 2 +- packages/neo-one-node-bin/src/getOptions.ts | 2 +- .../neo-one-node-blockchain/src/Blockchain.ts | 8 +- .../src/HeaderIndexCache.ts | 2 +- .../src/transaction/Transaction.ts | 2 +- .../neo-one-node-neo-settings/src/serde.ts | 61 ++++---------- packages/neo-one-node-network/src/Network.ts | 2 +- .../src/createHandler.ts | 84 +++++++++---------- packages/neo-one-node/src/startFullNode.ts | 18 ++-- packages/neo-one-utils/src/Disposable.ts | 12 +++ scripts/DockerfileNode | 36 ++++++++ scripts/DockerfileNodeGSUtil | 34 +++++++- 21 files changed, 190 insertions(+), 201 deletions(-) diff --git a/.dockerignore b/.dockerignore index 7d3057d02b..261b1c1bdf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,3 @@ **/node_modules** -**/lib* **/package-deps.json **/*.log diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index 913f071454..0ed7a47cae 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:48db0e29e2214d564b66daffc707ad290c8788dc655cea59c605f021790d38a0 +FROM library/docker@sha256:18ff92d3d31725b53fa6633d60bed323effb6d5d4588be7b547078d384e0d4bf COPY entrypoint.sh /entrypoint.sh diff --git a/packages/neo-one-build-tools/src/builds/buildTypescript.ts b/packages/neo-one-build-tools/src/builds/buildTypescript.ts index f4c659aedc..50418d476f 100644 --- a/packages/neo-one-build-tools/src/builds/buildTypescript.ts +++ b/packages/neo-one-build-tools/src/builds/buildTypescript.ts @@ -1,6 +1,6 @@ // tslint:disable: no-any match-default-export-name import gulp from 'gulp'; -// import gulpPlumber from 'gulp-plumber'; +import gulpPlumber from 'gulp-plumber'; import gulpSourcemaps from 'gulp-sourcemaps'; import ts from 'gulp-typescript'; import typescript from 'typescript'; @@ -37,7 +37,7 @@ export const buildTypescript = (format: Format, pkgName?: string) => ( format, gulp .src(glob) - // .pipe(gulpPlumber()) + .pipe(gulpPlumber()) .pipe(gulpSourcemaps.init()) .pipe(project()) .pipe(replaceRXJSImport(format)) diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 922dc2565e..86f218285a 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -266,11 +266,10 @@ export interface TransactionJSON { readonly signers: readonly SignerJSON[]; readonly script: string; readonly witnesses: readonly WitnessJSON[]; - // TODO: what, if any, transaction data are we including? - readonly data?: TransactionReceiptJSON; + readonly receipt?: TransactionReceiptJSON; } -// TODO: temporary using this instead of TransactionWithInvocationDataJSON +// Just for Neo returns, don't think we need it for anything export interface VerboseTransactionJSON extends TransactionJSON { readonly blockhash: UInt256Hex; readonly confirmations: number; @@ -278,9 +277,7 @@ export interface VerboseTransactionJSON extends TransactionJSON { readonly vmstate: VMStateJSON; } -// TODO: not going to use this right now because still copying C# code export interface TransactionWithInvocationDataJSON extends TransactionJSON { - // TODO: this may be off slightly. Not sure where script and gas belong. They may belong in TransactionJSON readonly script: string; readonly gas: string; readonly invocationData?: InvocationDataJSON | undefined; @@ -289,15 +286,15 @@ export interface TransactionWithInvocationDataJSON extends TransactionJSON { export interface TransactionReceiptJSON { readonly blockIndex: number; readonly blockHash: string; - readonly transactionIndex: number; readonly globalIndex: string; - readonly blockTime: number; + readonly transactionIndex: number; + readonly blockTime: string; readonly confirmations: number; readonly transactionHash: string; } export type Wildcard = '*'; -export type WildcardContainerJSON = readonly string[] | Wildcard; +export type WildcardContainerJSON = readonly TJSON[] | Wildcard; export interface ContractMethodDescriptorJSON { readonly name: string; @@ -371,11 +368,10 @@ export interface BlockBaseJSON { readonly time: string; readonly index: number; readonly nextconsensus: string; + readonly nextblockhash?: string; readonly witnesses: readonly WitnessJSON[]; readonly hash: string; readonly size: number; - // TODO: confirmations: number; - // TODO: nextblockhash?: string; } export interface ConsensusDataJSON { @@ -423,7 +419,6 @@ export interface VerifyTransactionResultJSON { } export interface RelayTransactionResultJSON { - // TODO: reimplement transactionJSONWithInvocationData readonly transaction: TransactionJSON; // TODO: reimplement the longform verify transaction result readonly verifyResult?: VerifyResultJSON; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index a636c6a802..978ffeff2a 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -5,7 +5,7 @@ import { BN } from 'bn.js'; import { Observable } from 'rxjs'; import { RawSourceMap } from 'source-map'; import { ECPoint, UInt160, UInt160Hex, UInt256 } from './common'; -import { AttributeTypeModel, Wildcard } from './models'; +import { AttributeTypeModel, VMState, Wildcard } from './models'; /** * Base58 encoded string that represents a NEO address. @@ -62,7 +62,9 @@ export type NetworkType = 'main' | 'test' | string; * * @see Attribute */ -export interface AttributeBase {} +export interface AttributeBase { + readonly type: AttributeTypeModel; +} /** * `Attribute` whose transaction is "high priority". */ @@ -179,14 +181,18 @@ export interface Transaction { readonly witnesses: readonly Witness[]; } +// For Neo node returns +export interface VerboseTransaction extends Transaction { + readonly blockHash: UInt256; + readonly confirmations: number; + readonly blockTime: BigNumber; + readonly state: VMState; +} + /** * `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 ConfirmedTransaction extends Transaction { - /** - * Additional raw data that is typically processed by an `ABI` for the client APIs. - */ - readonly invocationData: RawInvocationData; /** * 'Receipt' of the confirmed transaction on the blockchain. This contains properties like the block the `Transaction` was included in. */ @@ -237,16 +243,11 @@ export interface Header { * Size in bytes of the `Block`. */ readonly size: number; - /** - * TODO: is this custom to NEO•ONE? Keep or no? - * Number of confirmations of the `Block`. - */ - // readonly confirmations: number; - /** - * TODO: is this custom to NEO•ONE? Keep or no? - * The hash of the next `Block`. - */ - // readonly nextBlockHash?: string; +} + +export interface HeaderVerbose extends Header { + readonly confirmations: number; + readonly nextblockhash: Hash256String; } /** diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 4694745130..03abc21310 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -59,7 +59,7 @@ import { TransactionReceipt, TransactionReceiptJSON, TransactionWithInvocationDataJSON, - utils, + VerboseTransactionJSON, VerifyTransactionResult, VerifyTransactionResultJSON, WildcardContainer, @@ -342,27 +342,15 @@ export class NEOONEDataProvider implements DeveloperProvider { }; } - private convertConfirmedTransaction(transaction: TransactionWithInvocationDataJSON): ConfirmedTransaction { + private convertConfirmedTransaction(transaction: ConfirmedTransactionJSON): ConfirmedTransaction { if (transaction.data === undefined) { /* istanbul ignore next */ throw new Error('Unexpected undefined data'); } - if (transaction.invocationData === undefined) { - throw new MissingTransactionDataError(transaction.hash); - } - - const invocationData = this.convertInvocationData( - transaction.invocationData, - transaction.data.blockHash, - transaction.data.blockIndex, - transaction.hash, - transaction.data.transactionIndex, - ); return { ...this.convertTransaction(transaction), - invocationData, - receipt: this.convertTransactionReceipt(transaction.data), + receipt: this.convertTransactionReceipt(transaction.receipt), }; } @@ -391,11 +379,11 @@ export class NEOONEDataProvider implements DeveloperProvider { storage: manifest.features.storage, payable: manifest.features.payable, }, - supportedStandards: manifest.supportedStandards, + supportedStandards: manifest.supportedstandards, abi: this.convertContractABI(manifest.abi), permissions: manifest.permissions.map(this.convertContractPermission), trusts: this.convertWildcardContainer(manifest.trusts, common.stringToUInt160), - safeMethods: manifest.safeMethods, + safeMethods: manifest.safemethods, extra: manifest.extra, hasStorage: manifest.features.storage, payable: manifest.features.payable, @@ -463,7 +451,7 @@ export class NEOONEDataProvider implements DeveloperProvider { return { name: method.name, parameters: method.parameters.map(this.convertContractParameterDefinition), - returnType: this.convertContractParameterType(method.returnType), + returnType: this.convertContractParameterType(method.returntype), offset: method.offset, }; } diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index 1af514faae..bbe5bf9c60 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -14,8 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/developer-tools": "^2.7.0" + "@neo-one/client-core": "^2.7.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client/src/index.ts b/packages/neo-one-client/src/index.ts index a1a998e8b5..c6835453e1 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -13,19 +13,14 @@ export { AddressABI, AddressABIParameter, AddressABIReturn, - AddressAttribute, - AddressAttributeUsage, AddressContractParameter, AddressString, ArrayABI, ArrayABIParameter, ArrayABIReturn, ArrayContractParameter, - Asset, - AssetType, Attribute, AttributeBase, - AttributeUsage, Block, BlockFilter, BooleanABI, @@ -35,28 +30,14 @@ export { BufferABI, BufferABIParameter, BufferABIReturn, - BufferAttribute, - BufferAttributeUsage, BufferContractParameter, BufferString, - ClaimTransaction, - ConfirmedClaimTransaction, - ConfirmedContractTransaction, - ConfirmedEnrollmentTransaction, - ConfirmedInvocationTransaction, - ConfirmedIssueTransaction, - ConfirmedMinerTransaction, - ConfirmedPublishTransaction, - ConfirmedRegisterTransaction, - ConfirmedStateTransaction, ConfirmedTransaction, ConfirmedTransactionBase, Contract, ContractParameter, ContractParameterType, - ContractTransaction, DeveloperProvider, - EnrollmentTransaction, Event, EventParameters, ForwardOptions, @@ -68,13 +49,9 @@ export { Hash256ABI, Hash256ABIParameter, Hash256ABIReturn, - Hash256Attribute, - Hash256AttributeUsage, Hash256ContractParameter, Hash256String, Header, - Input, - InputOutput, IntegerABI, IntegerABIParameter, IntegerABIReturn, @@ -83,25 +60,21 @@ export { InvocationResult, InvocationResultError, InvocationResultSuccess, - InvocationTransaction, InvokeReceipt, InvokeReceiveTransactionOptions, InvokeSendUnsafeReceiveTransactionOptions, InvokeSendUnsafeTransactionOptions, - IssueTransaction, JSONRPCErrorResponse, Log, MapABI, MapABIParameter, MapABIReturn, MapContractParameter, - MinerTransaction, NetworkSettings, NetworkType, ObjectABI, ObjectABIParameter, ObjectABIReturn, - Output, Param, Peer, PrivateKeyString, @@ -109,11 +82,8 @@ export { PublicKeyABI, PublicKeyABIParameter, PublicKeyABIReturn, - PublicKeyAttribute, - PublicKeyAttributeUsage, PublicKeyContractParameter, PublicKeyString, - PublishTransaction, RawAction, RawActionBase, RawCallReceipt, @@ -125,7 +95,6 @@ export { RawInvokeReceipt, RawLog, RawNotification, - RegisterTransaction, RelayTransactionResult, Return, ScriptBuilderParam, @@ -141,14 +110,12 @@ export { SmartContractNetworksDefinition, SmartContractReadOptions, SourceMaps, - StateTransaction, StorageItem, StringABI, StringABIParameter, StringABIReturn, StringContractParameter, Transaction, - TransactionBase, TransactionOptions, TransactionReceipt, TransactionResult, @@ -201,12 +168,8 @@ export { LocalUserAccountProvider, LocalWallet, NEOONEDataProvider, - NEODataProvider, - DataProviderOptions, - DataProviderOptions as NEOONEDataProviderOptions, - DataProviderOptions as NEODataProviderOptions, + NEOONEDataProviderOptions, NEOONEProvider, - NEOProvider, RemoteUserAccountProvider, SmartContract, SmartContractAny, @@ -214,4 +177,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-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index 8a370b9b1c..a277225e8a 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -4,7 +4,8 @@ "description": "NEO•ONE developer tools.", "license": "MIT", "scripts": { - "build": "node ./node_modules/@neo-one/build-tools-web/dist/compile --bundle tools", + "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" diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index 9f58d6fbeb..62dca2390d 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -5,7 +5,7 @@ "main": "./dist/cjs/index", "module": "./dist/esm/index", "scripts": { - "build": "gulp", + "build": "", "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", "lint:staged": "lint-staged --relative", "pack": "gulp pack", diff --git a/packages/neo-one-node-bin/src/getOptions.ts b/packages/neo-one-node-bin/src/getOptions.ts index 099cc4e682..43bb654cd7 100644 --- a/packages/neo-one-node-bin/src/getOptions.ts +++ b/packages/neo-one-node-bin/src/getOptions.ts @@ -15,7 +15,7 @@ const DEFAULT_OPTIONS = { host: 'localhost', }, }, - blockchain: serializeSettings(createMain()), + blockchain: serializeSettings(createTest()), }; export const getOptions = (): FullNodeCreateOptions['options'] => { diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 17af2f7ded..33b4f38486 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -107,12 +107,11 @@ export const recoverHeaderIndex = async (storage: Storage) => { export class Blockchain { public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { const headerIndexCache = await recoverHeaderIndex(storage); - logger.debug({ name: 'header_index_length', length: headerIndexCache.length }); if (headerIndexCache.length > 0) { const currentHeaderIndex = await headerIndexCache.get(headerIndexCache.length - 1); const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: currentHeaderIndex }); if (currentBlockTrimmed === undefined) { - throw new Error('testing'); + throw new Error('For TS, this should never happen'); } const currentBlock = await currentBlockTrimmed.getBlock(storage.transactions); @@ -678,11 +677,6 @@ export class Blockchain { await this.verifyBlock(block); } - if (block.transactions.length > 0) { - const hash = - block.transactions[0].sender !== undefined ? common.uInt160ToString(block.transactions[0].sender) : undefined; - logger.debug({ name: 'TRY_THIS_TEST_TRANSACTION_HASH', hash }); - } const blockchain = this.createPersistingBlockchain(); const currentHeaderCount = this.headerIndexCache.length; diff --git a/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts b/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts index 2a23b2b96a..67635bd4e6 100644 --- a/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts +++ b/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts @@ -55,7 +55,7 @@ export class HeaderIndexCache { private async getHeaderHashIndex(index: number): Promise { const hashListHashIndex = index % 2000; - if (index - this.mutableStorageCount > 0) { + if (index - this.mutableStorageCount >= 0) { return this.getHeaderHashIndexFromCurrent(hashListHashIndex); } diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index ac3bd88589..1722f41a81 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -281,7 +281,7 @@ export class Transaction }; } - public serializeJSONWithInvocationData(data: VerboseData): VerboseTransactionJSON { + public serializeJSONWithVerboseData(data: VerboseData): VerboseTransactionJSON { const base = this.serializeJSON(); return { diff --git a/packages/neo-one-node-neo-settings/src/serde.ts b/packages/neo-one-node-neo-settings/src/serde.ts index cf70e16a07..b4dd1153db 100644 --- a/packages/neo-one-node-neo-settings/src/serde.ts +++ b/packages/neo-one-node-neo-settings/src/serde.ts @@ -1,45 +1,32 @@ import { common } from '@neo-one/client-common'; -import { Block, deserializeTransactionWire, RegisterTransaction, Settings } from '@neo-one/node-core'; -import { BN } from 'bn.js'; +import { Block, Settings } from '@neo-one/node-core'; import _ from 'lodash'; export const serializeSettings = (settings: Settings) => { const { genesisBlock, - governingToken, - utilityToken, decrementInterval, generationAmount, - fees, - registerValidatorFee, messageMagic, addressVersion, privateKeyVersion, standbyValidators, - vm, - secondsPerBlock, - maxTransactionsPerBlock, - memPoolSize, + millisecondsPerBlock, + memoryPoolMaxTransactions, + standbyCommittee, } = 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, + millisecondsPerBlock, + memoryPoolMaxTransactions, + standbyCommittee: standbyCommittee.map((validator) => common.ecPointToString(validator)), }; }; @@ -47,47 +34,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, + millisecondsPerBlock, + memoryPoolMaxTransactions, + standbyCommittee, + validatorsCount, + committeeMembersCount, } = settings; const context = { messageMagic }; 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, + millisecondsPerBlock, + memoryPoolMaxTransactions, + standbyCommittee: standbyCommittee.map((validator: string) => common.stringToECPoint(validator)), + committeeMembersCount, + validatorsCount, }; }; diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index 5db5ceb58b..3c0febe94b 100644 --- a/packages/neo-one-node-network/src/Network.ts +++ b/packages/neo-one-node-network/src/Network.ts @@ -291,7 +291,7 @@ export class Network { // tslint:disable-next-line no-loop-statement while (!this.mutableStopped) { try { - logger.debug({ + logger.trace({ name: 'neo_network_current_connected_peers', num: Object.values(this.mutableConnectedPeers).length, }); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 91950c0ac5..a52556945c 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -7,9 +7,12 @@ import { toJSONVerifyResult, toVMStateJSON, TransactionJSON, + TransactionReceiptJSON, + VerboseTransactionJSON, } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { + Block, Blockchain, getEndpointConfig, NativeContainer, @@ -21,7 +24,6 @@ import { stackItemToJSON, StorageKey, Transaction, - TransactionData, TransactionState, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; @@ -251,13 +253,6 @@ 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; @@ -302,6 +297,16 @@ export const createHandler = ({ } }; + 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, + }); + const handlers: Handlers = { // Blockchain [RPC_METHODS.getbestblockhash]: async () => JSONHelper.writeUInt256(blockchain.currentBlock.hash), @@ -320,8 +325,7 @@ export const createHandler = ({ watchTimeoutMS = args[2]; } - const trimmedBlock = await blockchain.blocks.tryGet({ hashOrIndex }); - let block = await trimmedBlock?.getBlock(blockchain.transactions); + let block = await blockchain.getBlock(hashOrIndex); if (block === undefined) { if (watchTimeoutMS === undefined) { throw new JSONRPCError(-100, 'Unknown block'); @@ -391,7 +395,7 @@ export const createHandler = ({ height: blockchain.currentBlockIndex, verified: Object.values(node.memPool).map((transaction) => JSONHelper.writeUInt256(transaction.hash)), }), - [RPC_METHODS.getrawtransaction]: async (args) => { + [RPC_METHODS.getrawtransaction]: async (args): Promise => { const hash = JSONHelper.readUInt256(args[0]); const verbose = args.length >= 2 && !!args[1]; @@ -410,11 +414,10 @@ export const createHandler = ({ if (state !== undefined) { const header = await blockchain.getHeader(state.blockIndex); if (header === undefined) { - // TODO: implement better error; throw new Error('If you ever see this error something has gone terribly wrong'); } - return tx.serializeJSONWithInvocationData({ + return tx.serializeJSONWithVerboseData({ blockhash: JSONHelper.writeUInt256(header.hash), confirmations: blockchain.currentBlockIndex - header.index + 1, blocktime: JSONHelper.writeUInt64LE(header.timestamp), @@ -764,10 +767,8 @@ export const createHandler = ({ .toPromise(); }, - [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') { @@ -776,7 +777,7 @@ export const createHandler = ({ } let result; - if (transactionData === undefined) { + if (state === undefined) { if (watchTimeoutMS === undefined) { throw new JSONRPCError(-100, 'Unknown transaction'); } @@ -784,12 +785,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), @@ -800,7 +799,12 @@ 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; @@ -818,25 +822,19 @@ export const createHandler = ({ // return result.data; }, - [RPC_METHODS.getnetworksettings]: async () => { - const settings = blockchain.settings; - // TODO: change blockchain.settings to be set from NativeContracts - // Update returned values. Don't have to return all the below values - // Unique to NEO•ONE - - return { - maxTransactionPerBlock: 512, - blockAccounts: [], - maxBlockSize: 1024 * 256, - maxBlockSystemFee: '', - neoVotersCount: 0, - neoNextBlockValidators: [], - neoCandidates: [], - neoCommitteeMembers: [], - neoCommitteeAddress: '', - neoTotalSupply: 100000000, - }; - }, + // TODO: reimplement this; + [RPC_METHODS.getnetworksettings]: async () => ({ + maxTransactionPerBlock: 512, + blockAccounts: [], + maxBlockSize: 1024 * 256, + maxBlockSystemFee: '', + neoVotersCount: 0, + neoNextBlockValidators: [], + neoCandidates: [], + neoCommitteeMembers: [], + neoCommitteeAddress: '', + neoTotalSupply: 100000000, + }), [RPC_METHODS.runconsensusnow]: async () => { if (node.consensus) { await node.consensus.runConsensusNow(); diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index 9465484f9c..e67baae043 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -8,7 +8,7 @@ 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 { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node-vm'; -import { composeDisposables, Disposable, noopDisposable } from '@neo-one/utils'; +import { composeDisposable, Disposable, noopDisposable } from '@neo-one/utils'; import { AbstractLevelDOWN } from 'abstract-leveldown'; import fs from 'fs-extra'; import LevelUp from 'levelup'; @@ -60,7 +60,7 @@ export const startFullNode = async ({ } const rocks = customLeveldown === undefined ? RocksDB(dataPath) : customLeveldown; - disposable = composeDisposables(disposable, async () => { + disposable = composeDisposable(disposable, async () => { await new Promise((resolve, reject) => { rocks.close((err) => { if (err) { @@ -77,9 +77,7 @@ export const startFullNode = async ({ context: { messageMagic: blockchainSettings.messageMagic }, }); - disposable = composeDisposables(disposable, async () => { - await storage.close(); - }); + disposable = composeDisposable(async () => storage.close(), disposable); const native = new NativeContainer(blockchainSettings); @@ -88,6 +86,8 @@ export const startFullNode = async ({ protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); + disposable = composeDisposable(async () => vm.dispose(), disposable); + const blockchain = await Blockchain.create({ settings: blockchainSettings, storage, @@ -95,9 +95,7 @@ export const startFullNode = async ({ vm, }); - disposable = composeDisposables(disposable, async () => { - await blockchain.stop(); - }); + disposable = composeDisposable(async () => blockchain.stop(), disposable); if (chainFile !== undefined) { await loadChain({ @@ -124,7 +122,7 @@ export const startFullNode = async ({ }), }); const nodeDisposable = await node.start(); - disposable = composeDisposables(disposable, nodeDisposable); + disposable = composeDisposable(nodeDisposable, disposable); const rpcDisposable = await setupRPCServer({ blockchain, @@ -132,7 +130,7 @@ export const startFullNode = async ({ options: rpcOptions, native, }); - disposable = composeDisposables(disposable, rpcDisposable); + disposable = composeDisposable(rpcDisposable, disposable); return disposable; } catch (err) { 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/scripts/DockerfileNode b/scripts/DockerfileNode index b519b0c1b1..f49b54a044 100644 --- a/scripts/DockerfileNode +++ b/scripts/DockerfileNode @@ -13,6 +13,30 @@ 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 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 @@ -30,6 +54,7 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/node_modules package 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/ @@ -106,6 +131,17 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/package.json packages 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 e69768abb8..89aa72422e 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -10,10 +10,33 @@ COPY packages packages/ 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 -RUN sudo node common/scripts/install-run-rush.js build -t @neo-one/node-tools # node:12.9.0-buster-slim 2019-08-27 FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250df AS production + +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 @@ -31,6 +54,7 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/node_modules package 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/ @@ -111,7 +135,15 @@ COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/package.json packag 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 + +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"] From 8d2bf5f21dc5abf503fa5009128da5048962f01f Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 19 Oct 2020 15:57:07 -0700 Subject: [PATCH 112/141] =?UTF-8?q?feat(all):=20get=20NEO=E2=80=A2ONE=20to?= =?UTF-8?q?=20build=20(#2186)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/config/rush/command-line.json | 62 ++++++-- .../neo-one-cli-common/src/deployContract.ts | 10 +- .../neo-one-cli-common/src/setupWallets.ts | 10 +- .../neo-one-client-common/src/models/types.ts | 105 +++++++++++++- packages/neo-one-client-common/src/types.ts | 104 +++++++++---- packages/neo-one-client-core/src/Client.ts | 80 +++++++--- packages/neo-one-client-core/src/Hash160.ts | 15 ++ packages/neo-one-client-core/src/Hash256.ts | 15 -- .../neo-one-client-core/src/__data__/data.ts | 4 +- .../src/__data__/factory.ts | 5 +- .../RemoteUserAccountProvider.test.ts | 14 +- .../src/__tests__/temp.test.ts | 30 ++-- packages/neo-one-client-core/src/args.ts | 3 +- packages/neo-one-client-core/src/index.ts | 2 +- packages/neo-one-client-core/src/nep5.ts | 6 + .../src/provider/JSONRPCClient.ts | 20 +++ .../src/provider/NEOONEDataProvider.ts | 24 ++- .../src/provider/NEOONEProvider.ts | 5 + .../src/provider/convert.ts | 56 +++++-- .../src/user/LocalUserAccountProvider.ts | 25 ++-- .../src/user/RemoteUserAccountProvider.ts | 1 + .../src/user/UserAccountProviderBase.ts | 130 +++++++++-------- .../neo-one-client-full-core/src/Client.ts | 4 +- .../src/ReadClient.ts | 1 + .../neo-one-client-full-core/src/types.ts | 1 + packages/neo-one-client-switch/package.json | 2 +- .../src/common/createConsoleLogMessages.ts | 30 ++-- packages/neo-one-client/src/index.ts | 43 ++++-- .../src/__data__/configs/consensus.ts | 4 +- .../src/wrapExecuteScripts.ts | 5 +- packages/neo-one-node-core/src/Blockchain.ts | 4 + .../neo-one-node-core/src/Serializable.ts | 25 ++++ packages/neo-one-node-core/src/Signers.ts | 15 +- .../src/StackItems/StackItems.ts | 21 ++- .../message/RecoveryConsensusMessage.ts | 2 + .../src/transaction/Transaction.ts | 2 +- .../src/utils/deserializeStackItem.ts | 137 ++++++++++++++++++ packages/neo-one-node-core/src/utils/index.ts | 2 + .../src/utils/notificationToJSON.ts | 14 ++ packages/neo-one-node-core/src/utils/utils.ts | 133 +---------------- packages/neo-one-node-http-rpc/package.json | 1 + .../neo-one-node-neo-settings/src/serde.ts | 41 ++++-- packages/neo-one-node-offline/src/index.ts | 4 +- .../src/createHandler.ts | 125 +++++++++------- 44 files changed, 887 insertions(+), 455 deletions(-) create mode 100644 packages/neo-one-client-core/src/Hash160.ts delete mode 100644 packages/neo-one-client-core/src/Hash256.ts create mode 100644 packages/neo-one-node-core/src/utils/deserializeStackItem.ts create mode 100644 packages/neo-one-node-core/src/utils/notificationToJSON.ts diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 559f51ad30..490b7890d2 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -334,62 +334,85 @@ "longName": "--express", "shortName": "-e", "description": "flag to enable Cypress' express test", - "associatedCommands": ["test-cypress"] + "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"] + "associatedCommands": [ + "test-cypress" + ] }, { "parameterKind": "string", "longName": "--browser", "argumentName": "BROWSER", "description": "specify the browser for Cypress to use", - "associatedCommands": ["cypress-run"] + "associatedCommands": [ + "cypress-run" + ] }, { "parameterKind": "string", "longName": "--spec", "argumentName": "SPEC", "description": "specify the tests that Cypress should run", - "associatedCommands": ["cypress-run"] + "associatedCommands": [ + "cypress-run" + ] }, { "parameterKind": "flag", "longName": "--coverage", "shortName": "-c", "description": "flag to enable coverage collection for jest", - "associatedCommands": ["test", "test-ci"] + "associatedCommands": [ + "test", + "test-ci" + ] }, { "parameterKind": "flag", "longName": "--update-snapshot", "shortName": "-u", "description": "update snapshot tests", - "associatedCommands": ["test", "e2e"] + "associatedCommands": [ + "test", + "e2e" + ] }, { "parameterKind": "flag", "longName": "--debug", "shortName": "-d", "description": "enables logging/debug mode for associated command", - "associatedCommands": ["clean"] + "associatedCommands": [ + "clean" + ] }, { "parameterKind": "flag", "longName": "--full", "shortName": "-f", "description": "enables cleaning of dist/* and rush/* directories", - "associatedCommands": ["clean"] + "associatedCommands": [ + "clean" + ] }, { "parameterKind": "flag", "longName": "--detect-open-handles", "description": "pass through of jest's detectOpenHandle flag", - "associatedCommands": ["test", "test-ci", "e2e", "e2e-ci"] + "associatedCommands": [ + "test", + "test-ci", + "e2e", + "e2e-ci" + ] }, { "parameterKind": "string", @@ -397,7 +420,13 @@ "shortName": "-t", "argumentName": "PATTERN", "description": "jest pattern matching parameter", - "associatedCommands": ["test", "test-ci", "e2e", "e2e-ci", "e2e-ci:coverage"] + "associatedCommands": [ + "test", + "test-ci", + "e2e", + "e2e-ci", + "e2e-ci:coverage" + ] }, { "parameterKind": "string", @@ -405,14 +434,19 @@ "shortName": "-w", "argumentName": "PATTERN", "description": "jest maximum concurrent worker flag", - "associatedCommands": ["e2e"] + "associatedCommands": [ + "e2e" + ] }, { "parameterKind": "choice", "longName": "--format", "shortName": "-b", "description": "specify an output build format (main, esm, browserify)", - "associatedCommands": ["build", "rebuild"], + "associatedCommands": [ + "build", + "rebuild" + ], "alternatives": [ { "name": "main", @@ -433,7 +467,9 @@ "longName": "--flags", "shortName": "-F", "description": "add a code coverage flag", - "associatedCommands": ["upload-coverage"], + "associatedCommands": [ + "upload-coverage" + ], "alternatives": [ { "name": "unit", 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-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 86f218285a..360a355560 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,4 +1,4 @@ -import { JSONArray, JSONObject } from '@neo-one/utils'; +import { JSONObject } from '@neo-one/utils'; import { UInt256Hex } from '../common'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; @@ -214,11 +214,13 @@ export interface UnclaimedGASJSON { readonly address: string; } +// TODO: not sure if we need this export interface StateItemJSON { readonly type: string; readonly value: string; } +// TODO: not sure if we need this export interface NeoNotificationJSON { readonly contract: string; readonly state: { @@ -227,11 +229,69 @@ export interface NeoNotificationJSON { }; } -export interface StackItemJSON { - readonly type: string; +export interface StackItemJSONBase { + readonly type: StackItemJSON['type']; + // readonly value: + // | string + // | number + // | boolean + // | readonly StackItemJSON[] + // | undefined + // | ReadonlyArray<{ readonly key: PrimitiveStackItemJSON; readonly value: StackItemJSON }>; +} + +export interface AnyStackItemJSON extends StackItemJSONBase { + readonly type: 'Any'; + readonly value: undefined; +} + +export interface PointerStackItemJSON extends StackItemJSONBase { + readonly type: 'Pointer'; + readonly value: number; +} + +export interface BooleanStackItemJSON extends StackItemJSONBase { + readonly type: 'Boolean'; + readonly value: boolean; +} + +export interface IntegerStackItemJSON extends StackItemJSONBase { + readonly type: 'Integer'; + readonly value: string; +} + +export interface ByteStringStackItemJSON extends StackItemJSONBase { + readonly type: 'ByteString'; + readonly value: string; +} + +export interface BufferStackItemJSON extends StackItemJSONBase { + readonly type: 'Buffer'; readonly value: string; } +export interface ArrayStackItemJSON extends StackItemJSONBase { + readonly type: 'Array'; + readonly value: readonly StackItemJSON[]; +} + +export interface MapStackItemJSON extends StackItemJSONBase { + readonly type: 'Map'; + readonly value: ReadonlyArray<{ readonly key: PrimitiveStackItemJSON; readonly value: StackItemJSON }>; +} + +export type PrimitiveStackItemJSON = BooleanStackItemJSON | IntegerStackItemJSON | ByteStringStackItemJSON; + +export type StackItemJSON = + | AnyStackItemJSON + | PointerStackItemJSON + | PrimitiveStackItemJSON + | BufferStackItemJSON + | ArrayStackItemJSON + // | StructStackItemJSON + | MapStackItemJSON; +// | InteropInterfaceStackItemJSON; + // TODO: copy pasted from node-core. We might want to put this here instead export enum TriggerType { Verification = 0x00, @@ -361,6 +421,33 @@ export interface ContractJSON { readonly payable: boolean; } +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 previousblockhash: string; @@ -400,11 +487,19 @@ export interface NetworkSettingsJSON { // readonly actions: readonly ActionJSON[]; // } +export interface NotificationJSON { + // readonly scriptcontainer: SerializedScriptContainerJSON; + readonly scripthash: string; + readonly eventname: string; + readonly state: readonly StackItemJSON[]; +} + export interface CallReceiptJSON { readonly script: string; readonly state: keyof typeof VMState; - readonly gasConsumed: string; - readonly stack: JSONArray | string; + readonly gasconsumed: number; + readonly stack: readonly StackItemJSON[] | string; + readonly notifications: readonly NotificationJSON[]; } export interface VerifyScriptResultJSON { diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 978ffeff2a..25f397698a 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -255,7 +255,7 @@ export interface HeaderVerbose extends Header { */ export interface ConsensusData { /** - * TODO: add description + * TODO: document */ readonly primaryIndex: number; /** @@ -412,10 +412,7 @@ export interface Transfer { */ readonly amount: BigNumber; /** - * `Hash256` in string format of the native `Asset` to transfer. - * TODO: make sure this is only ever a NEO or GAS hash? Are there even asset hashes anymore? - * may want to just change this to "NEO" | "GAS". Or, more likely, it can represent any "asset" - * created by any NEP5 contract + * `Hash160` in string format of the address of the `Contract` to call to make the transfer. */ readonly asset: AddressString; /** @@ -502,6 +499,10 @@ export interface UserAccountProvider { * @returns the current `Block` height. */ readonly getBlockCount: (network: NetworkType) => Promise; + /** + * @returns `Account` for the specified network and address. Note that the provided network and address may not correspond to one of the available `UserAccount`s. + */ + readonly getAccount: (network: NetworkType, address: AddressString) => Promise; /** * @returns `AsyncIterable` of `Block`s on the argument `network`. */ @@ -585,14 +586,14 @@ export interface UserAccountProvider { * * Otherwise, parameters are the same as `invoke`. */ - readonly invokeClaim: ( - contract: AddressString, - method: string, - params: ReadonlyArray, - paramsZipped: ReadonlyArray, - options?: TransactionOptions, - sourceMaps?: SourceMaps, - ) => Promise; + // readonly invokeClaim: ( + // contract: AddressString, + // method: string, + // params: ReadonlyArray, + // paramsZipped: ReadonlyArray, + // options?: TransactionOptions, + // sourceMaps?: SourceMaps, + // ) => Promise; /** * Invokes the constant `method` on `contract` with `params` on `network`. */ @@ -666,6 +667,25 @@ export interface DeveloperProvider { readonly resetProject: () => Promise; } +/** + * An `Account` represents the balances of NEO, GAS an other NEP5 assets at a given `Address`. + */ +export interface Account { + /** + * The address of this `Account`. + */ + readonly address: AddressString; + /** + * A mapping from an `AddressString` of a contract to the value of the held by the `address` for this `Account`. + */ + readonly balances: { + /** + * May be `undefined` if the `address` has 0 balance. + */ + readonly [asset: string]: BigNumber; + }; +} + /** * The base type of the `Event` parameters. This type is specialized automatically with the generated NEO•ONE smart contract APIs. */ @@ -881,16 +901,6 @@ export interface UpdateAccountNameOptions { readonly name: string; } -/** - * Default value is the `Transaction` sender `Address` - */ -export interface SenderAddressABIDefault { - /** - * `type` differentiates the `SenderAddressABIDefault` object from other `ABIDefault` objects. - */ - readonly type: 'sender'; -} - /** * Common properties of all `ABIReturn` specifications. * @@ -1273,8 +1283,8 @@ export type ForwardValueABI = ForwardValueABIParameter | ForwardValueABIReturn; /** * Method specification in the `ABI` of a smart contract generated by the NEO•ONE compiler and - * for use in Client APIs. - * TODO: describe + * for use in Client APIs. `ContractMethodDescriptClient` provides extra information for use in + * the NEO•ONE Client. */ export interface ContractMethodDescriptorClient { /** @@ -1474,7 +1484,7 @@ export interface ContractPermissionDescriptor { */ readonly isHash: boolean; /** - * True if the permission is for a `ECPoint`, representing a `ContractGroup`. + * True if the permission is for an `ECPoint`, representing a `ContractGroup`. */ readonly isGroup: boolean; /** @@ -1499,9 +1509,9 @@ export interface ContractPermission { } /** - * TODO: add to description * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, - * it will be limited by its declared list of features and permissions. + * it will be limited by its declared list of features and permissions. `ContractManifestClient` + * specifically contains extra contract information for use in the NEO•ONE Client */ export interface ContractManifestClient { /** @@ -2197,8 +2207,41 @@ 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: number; + readonly stack: readonly RawStackItem[] | string; + readonly notifications: readonly NewRawNotification[]; +} + +/** + * Raw stack item. + * + * Low-level API for advanced usage only. + */ +export interface RawStackItem { + readonly type: string; + readonly value: + | boolean + | Buffer + | string + | undefined + | BigNumber + | number + | Map + | 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[]; + // readonly scriptContainer: any; } /** @@ -2333,7 +2376,6 @@ export type ParamJSON = * Constant settings used to initialize the client APIs. */ export interface NetworkSettings { - // TODO: remove/replace this readonly issueGASFee: BigNumber; } diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index a8052524b0..c7d81b2fcb 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -1,6 +1,7 @@ /// // tslint:disable member-ordering readonly-array no-any import { + Account, AddressString, Block, GetOptions, @@ -176,6 +177,13 @@ export class Client< */ public readonly block$: Observable; + /** + * Emits a value whenever a new user account is selected and whenever a block is persisted to the blockchain. + * + * Immediately emits the latest value when subscribed to. + */ + public readonly accountState$: Observable; + public constructor(providersIn: TUserAccountProviders) { this.hooks = { beforeRelay: new AsyncParallelHook(['beforeRelay']), @@ -258,6 +266,23 @@ export class Client< multicast(() => new ReplaySubject(1)), refCount(), ); + this.accountState$ = combineLatest([this.currentUserAccount$, this.block$]).pipe( + switchMap(async ([currentUserAccount]) => { + if (currentUserAccount === undefined) { + return undefined; + } + + const account = await this.getNetworkProvider(currentUserAccount.id.network).getAccount( + currentUserAccount.id.network, + currentUserAccount.id.address, + ); + + return { currentUserAccount, account }; + }), + distinctUntilChanged((a, b) => _.isEqual(a, b)), + multicast(() => new ReplaySubject(1)), + refCount(), + ); } /** @@ -436,6 +461,15 @@ export class Client< return this.addTransactionHooks(this.getProvider(options).claim(options)); } + /** + * @returns `Promise` which resolves to an `Account` object for the provided `UserAccountID`. + */ + public async getAccount(idIn: UserAccountID): Promise { + const id = args.assertUserAccountID('id', idIn); + + return this.getNetworkProvider(id.network).getAccount(id.network, id.address); + } + /** * @internal */ @@ -576,29 +610,29 @@ export class Client< /** * @internal */ - public async __invokeClaim( - contract: AddressString, - method: string, - params: ReadonlyArray, - paramsZipped: ReadonlyArray, - optionsIn?: TransactionOptions, - sourceMaps: SourceMaps = {}, - ): Promise { - args.assertAddress('contract', contract); - args.assertString('method', method); - args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); - paramsZipped.forEach(([tupleString, tupleParam]) => [ - args.assertString('tupleString', tupleString), - args.assertNullableParam('tupleParam', tupleParam), - ]); - const options = args.assertTransactionOptions('options', optionsIn); - args.assertSourceMaps('sourceMaps', sourceMaps); - await this.applyBeforeRelayHook(options); - - return this.addTransactionHooks( - this.getProvider(options).invokeClaim(contract, method, params, paramsZipped, options, sourceMaps), - ); - } + // public async __invokeClaim( + // contract: AddressString, + // method: string, + // params: ReadonlyArray, + // paramsZipped: ReadonlyArray, + // optionsIn?: TransactionOptions, + // sourceMaps: SourceMaps = {}, + // ): Promise { + // args.assertAddress('contract', contract); + // args.assertString('method', method); + // args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); + // paramsZipped.forEach(([tupleString, tupleParam]) => [ + // args.assertString('tupleString', tupleString), + // args.assertNullableParam('tupleParam', tupleParam), + // ]); + // const options = args.assertTransactionOptions('options', optionsIn); + // args.assertSourceMaps('sourceMaps', sourceMaps); + // await this.applyBeforeRelayHook(options); + + // return this.addTransactionHooks( + // this.getProvider(options).invokeClaim(contract, method, params, paramsZipped, options, sourceMaps), + // ); + // } /** * @internal 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..c6fe19e85d --- /dev/null +++ b/packages/neo-one-client-core/src/Hash160.ts @@ -0,0 +1,15 @@ +import { common } from '@neo-one/client-common'; + +/** + * Common `AddressString`s. + */ +export const Hash160 = { + /** + * `AddressString` of the native NEO conract. + */ + NEO: common.uInt160ToString(common.nativeHashes.NEO), + /** + * `AddressString` of the native GAS conract. + */ + GAS: common.uInt160ToString(common.nativeHashes.GAS), +}; 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 e955618ab7..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 } 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 = { @@ -344,7 +344,7 @@ const transfer = { a: { to: keys[0].address, amount: bigNumbers.a, - asset: Hash256.NEO, + asset: Hash160.NEO, }, }; diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index 520ead9ffd..31624a78a3 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -73,12 +73,11 @@ import { VoidContractParameterJSON, Witness, WitnessJSON, - WitnessModel, } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { ContractEventDescriptor, ContractMethodDescriptor } from '../../../neo-one-node-core/src/manifest'; -import { Hash256 } from '../Hash256'; +import { Hash160 } from '../Hash160'; import * as nep5 from '../nep5'; import { LockedWallet, UnlockedWallet } from '../user'; import { data } from './data'; @@ -681,7 +680,7 @@ 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, }); 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 44fa9fafc2..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', () => { @@ -218,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, }, @@ -255,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, ); @@ -280,7 +280,7 @@ describe('RemoteUserAccountProvider', () => { allParamsZipped, { amount: data.bigNumbers.a, - asset: Hash256.NEO, + asset: Hash160.NEO, to: keys[0].address, }, transactionOptions, @@ -304,7 +304,7 @@ describe('RemoteUserAccountProvider', () => { 'deploy', allScriptBuilderParams, allParamsZipped, - Hash256.NEO, + Hash160.NEO, transactionOptions, ); @@ -324,7 +324,7 @@ describe('RemoteUserAccountProvider', () => { 'deploy', allScriptBuilderParams, allParamsZipped, - Hash256.NEO, + Hash160.NEO, transactionOptions, sourceMap, ); diff --git a/packages/neo-one-client-core/src/__tests__/temp.test.ts b/packages/neo-one-client-core/src/__tests__/temp.test.ts index bd9832d344..e2af1e73e7 100644 --- a/packages/neo-one-client-core/src/__tests__/temp.test.ts +++ b/packages/neo-one-client-core/src/__tests__/temp.test.ts @@ -1,10 +1,9 @@ -import { common } from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; +import { common, crypto } from '@neo-one/client-common'; import { Client } from '../Client'; import { NEOONEProvider } from '../provider'; import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../user'; -describe('quick testing', () => { +describe('Client Tests', () => { const createUserAccountProvider = async () => { const keystore = new LocalKeyStore(new LocalMemoryStore()); await keystore.addUserAccount({ @@ -24,7 +23,7 @@ describe('quick testing', () => { provider: new NEOONEProvider([ { network: 'testnet', - rpcURL: '127.0.0.1:8080/rpc', + rpcURL: 'http://127.0.0.1:8080/rpc', }, ]), }); @@ -36,16 +35,29 @@ describe('quick testing', () => { return new Client({ local: accountProvider }); }; - test('start', async () => { - const client = await setupClient(); + 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('test', common.uInt160ToString(common.nativeHashes.GAS), 'balanceOf', [ - account.id.address, - ]); + 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/args.ts b/packages/neo-one-client-core/src/args.ts index 99d03a13ee..499f38b4ed 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -575,6 +575,7 @@ const assertContractMethodDescriptorClient = (name: string, value?: unknown): Co claim: assertProperty(value, 'ContractMethodDescriptorClient', 'claim', assertNullableBoolean), refundAssets: assertProperty(value, 'ContractMethodDescriptorClient', 'refundAssets', assertNullableBoolean), completeSend: assertProperty(value, 'ContractMethodDescriptorClient', 'completeSend', assertNullableBoolean), + offset: assertProperty(value, 'ContractMethodDescriptorClient', 'offset', assertNumber), }; }; @@ -589,7 +590,7 @@ const assertContractMethodDescriptor = (name: string, value?: unknown): Contract assertContractParameter('ContractMethodDescriptor.parameters', parameter), ), returnType: assertProperty(value, 'ContractMethodDescriptor', 'returnType', assertContractParameterType), - offset: assertProperty(value, 'ContractMethodDescriptor', 'offset', assertNullableNumber), + offset: assertProperty(value, 'ContractMethodDescriptor', 'offset', assertNumber), }; }; diff --git a/packages/neo-one-client-core/src/index.ts b/packages/neo-one-client-core/src/index.ts index 612c9cc58a..a891bda3d8 100644 --- a/packages/neo-one-client-core/src/index.ts +++ b/packages/neo-one-client-core/src/index.ts @@ -5,7 +5,7 @@ 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'; diff --git a/packages/neo-one-client-core/src/nep5.ts b/packages/neo-one-client-core/src/nep5.ts index 59462b66ff..fff0770371 100644 --- a/packages/neo-one-client-core/src/nep5.ts +++ b/packages/neo-one-client-core/src/nep5.ts @@ -47,6 +47,7 @@ const decimalsFunction: ContractMethodDescriptorClient = { constant: true, parameters: [], returnType: { type: 'Integer', decimals: 0 }, + offset: 0, }; const blankScript = new ScriptBuilder().build(); @@ -61,12 +62,14 @@ export const abi = (decimals: number): ContractABIClient => ({ constant: true, parameters: [], returnType: { type: 'String' }, + offset: 0, }, { name: 'symbol', constant: true, parameters: [], returnType: { type: 'String' }, + offset: 0, }, decimalsFunction, { @@ -74,6 +77,7 @@ export const abi = (decimals: number): ContractABIClient => ({ constant: true, parameters: [], returnType: { type: 'Integer', decimals }, + offset: 0, }, { name: 'transfer', @@ -93,6 +97,7 @@ export const abi = (decimals: number): ContractABIClient => ({ }, ], returnType: { type: 'Boolean' }, + offset: 0, }, { name: 'balanceOf', @@ -104,6 +109,7 @@ export const abi = (decimals: number): ContractABIClient => ({ }, ], returnType: { type: 'Integer', decimals }, + offset: 0, }, ], events: [ diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 738d6a0e55..0c168a6042 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -9,6 +9,8 @@ import { GetOptions, Hash256String, InvocationDataJSON, + Nep5BalancesJSON, + Nep5TransfersJSON, NetworkSettingsJSON, Peer, PrivateNetworkSettings, @@ -42,6 +44,24 @@ export class JSONRPCClient { ); } + public async getNep5Balances(address: AddressString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getnep5balances', + params: [addressToScriptHash(address)], + }), + ); + } + + public async getNep5Transfers(address: AddressString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getnep5transfers', + params: [addressToScriptHash(address)], + }), + ); + } + public async getBestBlockHash(): Promise { return this.withInstance(async (provider) => provider.request({ method: 'getbestblockhash' })); } diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 03abc21310..c1b5ff5565 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -1,5 +1,6 @@ /// import { + Account, AddressString, Attribute, AttributeJSON, @@ -150,7 +151,7 @@ export class NEOONEDataProvider implements DeveloperProvider { } public async testInvoke(transaction: FeelessTransactionModel): Promise { - const receipt = await this.mutableClient.testInvocation(transaction.serializeWire().toString('hex')); + const receipt = await this.mutableClient.testInvocation(transaction.script.toString('hex')); return convertCallReceipt(receipt); } @@ -272,6 +273,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), @@ -404,9 +420,9 @@ export class NEOONEDataProvider implements DeveloperProvider { }; } - private convertWildcardContainer( - container: WildcardContainerJSON, - converter: (val: TJSON) => T, + private convertWildcardContainer( + container: WildcardContainerJSON, + converter: (val: string) => T, ): WildcardContainer { if (container === '*') { return '*'; diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index 2e7b3e18c8..0e5491dc91 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -1,4 +1,5 @@ import { + Account, AddressString, Block, FeelessTransactionModel, @@ -105,6 +106,10 @@ export class NEOONEProvider implements Provider { return this.getProvider(network); } + public async getAccount(network: NetworkType, address: AddressString): Promise { + return this.getProvider(network).getAccount(address); + } + public iterActionsRaw(network: NetworkType, options?: IterOptions): AsyncIterable { return this.getProvider(network).iterActionsRaw(options); } diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 68e9001ace..f8fc7a5450 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -1,14 +1,19 @@ import { ActionJSON, CallReceiptJSON, + common, ContractParameter, ContractParameterJSON, InvocationResultJSON, JSONHelper, + NewRawNotification, + NotificationJSON, RawAction, RawCallReceipt, RawInvocationResult, + RawStackItem, scriptHashToAddress, + StackItemJSON, } from '@neo-one/client-common'; import { utils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; @@ -16,17 +21,46 @@ 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: receipt.gasconsumed, + stack: typeof receipt.stack === 'string' ? receipt.stack : receipt.stack.map(convertStackItem), + notifications: receipt.notifications.map(convertNotifications), + }; +} + +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) }; // TODO: BigNumber or BN? + case 'Buffer': + return { type: 'Buffer', value: Buffer.from(item.value, 'hex') }; + case 'ByteString': + return { type: 'ByteString', value: Buffer.from(item.value, 'hex') }; + 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.type); + throw new Error('Problem converting stack item'); + } +} + +export function convertNotifications(notification: NotificationJSON): NewRawNotification { + return { + scriptHash: common.stringToUInt160(notification.scripthash), + eventName: notification.eventname, + state: notification.state.map(convertStackItem), }; } diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 983a17ef72..83955dc39a 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -1,5 +1,4 @@ import { - AddressString, addressToScriptHash, Attribute, common, @@ -7,11 +6,9 @@ import { GetOptions, IterOptions, NetworkType, - Param, RawAction, RelayTransactionResult, ScriptBuilder, - ScriptBuilderParam, SourceMaps, Transaction, TransactionModel, @@ -29,8 +26,8 @@ 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 { Hash256 } from '../Hash256'; +import { InvokeError, UnknownAccountError } from '../errors'; +import { Hash160 } from '../Hash160'; import { ExecuteInvokeMethodOptions, ExecuteInvokeScriptOptions, @@ -254,8 +251,7 @@ export class LocalUserAccountProvider { - // const builder = new ScriptBuilder(); - // builder.emitSysCall() + // const builder = new ScriptBuilder() // .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ // addressToScriptHash(contract), // common.GAS_CONTRACT_SCRIPT_HASH, @@ -280,6 +276,8 @@ export class LocalUserAccountProvider { sb.emitSysCall( 'System.Contract.Call', - transfer.asset === Hash256.NEO ? common.NEO_CONTRACT_SCRIPT_HASH : common.GAS_CONTRACT_SCRIPT_HASH, + transfer.asset === Hash160.NEO ? common.nativeHashes.NEO : common.nativeHashes.GAS, 'transfer', [addressToScriptHash(from.address), addressToScriptHash(transfer.to), transfer.amount.toString()], ); @@ -314,13 +312,18 @@ export class LocalUserAccountProvider { + protected async executeClaim( + from: UserAccountID, + attributes: readonly Attribute[], + networkFee: BigNumber, + ): Promise { const toAccount = this.getUserAccount(from); + const unclaimedAmount = await this.provider.getUnclaimed(from.network, from.address); const toHash = crypto.toScriptHash(crypto.createSignatureRedeemScript(common.stringToECPoint(toAccount.publicKey))); const script = new ScriptBuilder() - .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ + .emitSysCall('System.Contract.Call', common.nativeHashes.GAS, 'transfer', [ addressToScriptHash(from.address), - common.GAS_CONTRACT_SCRIPT_HASH, + common.nativeHashes.GAS, unclaimedAmount.toString(), ]) .build(); diff --git a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts index c97429304e..650b1c1236 100644 --- a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts @@ -1,4 +1,5 @@ import { + Account, AddressString, Block, GetOptions, diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index b0b0d4d98f..8aa13f1776 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -1,11 +1,11 @@ import { + Account, AddressString, addressToScriptHash, Attribute, AttributeModel, Block, common, - crypto, FeelessTransactionModel, ForwardValue, GetOptions, @@ -39,13 +39,7 @@ import BigNumber from 'bignumber.js'; import debug from 'debug'; import { Observable } from 'rxjs'; import { clientUtils } from '../clientUtils'; -import { - InsufficientSystemFeeError, - InvokeError, - NoAccountError, - NothingToClaimError, - NotImplementedError, -} from '../errors'; +import { InsufficientSystemFeeError, InvokeError, NoAccountError, NotImplementedError } from '../errors'; import { converters } from './converters'; const logger = debug('NEOONE:LocalUserAccountProvider'); @@ -91,16 +85,16 @@ export interface ExecuteInvokeMethodOptions extend readonly invokeMethodOptions: InvokeMethodOptions; } -// export interface ExecuteInvokeClaimOptions { -// readonly contract: AddressString; -// readonly unclaimedAmount: BigNumber; -// readonly attributes: readonly Attribute[]; -// readonly method: string; -// readonly params: ReadonlyArray; -// readonly paramsZipped: ReadonlyArray; -// readonly from: UserAccountID; -// readonly sourceMaps?: SourceMaps; -// } +export interface ExecuteInvokeClaimOptions { + readonly contract: AddressString; + readonly unclaimedAmount: BigNumber; + readonly attributes: readonly Attribute[]; + readonly method: string; + readonly params: ReadonlyArray; + readonly paramsZipped: ReadonlyArray; + readonly from: UserAccountID; + readonly sourceMaps?: SourceMaps; +} export interface Provider { readonly networks$: Observable; @@ -122,6 +116,7 @@ export interface Provider { readonly getBlockCount: (network: NetworkType) => Promise; readonly getTransaction: (network: NetworkType, hash: Hash256String) => Promise; readonly iterBlocks: (network: NetworkType, options?: IterOptions) => AsyncIterable; + readonly getAccount: (network: NetworkType, address: AddressString) => Promise; readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; } @@ -176,6 +171,10 @@ export abstract class UserAccountProviderBase { return this.provider.getBlockCount(network); } + public async getAccount(network: NetworkType, address: AddressString): Promise { + return this.provider.getAccount(network, address); + } + public async transfer(transfers: readonly Transfer[], options?: TransactionOptions): Promise { const { from, attributes, networkFee } = this.getTransactionOptions(options); @@ -185,9 +184,9 @@ export abstract class UserAccountProviderBase { } public async claim(options?: TransactionOptions): Promise { - const { from, networkFee } = this.getTransactionOptions(options); + const { from, attributes, networkFee } = this.getTransactionOptions(options); - return this.capture(async () => this.executeClaim(from, networkFee), { + return this.capture(async () => this.executeClaim(from, attributes, networkFee), { name: 'neo_claim', }); } @@ -408,41 +407,40 @@ export abstract class UserAccountProviderBase { }); } - public async invokeClaim( - contract: AddressString, - method: string, - params: ReadonlyArray, - paramsZipped: ReadonlyArray, - options: TransactionOptions = {}, - sourceMaps: SourceMaps = {}, - ): Promise { - // TODO: what to do with networkfee? - const { from, attributes, networkFee } = this.getTransactionOptions(options); - - return this.capture( - async () => { - const unclaimedAmount = await this.provider.getUnclaimed(from.network, contract); - - if (unclaimedAmount.lte(new BigNumber(0))) { - throw new NothingToClaimError(from); - } - - return this.executeInvokeClaim({ - contract, - unclaimedAmount, - attributes, - from, - method, - params, - paramsZipped, - sourceMaps, - }); - }, - { - name: 'neo_invoke_claim', - }, - ); - } + // public async invokeClaim( + // contract: AddressString, + // method: string, + // params: ReadonlyArray, + // paramsZipped: ReadonlyArray, + // options: TransactionOptions = {}, + // sourceMaps: SourceMaps = {}, + // ): Promise { + // const { from, attributes, networkFee } = this.getTransactionOptions(options); + + // return this.capture( + // async () => { + // const unclaimedAmount = await this.provider.getUnclaimed(from.network, contract); + + // if (unclaimedAmount.lte(new BigNumber(0))) { + // throw new NothingToClaimError(from); + // } + + // return this.executeInvokeClaim({ + // contract, + // unclaimedAmount, + // attributes, + // from, + // method, + // params, + // paramsZipped, + // sourceMaps, + // }); + // }, + // { + // name: 'neo_invoke_claim', + // }, + // ); + // } public async call( network: NetworkType, @@ -500,18 +498,20 @@ export abstract class UserAccountProviderBase { } protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { - const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER, from } = options; + const { + attributes = [], + networkFee = utils.ZERO_BIG_NUMBER, + systemFee = utils.ZERO_BIG_NUMBER, + from: fromIn, + } = options; + let from = fromIn; - let accounts: readonly AddressString[] = []; if (from === undefined) { const fromAccount = this.getCurrentUserAccount(); if (fromAccount === undefined) { - accounts = this.getUserAccounts().map((account) => - common.uInt160ToString( - crypto.addressToScriptHash({ addressVersion: common.NEO_ADDRESS_VERSION, address: account.id.address }), - ), - ); + throw new NoAccountError(); } + from = fromAccount.id; } return { @@ -686,7 +686,11 @@ export abstract class UserAccountProviderBase { networkFee: BigNumber, ): Promise; - protected abstract async executeClaim(from: UserAccountID, networkFee: BigNumber): Promise; + protected abstract async executeClaim( + from: UserAccountID, + attributes: readonly Attribute[], + networkFee: BigNumber, + ): Promise; protected async invokeRaw({ invokeMethodOptionsOrScript, diff --git a/packages/neo-one-client-full-core/src/Client.ts b/packages/neo-one-client-full-core/src/Client.ts index 63a0ae181f..14e6be7754 100644 --- a/packages/neo-one-client-full-core/src/Client.ts +++ b/packages/neo-one-client-full-core/src/Client.ts @@ -1,5 +1,5 @@ import { - ContractManifest, + ContractManifestClient, NetworkType, Param, SourceMaps, @@ -30,7 +30,7 @@ export class Client ex public async publishAndDeploy( contract: ContractRegister, - manifest: ContractManifest, + manifest: ContractManifestClient, params: readonly Param[] = [], optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, diff --git a/packages/neo-one-client-full-core/src/ReadClient.ts b/packages/neo-one-client-full-core/src/ReadClient.ts index da27c54f7a..2b42553bbc 100644 --- a/packages/neo-one-client-full-core/src/ReadClient.ts +++ b/packages/neo-one-client-full-core/src/ReadClient.ts @@ -1,4 +1,5 @@ import { + Account, AddressString, Block, Contract, diff --git a/packages/neo-one-client-full-core/src/types.ts b/packages/neo-one-client-full-core/src/types.ts index 99cb08aef8..cd4ca374ab 100644 --- a/packages/neo-one-client-full-core/src/types.ts +++ b/packages/neo-one-client-full-core/src/types.ts @@ -1,4 +1,5 @@ import { + Account, AddressString, Block, BufferString, diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 18f996ef77..3f65613a74 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -17,7 +17,7 @@ "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", "@neo-one/client-common": "^2.7.0", - "@neo-one/node-vm": "^2.7.0", + "@neo-one/node-core": "^2.7.0", "@neo-one/utils": "^2.6.1", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", diff --git a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts index ce27edbd61..61f471890e 100644 --- a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts @@ -1,5 +1,5 @@ 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'; @@ -56,7 +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: @@ -65,35 +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 ``; } @@ -106,7 +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); diff --git a/packages/neo-one-client/src/index.ts b/packages/neo-one-client/src/index.ts index c6835453e1..36ef85f618 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -1,20 +1,20 @@ export { - ABI, ABIDefault, ABIDefaultType, - ABIEvent, - ABIFunction, ABIParameter, ABIParameterBase, ABIReturn, ABIReturnBase, - Account, Action, AddressABI, AddressABIParameter, AddressABIReturn, AddressContractParameter, AddressString, + AnyABI, + AnyABIParameter, + AnyABIReturn, + AnyContractParameter, ArrayABI, ArrayABIParameter, ArrayABIReturn, @@ -33,10 +33,23 @@ export { BufferContractParameter, BufferString, ConfirmedTransaction, - ConfirmedTransactionBase, + ConsensusData, Contract, + ContractABI, + ContractABIClient, + ContractEventDescriptor, + ContractEventDescriptorClient, + ContractFeatures, + ContractGroup, + ContractManifest, + ContractManifestClient, + ContractMethodDescriptor, + ContractMethodDescriptorClient, ContractParameter, + ContractParameterDefinition, ContractParameterType, + ContractPermission, + ContractPermissionDescriptor, DeveloperProvider, Event, EventParameters, @@ -46,12 +59,17 @@ export { ForwardValueABIParameter, ForwardValueABIReturn, GetOptions, + Hash160ABI, + Hash160ABIParameter, + Hash160ABIReturn, + Hash160ContractParameter, Hash256ABI, Hash256ABIParameter, Hash256ABIReturn, Hash256ContractParameter, Hash256String, Header, + HighPriorityAttribute, IntegerABI, IntegerABIParameter, IntegerABIReturn, @@ -64,6 +82,7 @@ export { InvokeReceiveTransactionOptions, InvokeSendUnsafeReceiveTransactionOptions, InvokeSendUnsafeTransactionOptions, + IterOptions, JSONRPCErrorResponse, Log, MapABI, @@ -89,9 +108,9 @@ export { RawCallReceipt, RawInvocationData, RawInvocationResult, - RawInvocationResultBase, - RawInvocationResultError, - RawInvocationResultSuccess, + RawTransactionResultBase, + RawTransactionResultError, + RawTransactionResultSuccess, RawInvokeReceipt, RawLog, RawNotification, @@ -99,6 +118,7 @@ export { Return, ScriptBuilderParam, SenderAddressABIDefault, + Signer, SignatureABI, SignatureABIParameter, SignatureABIReturn, @@ -119,6 +139,8 @@ export { TransactionOptions, TransactionReceipt, TransactionResult, + TransactionResultSuccess, + TransactionResultError, Transfer, UpdateAccountNameOptions, UserAccount, @@ -132,6 +154,7 @@ export { VoidABIReturn, VoidContractParameter, Witness, + WitnessScope, addressToScriptHash, createPrivateKey, decryptNEP2, @@ -145,6 +168,8 @@ export { publicKeyToScriptHash, scriptHashToAddress, wifToPrivateKey, + Wildcard, + WildcardContainer, } from '@neo-one/client-common'; export { @@ -155,7 +180,7 @@ export { DapiUserAccountProvider, DeveloperClient, DeveloperClients, - Hash256, + Hash160, JSONRPCProvider, JSONRPCRequest, JSONRPCResponse, 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-blockchain/src/wrapExecuteScripts.ts b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts index a5ca3f7110..cef4ad0b28 100644 --- a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts +++ b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts @@ -1,7 +1,6 @@ import { VMState } from '@neo-one/client-common'; import { ApplicationEngine, CallReceipt } from '@neo-one/node-core'; -// TODO: implement the notification grabbing export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallReceipt => { const result = applicationEngine.execute(); if (result === VMState.HALT) { @@ -9,7 +8,7 @@ export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallRe state: result, gasConsumed: applicationEngine.gasConsumed, stack: applicationEngine.resultStack, - // notifications: applicationEngine.notifications, + notifications: applicationEngine.notifications, }; } @@ -17,6 +16,6 @@ export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallRe state: result, gasConsumed: applicationEngine.gasConsumed, stack: applicationEngine.resultStack, - // notifications: [], + notifications: [], }; }; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 2074f4b02d..321909bf27 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -47,6 +47,10 @@ export interface Blockchain extends BlockchainStorage { readonly getNextBlockHash: (hash: UInt256) => Promise; readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; + readonly invokeTransaction: ( + transaction: TTransaction, + gas: number, + ) => CallReceipt; // readonly updateSettings: (settings: BlockchainSettings) => void; readonly stop: () => Promise; diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index f012d1c7ae..f03eb86feb 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -5,6 +5,11 @@ // 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'; @@ -21,6 +26,26 @@ export interface SerializedScriptContainer { 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, diff --git a/packages/neo-one-node-core/src/Signers.ts b/packages/neo-one-node-core/src/Signers.ts index 58f04485ae..9d582a8faa 100644 --- a/packages/neo-one-node-core/src/Signers.ts +++ b/packages/neo-one-node-core/src/Signers.ts @@ -6,8 +6,14 @@ import { toWitnessScope, WitnessScopeModel, } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableContainer, SerializableContainerType } from './Serializable'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from './Serializable'; import { Signer } from './Signer'; +import { BinaryReader } from './utils'; import { Witness } from './Witness'; export interface SignersAdd { @@ -24,6 +30,13 @@ export class Signers implements SerializableContainer { }); } + 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)) { diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index 4f370056f1..60a8dceb7a 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -1,5 +1,4 @@ -import { InvalidFormatError, JSONHelper } from '@neo-one/client-common'; -import { JSONObject } from '@neo-one/utils'; +import { InvalidFormatError, JSONHelper, PrimitiveStackItemJSON, StackItemJSON } from '@neo-one/client-common'; import { InvalidPrimitiveStackItemError, InvalidStackItemError, InvalidStackItemTypeError } from '../errors'; import { ArrayStackItem } from './ArrayStackItem'; import { BooleanStackItem } from './BooleanStackItem'; @@ -133,7 +132,7 @@ export const assertPrimitiveStackItem = (item: any): PrimitiveStackItem => { throw new InvalidPrimitiveStackItemError(); }; -export const stackItemToJSON = (item: StackItem, context?: Set): JSONObject => { +export const stackItemToJSON = (item: StackItem, context?: Set): StackItemJSON => { const type = StackItemType[item.type]; switch (item.type) { case StackItemType.Array: @@ -144,27 +143,27 @@ export const stackItemToJSON = (item: StackItem, context?: Set): JSON } arrayContext.add(array); - return { type, value: array.array.map((subItem) => stackItemToJSON(subItem, arrayContext)) }; + return { type: 'Array', value: array.array.map((subItem) => stackItemToJSON(subItem, arrayContext)) }; case StackItemType.Boolean: const booleanItem = assertBooleanStackItem(item); - return { type, value: booleanItem.getBoolean() }; + return { type: 'Boolean', value: booleanItem.getBoolean() }; case StackItemType.Buffer: const buffer = assertBufferStackItem(item); - return { type, value: JSONHelper.writeBuffer(buffer.getBuffer()) }; + return { type: 'Buffer', value: JSONHelper.writeBuffer(buffer.getBuffer()) }; case StackItemType.ByteString: const byteString = assertByteStringStackItem(item); - return { type, value: JSONHelper.writeBuffer(byteString.getBuffer()) }; + return { type: 'ByteString', value: JSONHelper.writeBuffer(byteString.getBuffer()) }; case StackItemType.Integer: const integer = assertIntegerStackItem(item); - return { type, value: integer.getInteger().toString() }; + return { type: 'Integer', value: integer.getInteger().toString() }; case StackItemType.Map: const map = assertMapStackItem(item); @@ -175,9 +174,9 @@ export const stackItemToJSON = (item: StackItem, context?: Set): JSON mapContext.add(map); return { - type, + type: 'Map', value: Array.from(map.dictionary.entries()).map(([key, value]) => ({ - key: stackItemToJSON(key, mapContext), + key: stackItemToJSON(key, mapContext) as PrimitiveStackItemJSON, value: stackItemToJSON(value, mapContext), })), }; @@ -185,7 +184,7 @@ export const stackItemToJSON = (item: StackItem, context?: Set): JSON case StackItemType.Pointer: const pointer = assertPointerStackItem(item); - return { type, value: pointer.position }; + return { type: 'Pointer', value: pointer.position }; default: throw new InvalidFormatError(`didn't expect stack item of type: ${type} on return`); diff --git a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts index a906375292..0157230aca 100644 --- a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts @@ -1,6 +1,7 @@ import { BinaryWriter, common, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; import _ from 'lodash'; +import { ConsensusContext } from '../../ConsensusContext'; import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; import { BinaryReader } from '../../utils'; import { Witness } from '../../Witness'; @@ -128,6 +129,7 @@ export class RecoveryConsensusMessage extends ConsensusMessageBase { consensusMessage: new ChangeViewConsensusMessage({ viewNumber: item.originalViewNumber, timestamp: item.timestamp, + reason, }), witness: new Witness({ invocation: item.invocationScript, diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 1722f41a81..9ae4d37cda 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -134,7 +134,7 @@ export class Transaction const { reader } = options; const count = reader.readVarUIntLE(new BN(maxCount)).toNumber(); if (count === 0) { - throw new InvalidFormatError(`expected signer count > 0, found: ${count}`); + throw new InvalidFormatError(`Expected signer count > 0, found: ${count}`); } const signerSet = new Set(); 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..b846b4cacc --- /dev/null +++ b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts @@ -0,0 +1,137 @@ +import { InvalidFormatError } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { + ArrayStackItem, + assertPrimitiveStackItem, + 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)))); + 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: + const arrayCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: arrayCount })); + undeserialized += arrayCount; + break; + + case StackItemType.Struct: + const structCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: structCount })); + undeserialized += structCount; + break; + + case StackItemType.Map: + const mapCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.push(new ContainerPlaceholder({ type, elementCount: mapCount })); + undeserialized += mapCount * 2; + break; + + default: + throw new InvalidFormatError(`Invalid StackItemType, found: ${type}`); + } + } + + let stackTemp: StackItem[] = []; + while (deserialized.length > 0) { + const item = deserialized.pop(); + 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); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.push(new ArrayStackItem(arrayElements)); + break; + + case StackItemType.Struct: + const structElements = stackTemp.slice(0, item.elementCount); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.push(new StructStackItem(structElements)); + break; + + case StackItemType.Map: + const mapElements = stackTemp.slice(0, item.elementCount * 2); + stackTemp = stackTemp.slice(item.elementCount * 2); + stackTemp.push( + 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.push(item); + } + } + + return 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..84eff6f7fc 100644 --- a/packages/neo-one-node-core/src/utils/index.ts +++ b/packages/neo-one-node-core/src/utils/index.ts @@ -1,2 +1,4 @@ export * from './BinaryReader'; +export * from './deserializeStackItem'; export * from './utils'; +export * from './notificationToJSON'; diff --git a/packages/neo-one-node-core/src/utils/notificationToJSON.ts b/packages/neo-one-node-core/src/utils/notificationToJSON.ts new file mode 100644 index 0000000000..c775ec5e53 --- /dev/null +++ b/packages/neo-one-node-core/src/utils/notificationToJSON.ts @@ -0,0 +1,14 @@ +import { common, NotificationJSON } from '@neo-one/client-common'; +import { Notification } from '../Notification'; +// import { deserializeScriptContainer, DeserializeWireContext } from '../Serializable'; +import { stackItemToJSON } from '../StackItems'; + +export const notificationToJSON = (notification: Notification): NotificationJSON => ({ + // scriptcontainer: { + // type: notification.scriptContainer.type, + // container: deserializeScriptContainer(notification.scriptContainer, context), + // }, + scripthash: common.uInt160ToString(notification.scriptHash), + eventname: notification.eventName, + state: notification.state.map((s) => stackItemToJSON(s, undefined)), +}); diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index 7ec2847221..5324c96e7a 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -3,24 +3,10 @@ import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { randomBytes } from 'crypto'; import _ from 'lodash'; -import { - ArrayStackItem, - assertPrimitiveStackItem, - assertStackItem, - assertStackItemType, - BooleanStackItem, - BufferStackItem, - ByteStringStackItem, - IntegerStackItem, - MapStackItem, - NullStackItem, - PrimitiveStackItem, - StackItem, - StackItemType, - StructStackItem, -} from '../StackItems'; +import { StackItem } from '../StackItems'; import { StorageItem } from '../StorageItem'; import { BinaryReader } from './BinaryReader'; +import { deserializeStackItem } from './deserializeStackItem'; const toASCII = (bytes: Buffer) => { let result = ''; @@ -216,127 +202,14 @@ const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: stri throw new InvalidFormatError(); }; -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; - const getInteroperable = (item: StorageItem, fromStackItem: (item: StackItem) => T): T => { const buffer = item.value; const reader = new BinaryReader(buffer); - const deserializedStackItem = deserialize(reader, 16, 34); + const deserializedStackItem = deserializeStackItem(reader, 16, 34); return fromStackItem(deserializedStackItem); }; -// tslint:disable: no-array-mutation no-loop-statement increment-decrement -const deserialize = (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)))); - 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 - const getSerializableArray = ( value: Buffer, readValue: (reader: BinaryReader) => T, diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index 3265991530..e80fdfe9e0 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -18,6 +18,7 @@ "@neo-one/http-context": "^2.7.0", "@neo-one/logger": "^2.6.1", "@neo-one/node-core": "^2.7.0", + "@neo-one/node-native": "^2.7.0", "@neo-one/node-rpc-handler": "^2.7.0", "@neo-one/utils": "^2.6.1", "@types/koa": "^2.0.49", diff --git a/packages/neo-one-node-neo-settings/src/serde.ts b/packages/neo-one-node-neo-settings/src/serde.ts index b4dd1153db..14309d498c 100644 --- a/packages/neo-one-node-neo-settings/src/serde.ts +++ b/packages/neo-one-node-neo-settings/src/serde.ts @@ -1,32 +1,40 @@ import { common } from '@neo-one/client-common'; import { Block, Settings } from '@neo-one/node-core'; -import _ from 'lodash'; export const serializeSettings = (settings: Settings) => { const { genesisBlock, decrementInterval, generationAmount, - messageMagic, - addressVersion, privateKeyVersion, standbyValidators, + messageMagic, + addressVersion, + standbyCommittee, + committeeMembersCount, + validatorsCount, millisecondsPerBlock, memoryPoolMaxTransactions, - standbyCommittee, } = settings; return { genesisBlock: genesisBlock.serializeWire().toString('hex'), decrementInterval, generationAmount, - messageMagic, - addressVersion, + // fees: _.fromPairs( + // Object.entries(fees).map(([key, fee]) => [key, fee === undefined ? JSON.stringify(undefined) : fee.toString(10)]), + // ), privateKeyVersion, standbyValidators: standbyValidators.map((validator) => common.ecPointToString(validator)), + standbyCommittee: standbyCommittee.map((validator) => common.ecPointToString(validator)), + committeeMembersCount, + validatorsCount, + // registerValidatorFee: registerValidatorFee.toString(10), + messageMagic, + addressVersion, + // vm, millisecondsPerBlock, memoryPoolMaxTransactions, - standbyCommittee: standbyCommittee.map((validator) => common.ecPointToString(validator)), }; }; @@ -36,15 +44,15 @@ export const deserializeSettings = (settings: any): Settings => { genesisBlock, decrementInterval, generationAmount, - messageMagic, - addressVersion, privateKeyVersion, standbyValidators, - millisecondsPerBlock, - memoryPoolMaxTransactions, + messageMagic, + addressVersion, standbyCommittee, - validatorsCount, committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, } = settings; const context = { messageMagic }; @@ -53,14 +61,19 @@ export const deserializeSettings = (settings: any): Settings => { genesisBlock: Block.deserializeWire({ context, buffer: Buffer.from(genesisBlock, 'hex') }), 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)), - millisecondsPerBlock, - memoryPoolMaxTransactions, standbyCommittee: standbyCommittee.map((validator: string) => common.stringToECPoint(validator)), committeeMembersCount, validatorsCount, + // vm, + millisecondsPerBlock, + memoryPoolMaxTransactions, }; }; diff --git a/packages/neo-one-node-offline/src/index.ts b/packages/neo-one-node-offline/src/index.ts index 0c30ece5cb..7f590c5ca0 100644 --- a/packages/neo-one-node-offline/src/index.ts +++ b/packages/neo-one-node-offline/src/index.ts @@ -177,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) { @@ -232,7 +232,7 @@ 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 blocks = await Promise.all(chunk.map(async (index) => blockchain.blocks.get({ hashOrIndex: index }))); // tslint:disable-next-line no-loop-statement for (const block of blocks) { diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index a52556945c..ca43867e34 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -19,8 +19,9 @@ import { Nep5Transfer, Nep5TransferKey, Node, - RelayTransactionResult, + notificationToJSON, Signers, + StackItem, stackItemToJSON, StorageKey, Transaction, @@ -279,20 +280,22 @@ export const createHandler = ({ const result = blockchain.invokeScript(script, signers); try { - const stack = result.stack.map((item) => stackItemToJSON(item, undefined)); + const stack = result.stack.map((item: StackItem) => stackItemToJSON(item, undefined)); return { script: script.toString('hex'), state: toVMStateJSON(result.state), stack, - gasConsumed: result.gasConsumed.toString(), + gasconsumed: result.gasConsumed, + notifications: result.notifications.map(notificationToJSON), }; } catch { return { script: script.toString('hex'), state: toVMStateJSON(result.state), stack: 'error: recursive reference', - gasConsumed: result.gasConsumed.toString(), + gasconsumed: result.gasConsumed, + notifications: result.notifications.map(notificationToJSON), }; } }; @@ -677,41 +680,38 @@ export const createHandler = ({ }, // Settings - // [RPC_METHODS.updatesettings]: async (args) => { - // const { settings } = blockchain; - // const newSettings = { - // ...settings, - // secondsPerBlock: args[0].secondsPerBlock, - // }; - - // TODO: implement this - // blockchain.updateSettings(newSettings); - - // return true; - // }, - // [RPC_METHODS.getsettings]: async () => ({ - // millisecondsPerBlock: blockchain.settings.millisecondsPerBlock, - // }), + [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 - // TODO: I think we can get away with not using this but we need to make the change in the provider - // [RPC_METHODS.testinvocation]: async (args) => { - // const transaction = Transaction.deserializeWire({ - // context: blockchain.deserializeWireContext, - // buffer: JSONHelper.readBuffer(args[0]), - // }); - - // try { - // const receipt = blockchain.invokeTransaction(transaction); - - // return { - // result: receipt.result.serializeJSON(blockchain.serializeJSONContext), - // actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), - // }; - // } catch { - // throw new JSONRPCError(-103, 'Invalid Transaction'); - // } - // }, + [RPC_METHODS.testinvocation]: async (args) => { + const script = JSONHelper.readBuffer(args[0]); + + try { + const receipt = blockchain.invokeTransaction({ script }, 1000000); + + return { + script, + state: toVMStateJSON(receipt.state), + stack: receipt.stack.map((item) => stackItemToJSON(item, undefined)), + gasconsumed: receipt.gasConsumed, + notifications: receipt.notifications.map(notificationToJSON), + }; + } catch { + throw new JSONRPCError(-103, 'Invalid Transaction'); + } + }, [RPC_METHODS.relaytransaction]: async (args): Promise => { const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, @@ -719,10 +719,8 @@ export const createHandler = ({ }); try { - const [transactionJSON, result] = await Promise.all([ - transaction.serializeJSON(), - node.relayTransaction(transaction, { forceAdd: true, throwVerifyError: true }), - ]); + const transactionJSON = transaction.serializeJSON(); + const result = await node.relayTransaction(transaction, { forceAdd: true, throwVerifyError: true }); const resultJSON = result.verifyResult !== undefined ? toJSONVerifyResult(result.verifyResult) : undefined; @@ -742,6 +740,7 @@ export const createHandler = ({ // }, // }; + // TODO: client expects more information than this return { transaction: transactionJSON, verifyResult: resultJSON, @@ -810,7 +809,7 @@ export const createHandler = ({ return result; }, - [RPC_METHODS.getinvocationdata]: async () => { + [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` @@ -822,19 +821,35 @@ export const createHandler = ({ // return result.data; }, - // TODO: reimplement this; - [RPC_METHODS.getnetworksettings]: async () => ({ - maxTransactionPerBlock: 512, - blockAccounts: [], - maxBlockSize: 1024 * 256, - maxBlockSystemFee: '', - neoVotersCount: 0, - neoNextBlockValidators: [], - neoCandidates: [], - neoCommitteeMembers: [], - neoCommitteeAddress: '', - neoTotalSupply: 100000000, - }), + [RPC_METHODS.getnetworksettings]: async () => { + const { + decrementInterval, + generationAmount, + privateKeyVersion, + standbyValidators, + messageMagic, + addressVersion, + standbyCommittee, + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, + } = blockchain.settings; + + return { + decrementinterval: decrementInterval, + generationamount: generationAmount, + privatekeyversion: privateKeyVersion, + standbydalidators: 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.runconsensusnow]: async () => { if (node.consensus) { await node.consensus.runConsensusNow(); From 1f7b9bc278a29ae0d372e8cde9d2424fc6faed47 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 19 Oct 2020 16:56:07 -0700 Subject: [PATCH 113/141] commit checkin before preview3.0.0-alpha --- README.md | 4 +++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ++++++++ packages/neo-one-node-offline/src/index.ts | 5 ++-- packages/neo-one-node-vm/.npmignore | 3 +- packages/neo-one-node-vm/package.json | 1 + .../src/Methods/EngineMethods.ts | 4 +-- rush.json | 28 +++++++++---------- 33 files changed, 323 insertions(+), 19 deletions(-) create mode 100644 common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json create mode 100644 common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json diff --git a/README.md b/README.md index f36b57d6f3..847a92229f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ 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) diff --git a/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..b07d11ab89 --- /dev/null +++ b/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/cli-common" + } + ], + "packageName": "@neo-one/cli-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..6e2fc7a406 --- /dev/null +++ b/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..80238f36c5 --- /dev/null +++ b/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..0557afdd88 --- /dev/null +++ b/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..665c1c275d --- /dev/null +++ b/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client-full-common" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..5b8d36dacc --- /dev/null +++ b/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client-full-core" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..5060e548bb --- /dev/null +++ b/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client-switch" + } + ], + "packageName": "@neo-one/client-switch", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..d27f171148 --- /dev/null +++ b/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/client" + } + ], + "packageName": "@neo-one/client", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..73bbfac292 --- /dev/null +++ b/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/developer-tools" + } + ], + "packageName": "@neo-one/developer-tools", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..d816abf489 --- /dev/null +++ b/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-bin" + } + ], + "packageName": "@neo-one/node-bin", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..bb80727734 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..0b98174fbb --- /dev/null +++ b/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..2ae6aceeb0 --- /dev/null +++ b/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-http-rpc" + } + ], + "packageName": "@neo-one/node-http-rpc", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..e3ff6091d6 --- /dev/null +++ b/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-native" + } + ], + "packageName": "@neo-one/node-native", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..7992bedfca --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-neo-settings" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..87d3fc9dca --- /dev/null +++ b/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-network" + } + ], + "packageName": "@neo-one/node-network", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..f222b91c51 --- /dev/null +++ b/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-offline" + } + ], + "packageName": "@neo-one/node-offline", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..28d0198013 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..b8b851891f --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..16e6f295c4 --- /dev/null +++ b/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-storage-cache" + } + ], + "packageName": "@neo-one/node-storage-cache", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..bfedfa2571 --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-storage-common" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..eee40e7669 --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-storage-levelup" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..7e3561b7e3 --- /dev/null +++ b/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node-vm" + } + ], + "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.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..e0fa2395e7 --- /dev/null +++ b/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..ff6b18a588 --- /dev/null +++ b/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/react-common" + } + ], + "packageName": "@neo-one/react-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..066efdcddc --- /dev/null +++ b/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "none", + "packageName": "@neo-one/smart-contract-compiler" + } + ], + "packageName": "@neo-one/smart-contract-compiler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json new file mode 100644 index 0000000000..807f19689b --- /dev/null +++ b/common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3-alpha release bump", + "type": "major", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/packages/neo-one-node-offline/src/index.ts b/packages/neo-one-node-offline/src/index.ts index 7f590c5ca0..82555ef7e4 100644 --- a/packages/neo-one-node-offline/src/index.ts +++ b/packages/neo-one-node-offline/src/index.ts @@ -232,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.blocks.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); diff --git a/packages/neo-one-node-vm/.npmignore b/packages/neo-one-node-vm/.npmignore index 0138aa2098..758d82503c 100644 --- a/packages/neo-one-node-vm/.npmignore +++ b/packages/neo-one-node-vm/.npmignore @@ -1,10 +1,11 @@ # 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 diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 08dcc04cad..000c3cfd38 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -6,6 +6,7 @@ "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" diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 656170970f..9b17e08e20 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,6 +1,6 @@ import { VMState } from '@neo-one/client-common'; import { CallFlags, SerializedScriptContainer, SnapshotName, TriggerType } from '@neo-one/node-core'; -import { NotificationReturn, StackItemReturn } from '../converters'; +import { StackItemReturn } from '../converters'; import { DefaultMethods, DispatchMethod } from '../types'; interface CreateEngineArgs { @@ -19,7 +19,7 @@ export interface EngineMethods extends DefaultMethods { readonly getgasconsumed: DispatchMethod; readonly getvmstate: DispatchMethod; readonly getresultstack: DispatchMethod; - readonly getnotifications: DispatchMethod; + readonly getnotifications: DispatchMethod; // methods readonly execute: DispatchMethod; readonly setinstructionpointer: DispatchMethod; diff --git a/rush.json b/rush.json index a99907c459..7da95c177a 100644 --- a/rush.json +++ b/rush.json @@ -40,21 +40,21 @@ "packageName": "@neo-one/cli", "projectFolder": "packages/neo-one-cli", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common", "projectFolder": "packages/neo-one-cli-common", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common-node", "projectFolder": "packages/neo-one-cli-common-node", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { @@ -110,7 +110,7 @@ "packageName": "@neo-one/developer-tools", "projectFolder": "packages/neo-one-developer-tools", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { @@ -267,7 +267,7 @@ "packageName": "@neo-one/node-storage-cache", "projectFolder": "packages/neo-one-node-storage-cache", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "NodeReleasePolicy" }, { @@ -321,42 +321,42 @@ "packageName": "@neo-one/smart-contract", "projectFolder": "packages/neo-one-smart-contract", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-codegen", "projectFolder": "packages/neo-one-smart-contract-codegen", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-compiler", "projectFolder": "packages/neo-one-smart-contract-compiler", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-compiler-node", "projectFolder": "packages/neo-one-smart-contract-compiler-node", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-lib", "projectFolder": "packages/neo-one-smart-contract-lib", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-test", "projectFolder": "packages/neo-one-smart-contract-test", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { @@ -368,21 +368,21 @@ "packageName": "@neo-one/smart-contract-test-common", "projectFolder": "packages/neo-one-smart-contract-test-common", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/smart-contract-typescript-plugin", "projectFolder": "packages/neo-one-smart-contract-typescript-plugin", "reviewCategory": "production", - "shouldPublish": true, + "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/suite", "projectFolder": "packages/neo-one-suite", "reviewCategory": "production", - "shouldPublish": true + "shouldPublish": false }, { "packageName": "@neo-one/ts-utils", From df69a588b095f9de41aeb97d2d1cd8e052e2543d Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 19 Oct 2020 16:59:11 -0700 Subject: [PATCH 114/141] fix(all): fix changelog commit type --- .../cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../client-common/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../client-core/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-core/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-native/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-network/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../react-common/3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 4 ++-- 26 files changed, 52 insertions(+), 52 deletions(-) diff --git a/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json index b07d11ab89..2d8f90515b 100644 --- a/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/cli-common" } ], "packageName": "@neo-one/cli-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json index 6e2fc7a406..18df0fccc1 100644 --- a/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/cli" } ], "packageName": "@neo-one/cli", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json index 80238f36c5..c2f6bb622d 100644 --- a/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client-common" } ], "packageName": "@neo-one/client-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json index 0557afdd88..9b0da08e53 100644 --- a/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client-core" } ], "packageName": "@neo-one/client-core", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json index 665c1c275d..ac26794e9f 100644 --- a/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client-full-common" } ], "packageName": "@neo-one/client-full-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json index 5b8d36dacc..a6f2a351d3 100644 --- a/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client-full-core" } ], "packageName": "@neo-one/client-full-core", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json index 5060e548bb..95fe1a9177 100644 --- a/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client-switch" } ], "packageName": "@neo-one/client-switch", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json index d27f171148..a796439bd3 100644 --- a/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/client" } ], "packageName": "@neo-one/client", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json index 73bbfac292..5ac7682875 100644 --- a/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/developer-tools" } ], "packageName": "@neo-one/developer-tools", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json index d816abf489..bca9be4f55 100644 --- a/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-bin" } ], "packageName": "@neo-one/node-bin", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json index bb80727734..f8f8a8b1db 100644 --- a/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-blockchain" } ], "packageName": "@neo-one/node-blockchain", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json index 0b98174fbb..ccfca538d1 100644 --- a/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-core" } ], "packageName": "@neo-one/node-core", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json index 2ae6aceeb0..843b4f162e 100644 --- a/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-http-rpc" } ], "packageName": "@neo-one/node-http-rpc", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json index e3ff6091d6..a7b1a3d633 100644 --- a/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-native" } ], "packageName": "@neo-one/node-native", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json index 7992bedfca..f148396487 100644 --- a/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-neo-settings" } ], "packageName": "@neo-one/node-neo-settings", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json index 87d3fc9dca..72dff974e4 100644 --- a/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-network" } ], "packageName": "@neo-one/node-network", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json index f222b91c51..6e8e0e4b29 100644 --- a/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-offline" } ], "packageName": "@neo-one/node-offline", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json index 28d0198013..2c12c953aa 100644 --- a/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-protocol" } ], "packageName": "@neo-one/node-protocol", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json index b8b851891f..e93a335e39 100644 --- a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-rpc-handler" } ], "packageName": "@neo-one/node-rpc-handler", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json index 16e6f295c4..bd7b475179 100644 --- a/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-storage-cache" } ], "packageName": "@neo-one/node-storage-cache", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json index bfedfa2571..7b2e8e32ac 100644 --- a/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-storage-common" } ], "packageName": "@neo-one/node-storage-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json index eee40e7669..69c7ca49eb 100644 --- a/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-storage-levelup" } ], "packageName": "@neo-one/node-storage-levelup", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json index 7e3561b7e3..a8732fb7e4 100644 --- a/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node-vm" } ], "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.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json index e0fa2395e7..7407b3c9c0 100644 --- a/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/node" } ], "packageName": "@neo-one/node", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json index ff6b18a588..8409d7a390 100644 --- a/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/react-common" } ], "packageName": "@neo-one/react-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json index 066efdcddc..f98a624869 100644 --- a/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json @@ -2,10 +2,10 @@ "changes": [ { "comment": "3.0.0preview3-alpha release bump", - "type": "none", + "type": "major", "packageName": "@neo-one/smart-contract-compiler" } ], "packageName": "@neo-one/smart-contract-compiler", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} From d1ed9e0afb0ebebac5503357fac1ba70fccd15f1 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 20 Oct 2020 13:30:15 -0700 Subject: [PATCH 115/141] fix(misc): fix overwritten deserializeStackItem, update rpc method / JSONRPCClient return type (#2202) --- .../src/provider/JSONRPCClient.ts | 4 +-- .../src/utils/deserializeStackItem.ts | 32 ++++++++----------- .../src/createHandler.ts | 7 ++-- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 0c168a6042..16b603fc89 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -17,9 +17,9 @@ import { RawInvocationResultJSON, RelayTransactionResultJSON, StorageItemJSON, - TransactionJSON, TransactionReceiptJSON, UnclaimedGASJSON, + VerboseTransactionJSON, VersionJSON, } from '@neo-one/client-common'; import { RelayTransactionError } from '../errors'; @@ -83,7 +83,7 @@ export class JSONRPCClient { 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', diff --git a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts index b846b4cacc..e88165731b 100644 --- a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts +++ b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts @@ -4,6 +4,7 @@ import _ from 'lodash'; import { ArrayStackItem, assertPrimitiveStackItem, + assertStackItem, assertStackItemType, BooleanStackItem, BufferStackItem, @@ -38,7 +39,7 @@ class ContainerPlaceholder { 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 deserialize = (reader: BinaryReader, maxArraySize: number, maxItemSize: number): StackItem => { const deserialized: Array = []; let undeserialized = 1; while (undeserialized-- > 0) { @@ -66,20 +67,15 @@ export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, break; case StackItemType.Array: - const arrayCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: arrayCount })); - undeserialized += arrayCount; - break; - case StackItemType.Struct: const structCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: structCount })); + deserialized.unshift(new ContainerPlaceholder({ type, elementCount: structCount })); undeserialized += structCount; break; case StackItemType.Map: const mapCount = reader.readVarUIntLE(maxArraySize).toNumber(); - deserialized.push(new ContainerPlaceholder({ type, elementCount: mapCount })); + deserialized.unshift(new ContainerPlaceholder({ type, elementCount: mapCount })); undeserialized += mapCount * 2; break; @@ -88,9 +84,9 @@ export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, } } - let stackTemp: StackItem[] = []; + let stackTemp: Array = []; while (deserialized.length > 0) { - const item = deserialized.pop(); + const item = deserialized.shift(); if (item === undefined) { throw new Error('Unexpected undefined since deserialized.length > 0'); } @@ -98,21 +94,21 @@ export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, if (isContainerPlaceholder(item)) { switch (item.type) { case StackItemType.Array: - const arrayElements = stackTemp.slice(0, item.elementCount); + const arrayElements = stackTemp.slice(0, item.elementCount).map(assertStackItem); stackTemp = stackTemp.slice(item.elementCount); - stackTemp.push(new ArrayStackItem(arrayElements)); + stackTemp.unshift(new ArrayStackItem(arrayElements)); break; case StackItemType.Struct: - const structElements = stackTemp.slice(0, item.elementCount); + const structElements = stackTemp.slice(0, item.elementCount).map(assertStackItem); stackTemp = stackTemp.slice(item.elementCount); - stackTemp.push(new StructStackItem(structElements)); + stackTemp.unshift(new StructStackItem(structElements)); break; case StackItemType.Map: - const mapElements = stackTemp.slice(0, item.elementCount * 2); + const mapElements = stackTemp.slice(0, item.elementCount * 2).map(assertStackItem); stackTemp = stackTemp.slice(item.elementCount * 2); - stackTemp.push( + stackTemp.unshift( new MapStackItem( _.range(0, item.elementCount * 2, 2).reduce((acc, idx) => { const key = assertPrimitiveStackItem(mapElements[idx]); @@ -128,10 +124,10 @@ export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, throw new InvalidFormatError(`Invalid ContainerPlaceholder type, found: ${item.type}`); } } else { - stackTemp.push(item); + stackTemp.unshift(item); } } - return stackTemp[0]; + return assertStackItem(stackTemp[0]); }; // tslint:enable: no-array-mutation no-loop-statement increment-decrement diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index ca43867e34..41308f2e89 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -535,7 +535,10 @@ export const createHandler = ({ }, [RPC_METHODS.getunclaimedgas]: async (args) => { const address = args[0]; - const scriptHash = crypto.addressToScriptHash(address); + if (typeof address !== 'string') { + throw new JSONRPCError(-100, 'Invalid argument at position 0'); + } + const scriptHash = crypto.addressToScriptHash({ address, addressVersion: common.NEO_ADDRESS_VERSION }); const isValidAddress = common.isUInt160(scriptHash); if (!isValidAddress) { throw new JSONRPCError(-100, 'Invalid address'); @@ -543,7 +546,7 @@ export const createHandler = ({ const unclaimed = await native.NEO.unclaimedGas( { storages: blockchain.storages }, - address, + scriptHash, blockchain.currentBlockIndex + 1, ); From 686cba3bcee4c5dc9c8dec351c655f553deeff42 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 20 Oct 2020 13:37:13 -0700 Subject: [PATCH 116/141] fix(node): export deserializeStackItem (woops) (#2203) --- packages/neo-one-node-core/src/utils/deserializeStackItem.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts index e88165731b..63f3213f7d 100644 --- a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts +++ b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts @@ -39,7 +39,7 @@ class ContainerPlaceholder { const isContainerPlaceholder = (item: any): item is ContainerPlaceholder => item.isContainerPlaceHolder === true; // tslint:disable: no-array-mutation no-loop-statement increment-decrement -const deserialize = (reader: BinaryReader, maxArraySize: number, maxItemSize: number): StackItem => { +export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, maxItemSize: number): StackItem => { const deserialized: Array = []; let undeserialized = 1; while (undeserialized-- > 0) { From 9288491ea5e818c75687b74a8f0fa7fe048331fd Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 20 Oct 2020 15:15:07 -0700 Subject: [PATCH 117/141] fix(bugs): fix handful of bugs and type errors (#2205) --- packages/neo-one-client-common/src/models/types.ts | 7 ++++++- packages/neo-one-client-common/src/types.ts | 4 ++-- packages/neo-one-client-core/src/provider/JSONRPCClient.ts | 4 ++-- .../neo-one-client-core/src/provider/NEOONEDataProvider.ts | 2 +- packages/neo-one-client-full-core/src/ReadClient.ts | 2 +- packages/neo-one-client-full-core/src/types.ts | 2 +- packages/neo-one-node-rpc-handler/src/createHandler.ts | 2 +- 7 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 360a355560..de152aa3ab 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -121,8 +121,9 @@ export interface RawInvocationResultErrorJSON { export interface RawInvocationResultSuccessJSON { readonly state: 'HALT'; - readonly gas_consumed: string; + readonly gasconsumed: string; readonly stack: readonly ContractParameterJSON[]; + readonly notifications: readonly NotificationJSON[]; } export type RawInvocationResultJSON = RawInvocationResultSuccessJSON | RawInvocationResultErrorJSON; @@ -327,6 +328,10 @@ export interface TransactionJSON { readonly script: string; readonly witnesses: readonly WitnessJSON[]; readonly receipt?: TransactionReceiptJSON; + readonly blockhash: string; + readonly confirmations: number; + readonly blocktime: string; + readonly vmstate: string; } // Just for Neo returns, don't think we need it for anything diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 25f397698a..aa107eaec8 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -140,7 +140,7 @@ export interface Transaction { */ readonly nonce: number; /** - * Hash160 of the transaction sender. + * `Hash160` of the transaction sender. */ readonly sender?: AddressString; /** @@ -622,7 +622,7 @@ export interface PrivateNetworkSettings { /** * Time until the next block starts to be produced. */ - readonly secondsPerBlock: number; + readonly millisecondsPerBlock: number; } /** diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 16b603fc89..43132575bf 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -79,7 +79,7 @@ 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' })); } @@ -188,7 +188,7 @@ export class JSONRPCClient { ); } - public async getBlockHash(index: number): Promise { + public async getBlockHash(index: number): Promise { return this.withInstance(async (provider) => provider.request({ method: 'getblockhash', diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index c1b5ff5565..10b1f87090 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -187,7 +187,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(); } diff --git a/packages/neo-one-client-full-core/src/ReadClient.ts b/packages/neo-one-client-full-core/src/ReadClient.ts index 2b42553bbc..b0d332733f 100644 --- a/packages/neo-one-client-full-core/src/ReadClient.ts +++ b/packages/neo-one-client-full-core/src/ReadClient.ts @@ -49,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(); } diff --git a/packages/neo-one-client-full-core/src/types.ts b/packages/neo-one-client-full-core/src/types.ts index cd4ca374ab..7439687986 100644 --- a/packages/neo-one-client-full-core/src/types.ts +++ b/packages/neo-one-client-full-core/src/types.ts @@ -58,7 +58,7 @@ export interface DataProvider { 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 getConnectedPeers: () => Promise; } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 41308f2e89..1d1288f88e 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -551,7 +551,7 @@ export const createHandler = ({ ); return { - unclaimed, + unclaimed: unclaimed.toString(), address: JSONHelper.writeUInt160(address), }; }, From cef67b890bd3967e5a1bf06e1bfa0dec6d8d6a35 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 20 Oct 2020 15:58:10 -0700 Subject: [PATCH 118/141] fix(changelog): update changelogs since last release --- .../3.0.0preview3.1_2020-10-20-22-57.json | 11 +++++++++++ .../client-core/3.0.0preview3.1_2020-10-20-22-57.json | 11 +++++++++++ .../3.0.0preview3.1_2020-10-20-22-57.json | 11 +++++++++++ .../node-core/3.0.0preview3.1_2020-10-20-22-57.json | 11 +++++++++++ .../3.0.0preview3.1_2020-10-20-22-57.json | 11 +++++++++++ 5 files changed, 55 insertions(+) create mode 100644 common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json create mode 100644 common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json create mode 100644 common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json create mode 100644 common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json create mode 100644 common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json diff --git a/common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json new file mode 100644 index 0000000000..12372b9373 --- /dev/null +++ b/common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3.1 release bump", + "type": "none", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json new file mode 100644 index 0000000000..9b1bf543e3 --- /dev/null +++ b/common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3.1 release bump", + "type": "none", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json new file mode 100644 index 0000000000..b363b4b869 --- /dev/null +++ b/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3.1 release bump", + "type": "none", + "packageName": "@neo-one/client-full-core" + } + ], + "packageName": "@neo-one/client-full-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json new file mode 100644 index 0000000000..0a10c39dec --- /dev/null +++ b/common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3.1 release bump", + "type": "none", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json new file mode 100644 index 0000000000..538549b5f8 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.0preview3.1 release bump", + "type": "none", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file From f3e9e027c4a32a2c253cfc92aa587f48f0c02819 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 22 Oct 2020 12:49:26 -0700 Subject: [PATCH 119/141] feat(suite): remove neo-one-suite (#2209) --- common/config/rush/yarn.lock | 13 ++- packages/neo-one-suite/.npmignore | 22 ---- packages/neo-one-suite/CHANGELOG.json | 106 ------------------ packages/neo-one-suite/CHANGELOG.md | 25 ----- packages/neo-one-suite/gulpfile.js | 5 - packages/neo-one-suite/package.json | 24 ---- .../0-installation/1-environment-setup.md | 12 +- .../docs/2-advanced-guides/06-angular.md | 2 +- .../4-contributing/1-codebase-overview.md | 6 - packages/neo-one-website/tutorial/tutorial.md | 12 +- rush.json | 18 ++- 11 files changed, 20 insertions(+), 225 deletions(-) delete mode 100644 packages/neo-one-suite/.npmignore delete mode 100644 packages/neo-one-suite/CHANGELOG.json delete mode 100644 packages/neo-one-suite/CHANGELOG.md delete mode 100644 packages/neo-one-suite/gulpfile.js delete mode 100644 packages/neo-one-suite/package.json diff --git a/common/config/rush/yarn.lock b/common/config/rush/yarn.lock index f4b4e3fed0..306650dcdd 100644 --- a/common/config/rush/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2504,12 +2504,14 @@ "@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" @@ -2637,6 +2639,7 @@ "@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" @@ -2652,6 +2655,8 @@ 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" @@ -2683,6 +2688,8 @@ "@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" @@ -2880,12 +2887,6 @@ version "0.0.0" resolved "file:./projects/smart-contract.tgz" -"@rush-temp/suite@file:./projects/suite.tgz": - version "0.0.0" - resolved "file:./projects/suite.tgz" - dependencies: - gulp "~4.0.2" - "@rush-temp/ts-utils@file:./projects/ts-utils.tgz": version "0.0.0" resolved "file:./projects/ts-utils.tgz" diff --git a/packages/neo-one-suite/.npmignore b/packages/neo-one-suite/.npmignore deleted file mode 100644 index 0138aa2098..0000000000 --- a/packages/neo-one-suite/.npmignore +++ /dev/null @@ -1,22 +0,0 @@ - -# 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-suite/CHANGELOG.json b/packages/neo-one-suite/CHANGELOG.json deleted file mode 100644 index 147d3eedd7..0000000000 --- a/packages/neo-one-suite/CHANGELOG.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "name": "@neo-one/suite", - "entries": [ - { - "version": "2.6.1", - "tag": "@neo-one/suite_v2.6.1", - "date": "Thu, 23 Jul 2020 22:11:12 GMT", - "comments": { - "dependency": [ - { - "comment": "Dependency @neo-one/cli version bump from ^2.6.0 to ^2.7.0." - }, - { - "comment": "Dependency @neo-one/client version bump from ^2.6.0 to ^2.7.0." - }, - { - "comment": "Dependency @neo-one/smart-contract version bump from ^2.6.0 to ^2.7.0." - }, - { - "comment": "Dependency @neo-one/smart-contract-lib version bump from ^2.6.0 to ^2.7.0." - }, - { - "comment": "Dependency @neo-one/smart-contract-test version bump from ^2.6.0 to ^2.7.0." - }, - { - "comment": "Dependency @neo-one/smart-contract-typescript-plugin version bump from ^2.6.0 to ^2.7.0." - } - ], - "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/suite_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\" 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/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/smart-contract-test\" from `^2.4.0` to `^2.5.0`" - }, - { - "comment": "Updating dependency \"@neo-one/smart-contract-typescript-plugin\" from `^2.4.0` to `^2.5.0`" - } - ] - } - }, - { - "version": "2.4.0", - "tag": "@neo-one/suite_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\" 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/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/smart-contract-test\" from `^2.3.1` to `^2.4.0`" - }, - { - "comment": "Updating dependency \"@neo-one/smart-contract-typescript-plugin\" from `^2.3.0` to `^2.4.0`" - } - ] - } - } - ] -} diff --git a/packages/neo-one-suite/CHANGELOG.md b/packages/neo-one-suite/CHANGELOG.md deleted file mode 100644 index 756af25a3b..0000000000 --- a/packages/neo-one-suite/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -# Change Log - @neo-one/suite - -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. - -## 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 - -### 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 - -- Migrate to Rush - diff --git a/packages/neo-one-suite/gulpfile.js b/packages/neo-one-suite/gulpfile.js deleted file mode 100644 index 6267e6b0d6..0000000000 --- a/packages/neo-one-suite/gulpfile.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const build = require('@neo-one/build-tools'); - -build.initialize(); diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json deleted file mode 100644 index 643b90814d..0000000000 --- a/packages/neo-one-suite/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@neo-one/suite", - "version": "2.6.1", - "description": "NEO•ONE core dependencies for easy installation", - "scripts": { - "build": "", - "lint": "", - "lint:staged": "", - "pack": "gulp pack" - }, - "sideEffects": false, - "dependencies": { - "@neo-one/cli": "^2.7.0", - "@neo-one/client": "^2.7.0", - "@neo-one/smart-contract": "^2.7.0", - "@neo-one/smart-contract-lib": "^2.7.0", - "@neo-one/smart-contract-test": "^2.7.0", - "@neo-one/smart-contract-typescript-plugin": "^2.7.0" - }, - "devDependencies": { - "@neo-one/build-tools": "^1.0.0", - "gulp": "~4.0.2" - } -} 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/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/4-contributing/1-codebase-overview.md b/packages/neo-one-website/docs/4-contributing/1-codebase-overview.md index 2457094bb4..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 @@ -255,12 +255,6 @@ Provides the interface for controlling a private development network. Creates the developer tools iframe for controlling a private network. -### neo-one-suite - -A simple user-friendly package that downloads `@neo-one/cli`, `@neo-one/client`, `@neo-one/smart-contract`, -`@neo-one/smart-contract-lib`, `@neo-one/smart-contract-test`, `@neo-one/smart-contract-typescript-plugin` -for easy startup. - ### neo-one-ts-utils Primarily exports TypeScript compiler API helper functions for use in build tools, the compiler, and more. diff --git a/packages/neo-one-website/tutorial/tutorial.md b/packages/neo-one-website/tutorial/tutorial.md index 1eac456188..a30b5b2475 100644 --- a/packages/neo-one-website/tutorial/tutorial.md +++ b/packages/neo-one-website/tutorial/tutorial.md @@ -62,21 +62,11 @@ 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 ``` diff --git a/rush.json b/rush.json index 7da95c177a..5f63a97b7c 100644 --- a/rush.json +++ b/rush.json @@ -5,15 +5,19 @@ "nodeSupportedVersionRange": ">=10.13.0 <=12.18.4", "ensureConsistentVersions": true, "suppressNodeLtsWarning": true, - "approvedPackagesPolicy": { - "reviewCategories": ["production", "tools", "web"], - "ignoredNpmScopes": ["@types"] + "reviewCategories": [ + "production", + "tools", + "web" + ], + "ignoredNpmScopes": [ + "@types" + ] }, "repository": { "url": "https://github.com/neo-one-suite/neo-one.git" }, - "eventHooks": { "preRushInstall": [], "postRushInstall": [], @@ -378,12 +382,6 @@ "shouldPublish": false, "versionPolicyName": "CoreReleasePolicy" }, - { - "packageName": "@neo-one/suite", - "projectFolder": "packages/neo-one-suite", - "reviewCategory": "production", - "shouldPublish": false - }, { "packageName": "@neo-one/ts-utils", "projectFolder": "packages/neo-one-ts-utils", From 198bed12e29bde5bc8eb77c6661e3757b3485ea7 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 27 Oct 2020 11:00:26 -0700 Subject: [PATCH 120/141] fix(node): fixup RPC methods (getunclaimed, getnep5transfers, getnep5balances) (#2211) --- .../src/models/nep5/Nep5BalanceKeyModel.ts | 4 +- .../src/models/nep5/Nep5TransferKeyModel.ts | 14 ++-- .../neo-one-node-blockchain/src/Blockchain.ts | 3 +- .../src/getNep5UpdateOptions.ts | 6 +- .../neo-one-node-core/src/Nep5TransferKey.ts | 8 +-- .../src/StackItems/ByteStringStackItem.ts | 2 +- .../src/StackItems/IntegerStackItem.ts | 2 +- .../manifest/ContractPermissionDescriptor.ts | 2 +- .../src/utils/deserializeStackItem.ts | 2 +- packages/neo-one-node-native/src/NEOToken.ts | 6 +- packages/neo-one-node-protocol/src/Node.ts | 11 ++- .../src/createHandler.ts | 70 ++++++++++--------- .../neo-one-node-storage-common/src/keys.ts | 3 +- .../src/converters/stackItems.ts | 2 +- .../src/__tests__/blockchain.test.ts | 44 ++++++++---- 15 files changed, 102 insertions(+), 77 deletions(-) diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts index 732461e464..5d22e82247 100644 --- a/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts +++ b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts @@ -18,7 +18,7 @@ export class Nep5BalanceKeyModel implements SerializableWire { } public serializeWireBase(writer: BinaryWriter): void { - writer.writeVarBytesLE(this.userScriptHash); - writer.writeVarBytesLE(this.assetScriptHash); + writer.writeUInt160(this.userScriptHash); + writer.writeUInt160(this.assetScriptHash); } } diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts index 5a4a0a82ac..fadd3d4bd1 100644 --- a/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts +++ b/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts @@ -7,32 +7,32 @@ export interface Nep5TransferKeyModelAdd { readonly userScriptHash: UInt160; readonly timestampMS: BN; readonly assetScriptHash: UInt160; - readonly blockXferNotificationIndex: number; + readonly blockTransferNotificationIndex: number; } export class Nep5TransferKeyModel implements SerializableWire { public readonly userScriptHash: UInt160; public readonly timestampMS: BN; public readonly assetScriptHash: UInt160; - public readonly blockXferNotificationIndex: number; + public readonly blockTransferNotificationIndex: number; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public constructor({ userScriptHash, timestampMS, assetScriptHash, - blockXferNotificationIndex, + blockTransferNotificationIndex, }: Nep5TransferKeyModelAdd) { this.userScriptHash = userScriptHash; this.timestampMS = timestampMS; this.assetScriptHash = assetScriptHash; - this.blockXferNotificationIndex = blockXferNotificationIndex; + this.blockTransferNotificationIndex = blockTransferNotificationIndex; } public serializeWireBase(writer: BinaryWriter): void { - writer.writeVarBytesLE(this.userScriptHash); + writer.writeUInt160(this.userScriptHash); writer.writeUInt64LE(this.timestampMS); - writer.writeVarBytesLE(this.assetScriptHash); - writer.writeUInt32LE(this.blockXferNotificationIndex); + writer.writeUInt160(this.assetScriptHash); + writer.writeUInt32LE(this.blockTransferNotificationIndex); } } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 33b4f38486..37f5cd3b92 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -619,9 +619,10 @@ export class Blockchain { applicationsExecuted, block, }); + const nep5BalancePairs = assetKeys.map((key) => { const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); - const callReceipt = this.runEngineWrapper({ script, gas: 100000000, snapshot: 'main' }); + const callReceipt = this.runEngineWrapper({ script, gas: 1, snapshot: 'main' }); const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: this.currentBlockIndex }) }; diff --git a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts index 91a70565b0..394581297f 100644 --- a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts +++ b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts @@ -80,7 +80,7 @@ export function getNep5UpdateOptions({ 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 transfered assets + // 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 @@ -110,7 +110,7 @@ export function getNep5UpdateOptions({ userScriptHash: from, timestampMS: block.timestamp, assetScriptHash: scriptHash, - blockXferNotificationIndex: transferIndex, + blockTransferNotificationIndex: transferIndex, }), value: new Nep5Transfer({ userScriptHash: to, @@ -127,7 +127,7 @@ export function getNep5UpdateOptions({ userScriptHash: to, timestampMS: block.timestamp, assetScriptHash: scriptHash, - blockXferNotificationIndex: transferIndex, + blockTransferNotificationIndex: transferIndex, }), value: new Nep5Transfer({ userScriptHash: from, diff --git a/packages/neo-one-node-core/src/Nep5TransferKey.ts b/packages/neo-one-node-core/src/Nep5TransferKey.ts index afe3794357..012cc9ec5e 100644 --- a/packages/neo-one-node-core/src/Nep5TransferKey.ts +++ b/packages/neo-one-node-core/src/Nep5TransferKey.ts @@ -7,7 +7,7 @@ export interface Nep5TransferKeyAdd { readonly userScriptHash: UInt160; readonly timestampMS: BN; readonly assetScriptHash: UInt160; - readonly blockXferNotificationIndex: number; + readonly blockTransferNotificationIndex: number; } export class Nep5TransferKey extends Nep5TransferKeyModel { @@ -16,13 +16,13 @@ export class Nep5TransferKey extends Nep5TransferKeyModel { const userScriptHash = reader.readUInt160(); const timestampMS = reader.readUInt64LE(); const assetScriptHash = reader.readUInt160(); - const blockXferNotificationIndex = reader.readUInt16LE(); + const blockTransferNotificationIndex = reader.readUInt16LE(); return new this({ userScriptHash, timestampMS, assetScriptHash, - blockXferNotificationIndex, + blockTransferNotificationIndex, }); } @@ -47,7 +47,7 @@ export class Nep5TransferKey extends Nep5TransferKeyModel { userScriptHash: this.userScriptHash, timestampMS: this.timestampMS, assetScriptHash: this.assetScriptHash, - blockXferNotificationIndex: this.blockXferNotificationIndex, + blockTransferNotificationIndex: this.blockTransferNotificationIndex, }); } } diff --git a/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts b/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts index 759ddd824b..4379327737 100644 --- a/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts +++ b/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts @@ -38,6 +38,6 @@ export class ByteStringStackItem extends PrimitiveStackItemBase { throw new InvalidIntegerStackItemError(this.size); } - return new BN(this.getBuffer()); + 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 index 3ff9c82bcd..e84701cb0f 100644 --- a/packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts +++ b/packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts @@ -13,7 +13,7 @@ export class IntegerStackItem extends PrimitiveStackItemBase { public constructor(value: BN) { const size = value.eqn(0) ? 0 : value.byteLength(); super({ - memory: value.eqn(0) ? Buffer.from([]) : value.toBuffer(), + memory: value.eqn(0) ? Buffer.from([]) : value.toBuffer('le'), type: StackItemType.Integer, isNull: false, size, diff --git a/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts index 51f0956dd4..3ae724009b 100644 --- a/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts +++ b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts @@ -11,7 +11,7 @@ export class ContractPermissionDescriptor extends ContractPermissionDescriptorMo if (jsonString.length === 66) { return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readECPoint(jsonString) }); } - if (jsonString === '*') { + if (jsonString === '"*"') { return new ContractPermissionDescriptor(); } diff --git a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts index 63f3213f7d..18e1986a2f 100644 --- a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts +++ b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts @@ -54,7 +54,7 @@ export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, break; case StackItemType.Integer: - deserialized.unshift(new IntegerStackItem(new BN(reader.readVarBytesLE(IntegerStackItem.maxSize)))); + deserialized.unshift(new IntegerStackItem(new BN(reader.readVarBytesLE(IntegerStackItem.maxSize), 'le'))); break; case StackItemType.ByteString: diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts index b46a866de7..cf639690b2 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -97,7 +97,7 @@ export class NEOToken extends NEP5NativeContract { private async getCommitteeMembers(storage: NativeContractStorageContext): Promise { const item = await storage.storages.get(this.createStorageKey(this.prefixes.votersCount).toStorageKey()); - const votersCount = new BN(item.value).toNumber(); + const votersCount = new BN(item.value, 'le').toNumber(); const voterTurnout = votersCount / this.totalAmount.toNumber(); if (voterTurnout < this.effectiveVoterTurnout) { return this.settings.standbyCommittee; @@ -123,10 +123,10 @@ export class NEOToken extends NEP5NativeContract { } let amount = new BN(0); - let ustart = start / this.settings.decrementInterval; + let ustart = Math.floor(start / this.settings.decrementInterval); if (ustart < this.settings.generationAmount.length) { let istart = start % this.settings.decrementInterval; - let uend = end / this.settings.decrementInterval; + let uend = Math.floor(end / this.settings.decrementInterval); let iend = end % this.settings.decrementInterval; if (uend >= this.settings.generationAmount.length) { uend = this.settings.generationAmount.length; diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index bd9afc7129..df124ce791 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -190,7 +190,12 @@ export class Node implements INode { const peer = this.mutableBestPeer; const previousBlock = this.blockchain.previousBlock; const block = previousBlock === undefined ? this.blockchain.currentBlock : previousBlock; - if (peer !== undefined && block.index < this.mutableBlockIndex[peer.endpoint]) { + 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); @@ -202,6 +207,8 @@ 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, @@ -209,7 +216,7 @@ export class Node implements INode { command: Command.GetBlocks, payload: new GetBlocksPayload({ hashStart: block.hash, - count: this.mutableGetBlocksRequestsCount * 50, + count: requestAmount, }), }), ); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 1d1288f88e..5ffe29f055 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -27,7 +27,7 @@ import { Transaction, TransactionState, } from '@neo-one/node-core'; -import { Labels } from '@neo-one/utils'; +import { Labels, utils } from '@neo-one/utils'; import { BN } from 'bn.js'; import { filter, map, switchMap, take, timeout, toArray } from 'rxjs/operators'; @@ -135,6 +135,16 @@ const RPC_METHODS: { readonly [key: string]: string } = { INVALID: 'INVALID', }; +const mapToTransfers = ({ key, value }: { readonly key: Nep5TransferKey; readonly value: Nep5Transfer }) => ({ + timestamp: key.timestampMS.toNumber(), + assethash: common.uInt160ToString(key.assetScriptHash), + transferaddress: common.uInt160ToString(value.userScriptHash), + amount: value.amount.toString(), + blockindex: value.blockIndex, + transfernotifyindex: key.blockTransferNotificationIndex, + txhash: common.uInt256ToString(value.txHash), +}); + const createJSONRPCHandler = (handlers: Handlers) => { // tslint:disable-next-line no-any const validateRequest = (request: any): JSONRPCRequest => { @@ -538,7 +548,7 @@ export const createHandler = ({ if (typeof address !== 'string') { throw new JSONRPCError(-100, 'Invalid argument at position 0'); } - const scriptHash = crypto.addressToScriptHash({ address, addressVersion: common.NEO_ADDRESS_VERSION }); + const scriptHash = crypto.addressToScriptHash({ address, addressVersion: blockchain.settings.addressVersion }); const isValidAddress = common.isUInt160(scriptHash); if (!isValidAddress) { throw new JSONRPCError(-100, 'Invalid address'); @@ -626,23 +636,18 @@ export const createHandler = ({ throw new JSONRPCError(-32602, 'Invalid params'); } - const startTimeBytes = new BN(startTime).toBuffer(); - const endTimeBytes = new BN(endTime).toBuffer(); - const mapToTransfers = ({ key, value }: { key: Nep5TransferKey; value: Nep5Transfer }) => ({ - timestamp: key.timestampMS.toNumber(), - assethash: common.uInt160ToString(key.assetScriptHash), - transferaddress: common.uInt160ToString(value.userScriptHash), - amount: value.amount.toString(), - blockindex: value.blockIndex, - transfernotifyindex: key.blockXferNotificationIndex, - txhash: common.uInt256ToString(value.txHash), - }); + 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]); + const sentPromise = blockchain.nep5TransfersSent - .find$(startTimeBytes, endTimeBytes) + .find$(gte, lte) .pipe(take(1000), map(mapToTransfers), toArray()) .toPromise(); const receivedPromise = blockchain.nep5TransfersSent - .find$(startTimeBytes, endTimeBytes) + .find$(gte, lte) .pipe(take(1000), map(mapToTransfers), toArray()) .toPromise(); @@ -657,27 +662,24 @@ export const createHandler = ({ [RPC_METHODS.getnep5balances]: async (args) => { const scriptHash = JSONHelper.readUInt160(args[0]); const address = crypto.scriptHashToAddress({ addressVersion: blockchain.settings.addressVersion, scriptHash }); - const nep5Balances = await blockchain.nep5Balances - .find$(scriptHash) - .pipe( - 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, - }; - }), - toArray(), - ) - .toPromise(); + 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: nep5Balances, + balance: validBalances.filter(utils.notNull), address, }; }, diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index e01011f8aa..ffe4b2fcc4 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; +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'; @@ -76,7 +76,6 @@ const createGetSearchRange = (prefix: Prefix) => { const createBlockKey = getCreateKey({ serializeKey: ({ hashOrIndex }) => { if (typeof hashOrIndex === 'number') { - // TODO: implement getting a block by its index throw new Error(); } diff --git a/packages/neo-one-node-vm/src/converters/stackItems.ts b/packages/neo-one-node-vm/src/converters/stackItems.ts index 3673237325..029ef11766 100644 --- a/packages/neo-one-node-vm/src/converters/stackItems.ts +++ b/packages/neo-one-node-vm/src/converters/stackItems.ts @@ -141,7 +141,7 @@ const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStack return new ByteStringStackItem(item.value); case 'Integer': - return new IntegerStackItem(new BN(item.value)); + 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/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index c28bd12cc2..901d2a00b0 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,16 +1,28 @@ import { common, crypto, JSONHelper } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { StorageKey, StreamOptions } from '@neo-one/node-core'; -import { KeyBuilder, NativeContainer } from '@neo-one/node-native'; +import { Nep5BalanceKey, StorageKey, StreamOptions, utils } from '@neo-one/node-core'; +import { KeyBuilder, NativeContainer, NEOAccountState } 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 { utils as commonUtils } from '@neo-one/utils'; import { BN } from 'bn.js'; import LevelUp from 'levelup'; import RocksDB from 'rocksdb'; -import { map, toArray } from 'rxjs/operators'; +import { filter, map, toArray } from 'rxjs/operators'; import { data } from '../__data__'; +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(data.key.toString('hex')); + }) + .on('error', reject) + .on('close', resolve) + .on('end', resolve); + }); + describe('Blockchain storage works', () => { test('Blockchain can persist and retrieve blocks', async () => { const blockchainSettings = createTest(); @@ -27,20 +39,24 @@ describe('Blockchain storage works', () => { protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); - const balances = await storage.nep5Balances.all$.pipe(toArray()).toPromise(); + const native = new NativeContainer(blockchainSettings); + + const blockchain = await Blockchain.create({ + settings: blockchainSettings, + storage, + vm: dispatcher, + native, + }); - console.log(balances); + const sc = '0xf813c2cc8e18bbe4b3b87f8ef9105b50bb93918e'; + const scriptHash = common.stringToUInt160(sc).reverse(); - // const native = new NativeContainer(blockchainSettings); - // const blockchain = await Blockchain.create({ - // settings: blockchainSettings, - // storage, - // vm: dispatcher, - // native, - // }); + const timeIn = Buffer.from('830ce2c273010000', 'hex'); - // console.log(blockchain.currentBlockIndex); + const gte = Buffer.concat([scriptHash, timeIn]); + const lte = Buffer.concat([scriptHash, new BN(Date.now(), 'le').toBuffer()]); - // await blockchain.persistBlock({ block: data.debugBlock }); + const transfers = await storage.nep5TransfersSent.find$(gte, lte).pipe(toArray()).toPromise(); + expect(transfers.length).toBeGreaterThan(0); }); }); From 7b30727afb5d70e71b6b0a55b84dcf3bf1bd9b95 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Wed, 28 Oct 2020 17:14:24 -0700 Subject: [PATCH 121/141] feat(test): JSONRPCClient (#2210) --- packages/neo-one-client-common/src/common.ts | 13 +- .../neo-one-client-common/src/models/types.ts | 20 +- packages/neo-one-client-core/src/Hash160.ts | 10 +- .../src/__tests__/provider/temp.test.ts | 285 ++++++++++++++++++ .../src/provider/JSONRPCClient.ts | 37 ++- .../neo-one-node-blockchain/src/Blockchain.ts | 4 +- .../src/createHandler.ts | 45 +-- 7 files changed, 353 insertions(+), 61 deletions(-) create mode 100644 packages/neo-one-client-core/src/__tests__/provider/temp.test.ts diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 90d621319c..38586410c7 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -219,10 +219,16 @@ 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('0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc'), - NEO: hexToUInt160('0xde5f57d430d3dece511cf975a8d37848cb9e0525'), - Policy: hexToUInt160('0xce06595079cd69583126dbfd1d2e25cca74cffe9'), + GAS: hexToUInt160(nativeScriptHashes.GAS), + NEO: hexToUInt160(nativeScriptHashes.NEO), + Policy: hexToUInt160(nativeScriptHashes.Policy), }; export const common = { @@ -296,5 +302,6 @@ export const common = { fixedToDecimal, reverse, isWildcard, + nativeScriptHashes, nativeHashes, }; diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index de152aa3ab..950c69a151 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -114,12 +114,15 @@ export interface TransactionResultSuccessJSON { export type InvocationResultJSON = TransactionResultSuccessJSON | TransactionResultErrorJSON; export interface RawInvocationResultErrorJSON { + readonly script: string; readonly state: 'FAULT'; - readonly gas_consumed: string; - readonly stack: readonly ContractParameterJSON[]; + readonly gasconsumed: string; + readonly stack: string; + readonly notifications: readonly NotificationJSON[]; } export interface RawInvocationResultSuccessJSON { + readonly script: string; readonly state: 'HALT'; readonly gasconsumed: string; readonly stack: readonly ContractParameterJSON[]; @@ -464,6 +467,7 @@ export interface BlockBaseJSON { readonly witnesses: readonly WitnessJSON[]; readonly hash: string; readonly size: number; + readonly confirmations: number; } export interface ConsensusDataJSON { @@ -484,7 +488,17 @@ export interface TrimmedBlockJSON extends BlockBaseJSON { } export interface NetworkSettingsJSON { - readonly issueGASFee: string; + readonly decrementinternal: 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 { diff --git a/packages/neo-one-client-core/src/Hash160.ts b/packages/neo-one-client-core/src/Hash160.ts index c6fe19e85d..52a1044af3 100644 --- a/packages/neo-one-client-core/src/Hash160.ts +++ b/packages/neo-one-client-core/src/Hash160.ts @@ -1,4 +1,4 @@ -import { common } from '@neo-one/client-common'; +import { common, scriptHashToAddress } from '@neo-one/client-common'; /** * Common `AddressString`s. @@ -7,9 +7,13 @@ export const Hash160 = { /** * `AddressString` of the native NEO conract. */ - NEO: common.uInt160ToString(common.nativeHashes.NEO), + NEO: scriptHashToAddress(common.nativeScriptHashes.NEO), /** * `AddressString` of the native GAS conract. */ - GAS: common.uInt160ToString(common.nativeHashes.GAS), + 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/__tests__/provider/temp.test.ts b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts new file mode 100644 index 0000000000..26a0c91a74 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts @@ -0,0 +1,285 @@ +import { common, ScriptBuilder, TransactionModel } from '@neo-one/client-common'; +import BN from 'bn.js'; +import { Hash160 } from '../../Hash160'; +import { JSONRPCClient, JSONRPCHTTPProvider } from '../../provider'; + +describe('JSONRPCClient Tests', () => { + const client = new JSONRPCClient(new JSONRPCHTTPProvider('https://staging.neotracker.io/rpc')); + const address = 'NSVX6sk3z14pSSjFx6WFEGajQXEbmahvwx'; + const addressWithTransfers = 'NiXgSLtGUjTRTgp4y9ax7vyJ9UZAjsRDVt'; + const transactionHash = '0x173dcbc4a88995a0cf7bdd006923d148f787f76ca75621dc4c440ca6d9afbc73'; + + test('getBlockHeader', async () => { + const { + version, + hash, + size, + previousblockhash, + merkleroot, + time, + index, + nextconsensus, + nextblockhash, + witnesses, + confirmations, + } = await client.getBlockHeader(1); + + expect(version).toEqual(0); + expect(hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); + expect(size).toEqual(691); + expect(previousblockhash).toEqual('0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45'); + expect(merkleroot).toEqual('0x9ff5ba403c81151c0d031b548fe6cff82ef61a01be72c38ecc81d4bc2f1ee01c'); + expect(time).toEqual('1596537327793'); + expect(index).toEqual(1); + expect(nextconsensus).toEqual('NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL'); + expect(confirmations).toEqual(369993); + expect(nextblockhash).toEqual('0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae'); + expect(witnesses[0].invocation).toEqual( + 'DED/2tpnw4uN5407xKQuwAXw+Hm9L4P51hSMfjwbEcm7pN+aFdn5+d/VxT9ifDX0KQRGlbericqr6h2gQvnJYvHqDECO9w/7PAccs3K3yqAZ4zDTpsnxxDU5EyR1PNNcBUx31lFGyHtjcxhce+YNYxcJc2zOFFk+lFmCBn+ZiF1HZrkPDEBbpwRGODeexXqSws2VQPrOg/BiCNYKmAj3vPW8HvC3ypnly/Hfy8lYF9iZiIighzUALC4QzQpxdq1IdNMSH22jDEAe/l0FF8HXc6e20zT6x0D8XvrITHsKMxxe4S5hGYwojgBDjJPcMwvJbT83AF+sorbZc7SMaCGwT1XOEg+9M0G2DEDOK/OsvMqyKgyHf/gz5QFgQxPjHKuuMoN38+OLuMRP36K4Eunv7oql3KstrgpVIqZHtETEHmxMEFIFXu5hFEa8', + ); + expect(witnesses[0].verification).toEqual( + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + ); + }); + + test('getValidators', async () => { + const validators = await client.getValidators(); + const currentPublicKey = '03daca45da7acf52602c630e58af4f45a894a427fa274544cadac5335a9a293d4e'; + + expect(validators.length).toEqual(11); + expect(validators.some((val) => val.publicKey === currentPublicKey)); + }); + + test('getTransactionHeight', async () => { + const height = await client.getTransactionHeight(transactionHash); + + expect(height).toEqual(1); + }); + + test('getunclaimedgas', async () => { + const unclaimed = await client.getUnclaimedGas(address); + + expect(unclaimed.address).toEqual(address); + expect(unclaimed.unclaimed).toEqual('0'); + }); + + test('validateAddress', async () => { + const result = await client.validateAddress(address); + + expect(result.address).toEqual(address); + expect(result.isvalid).toEqual(true); + }); + + test('getSettings', async () => { + const settings = await client.getSettings(); + + expect(settings.millisecondsPerBlock).toEqual(15000); + }); + + test('getBlock', async () => { + const block = await client.getBlock(1); + + expect(block).toBeDefined(); + expect(block.hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); + expect(block.nextconsensus).toEqual('NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL'); + expect(block.tx).toEqual([]); + }); + + test('getBestBlockHash', async () => { + const hash = await client.getBestBlockHash(); + + expect(hash).toBeDefined(); + expect(hash.length).toBe(66); + expect(common.isUInt256(common.stringToUInt256(hash))).toBeTruthy(); + }); + + test('getBlockCount', async () => { + const count = await client.getBlockCount(); + + expect(count).toBeGreaterThan(343360); + }); + + test('getMemPool', async () => { + const mempool = await client.getMemPool(); + + expect(mempool.height).toBeGreaterThan(343360); + expect(mempool.verified).toEqual([]); + }); + + test('getTransaction', async () => { + const transaction = await client.getTransaction(transactionHash); + + expect(transaction.hash).toEqual(transactionHash); + expect(transaction.blockhash).toEqual('0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45'); + }); + + 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).toBeGreaterThan(345557); + expect(receipt.blockTime).toEqual('1468595301000'); + }); + + test('getTransactionHeight', async () => { + const height = await client.getTransactionHeight(transactionHash); + + expect(height).toEqual(0); + }); + + test('getBlockHash', async () => { + const hash = await client.getBlockHash(1); + + expect(hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); + }); + + test('getConnectionCount', async () => { + const count = await client.getConnectionCount(); + + expect(count).toBeGreaterThan(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 { + decrementinternal, + generationamount, + privatekeyversion, + standbyvalidators, + messagemagic, + addressversion, + standbycommittee, + committeememberscount, + validatorscount, + millisecondsperblock, + memorypoolmaxtransactions, + } = await client.getNetworkSettings(); + + expect(decrementinternal).toBeDefined(); + expect(generationamount).toBeDefined(); + expect(decrementinternal).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(); + }); + + // TODO: run test + // test('getAllStorage', async () => { + // const storages = await client.getAllStorage(Hash160.NEO); + + // expect(storages.length).toEqual(10); + // expect(storages[0]).toEqual({ + // isConstant: false, + // key: 'feffffff0b', + // value: '7ee57ed872ab0a', + // }); + // }); + + test('getNep5Balances', async () => { + const balances = await client.getNep5Balances(address); + + expect(balances.address).toEqual(address); + expect(balances.balance).toEqual([ + { + amount: '8995481360', + assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', + lastupdatedblock: 5284, + }, + ]); + }); + + // TODO: why are transfers and received equivalent? + test('getNep5Transfers', async () => { + const transfers = await client.getNep5Transfers(addressWithTransfers, 1468595301000, 1603753592250); + + expect(transfers.address).toEqual(addressWithTransfers); + expect(transfers.received.length).toEqual(3); + expect(transfers.sent.length).toEqual(3); + expect(transfers.sent).not.toEqual(transfers.received); + expect(transfers.received[0]).toEqual({ + amount: '50000000000', + assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', + blockindex: 74129, + timestamp: 1597856421280, + transferaddress: '0x31248a51a630048a3fa00c3cfed7428a76d320ad', + transfernotifyindex: 0, + txhash: '0x57726a30d9efb510017d698f0fc55e54586bed7878f05b867884bb03dd07aa64', + }); + expect(transfers.sent[0]).toEqual({ + amount: '50000000000', + assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', + blockindex: 74129, + timestamp: 1597856421280, + transferaddress: '0x31248a51a630048a3fa00c3cfed7428a76d320ad', + transfernotifyindex: 0, + txhash: '0x57726a30d9efb510017d698f0fc55e54586bed7878f05b867884bb03dd07aa64', + }); + }); + + // test('relayTransaction', async () => { + // const receipt = await client.relayTransaction(); + + // // TODO: test + // expect(receipt.transaction).toBeDefined(); + // expect(receipt.verifyResult).toBeDefined(); + // }); + + // TODO: run test/ debug + test('sendRawTransaction', async () => { + const transaction = new TransactionModel({ + systemFee: new BN(0), + networkFee: new BN(0), + script: new ScriptBuilder().emitOp('PUSH0').build(), + }); + const receipt = await client.sendRawTransaction(transaction.serializeWire().toString('hex')); + + expect(receipt).toEqual(true); + }); + + // TODO: run test + test('testInvokeRaw', async () => { + const { script, state, stack, gasconsumed, notifications } = await client.testInvokeRaw( + new ScriptBuilder().emitOp('PUSH0').build().toString('hex'), + ); + + expect(script).toEqual(''); + expect(state).toEqual('HALT'); + expect(stack).toEqual([]); + expect(gasconsumed).toEqual('0'); + expect(notifications).toEqual([]); + }); + + // TODO: implement getapplicationlog + // JSON client method + // JSON return type + // RPC method + // storage, etc. + // test('getApplicationLog', async () => { + // const log = await client.getApplicationLog(); + // }); +}); diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 43132575bf..4be5d071f8 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -4,10 +4,10 @@ import { ApplicationLogDataJSON, BlockJSON, BufferString, - CallReceiptJSON, ContractJSON, GetOptions, Hash256String, + HeaderJSON, InvocationDataJSON, Nep5BalancesJSON, Nep5TransfersJSON, @@ -19,6 +19,7 @@ import { StorageItemJSON, TransactionReceiptJSON, UnclaimedGASJSON, + ValidatorJSON, VerboseTransactionJSON, VersionJSON, } from '@neo-one/client-common'; @@ -53,11 +54,15 @@ export class JSONRPCClient { ); } - public async getNep5Transfers(address: AddressString): Promise { + public async getNep5Transfers( + address: AddressString, + startTime?: number, + endTime?: number, + ): Promise { return this.withInstance(async (provider) => provider.request({ method: 'getnep5transfers', - params: [addressToScriptHash(address)], + params: [addressToScriptHash(address), startTime, endTime], }), ); } @@ -158,15 +163,6 @@ export class JSONRPCClient { ); } - public async testInvocation(value: BufferString): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'testinvocation', - params: [value], - }), - ); - } - public async getTransactionReceipt(hash: Hash256String, options: GetOptions = {}): Promise { const { timeoutMS } = options; @@ -197,6 +193,23 @@ export class JSONRPCClient { ); } + 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' })); } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 37f5cd3b92..91b538fd32 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -8,6 +8,7 @@ import { CallReceipt, Change, ChangeSet, + ConsensusData, ConsensusPayload, DeserializeWireContext, HashIndexState, @@ -27,6 +28,7 @@ import { Witness, } from '@neo-one/node-core'; import { Labels } from '@neo-one/utils'; +import { BN } from 'bn.js'; import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; import { map, toArray } from 'rxjs/operators'; @@ -708,7 +710,6 @@ export class Blockchain { return new Block({ version: 0, previousHash: this.currentBlock.hash, - merkleRoot: common.ZERO_UINT256, timestamp: this.currentBlock.timestamp.addn(this.settings.millisecondsPerBlock), index: this.currentBlockIndex + 1, nextConsensus: this.currentBlock.nextConsensus, @@ -716,6 +717,7 @@ export class Blockchain { invocation: Buffer.from([]), verification: Buffer.from([]), }), + consensusData: new ConsensusData({ primaryIndex: 0, nonce: new BN(0) }), transactions: [], }); } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 5ffe29f055..98ec98f0a6 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -119,7 +119,6 @@ const RPC_METHODS: { readonly [key: string]: string } = { getsettings: 'getsettings', // NEO•ONE - testinvocation: 'testinvocation', relaytransaction: 'relaytransaction', getallstorage: 'getallstorage', gettransactionreceipt: 'gettransactionreceipt', @@ -444,17 +443,12 @@ export const createHandler = ({ return JSONHelper.writeBuffer(tx.serializeWire()); }, [RPC_METHODS.getstorage]: async (args) => { - let id = 0; - try { - const hash = JSONHelper.readUInt160(args[0]); - const state = await blockchain.contracts.tryGet(hash); - if (state === undefined) { - return undefined; - } - id = state.id; - } catch { - /* do nothing */ + const hash = JSONHelper.readUInt160(args[0]); + const state = await blockchain.contracts.tryGet(hash); + if (state === undefined) { + return undefined; } + const id = state.id; const key = JSONHelper.readBuffer(args[1]); const item = await blockchain.storages.tryGet(new StorageKey({ id, key })); @@ -525,17 +519,8 @@ export const createHandler = ({ }, // SmartContract - // TODO: we didn't use invokefunction in the past, whether or not that will still be the case is up in the air [RPC_METHODS.invokefunction]: async (_args) => { throw new JSONRPCError(-101, 'Not implemented'); - // const scriptHash = JSONHelper.readUInt160(args[0]); - // const operation = args[1]; - // const params = args.length >= 3 ? args[2].map((arg) => ContractParameter.fromJSON(arg)) : []; - // const signers = args.length >= 4 ? signersFromJSON(args[3]) : undefined; - // const builder = new ScriptBuilder(); - // const script = builder.emitAppCall(scriptHash, operation, params).build(); - - // return getInvokeResult(script, signers); }, [RPC_METHODS.invokescript]: async (args) => { const script = JSONHelper.readBuffer(args[0]); @@ -584,7 +569,6 @@ export const createHandler = ({ throw new JSONRPCError(-101, 'Not implemented'); }, [RPC_METHODS.getapplicationlog]: async () => { - // TODO: this looks very similar to our "getinvocationdata" throw new JSONRPCError(-101, 'Not implemented'); }, @@ -700,23 +684,6 @@ export const createHandler = ({ [RPC_METHODS.getsettings]: async () => ({ millisecondsPerBlock: blockchain.settings.millisecondsPerBlock }), // NEO•ONE - [RPC_METHODS.testinvocation]: async (args) => { - const script = JSONHelper.readBuffer(args[0]); - - try { - const receipt = blockchain.invokeTransaction({ script }, 1000000); - - return { - script, - state: toVMStateJSON(receipt.state), - stack: receipt.stack.map((item) => stackItemToJSON(item, undefined)), - gasconsumed: receipt.gasConsumed, - notifications: receipt.notifications.map(notificationToJSON), - }; - } catch { - throw new JSONRPCError(-103, 'Invalid Transaction'); - } - }, [RPC_METHODS.relaytransaction]: async (args): Promise => { const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, @@ -760,11 +727,11 @@ export const createHandler = ({ if (contract === undefined) { return []; } - // const items = await blockchain.storages.find$(contract.id).pipe(toArray()).toPromise(); return blockchain.storages .find$(Buffer.from([contract.id])) .pipe( + take(1000), map(({ key, value }) => value.serializeJSON(key)), toArray(), ) From 0165082b454481a82e887f193b28dcbdc8f17a58 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Tue, 3 Nov 2020 10:07:44 -0800 Subject: [PATCH 122/141] fix(rpc): fix rpc getnep5transfers method for received (#2214) --- .../src/createHandler.ts | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 98ec98f0a6..f988b7ca18 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -4,6 +4,7 @@ import { crypto, JSONHelper, RelayTransactionResultJSON, + scriptHashToAddress, toJSONVerifyResult, toVMStateJSON, TransactionJSON, @@ -137,13 +138,21 @@ const RPC_METHODS: { readonly [key: string]: string } = { const mapToTransfers = ({ key, value }: { readonly key: Nep5TransferKey; readonly value: Nep5Transfer }) => ({ timestamp: key.timestampMS.toNumber(), assethash: common.uInt160ToString(key.assetScriptHash), - transferaddress: common.uInt160ToString(value.userScriptHash), + transferaddress: scriptHashToAddress(common.uInt160ToString(value.userScriptHash)), amount: value.amount.toString(), blockindex: value.blockIndex, transfernotifyindex: key.blockTransferNotificationIndex, txhash: common.uInt256ToString(value.txHash), }); +const getScriptHashFromParam = (param: string, addressVersion: number) => { + if (param.length < 40) { + return crypto.addressToScriptHash({ addressVersion, address: param }); + } + + return JSONHelper.readUInt160(param); +}; + const createJSONRPCHandler = (handlers: Handlers) => { // tslint:disable-next-line no-any const validateRequest = (request: any): JSONRPCRequest => { @@ -451,7 +460,8 @@ export const createHandler = ({ const id = state.id; const key = JSONHelper.readBuffer(args[1]); - const item = await blockchain.storages.tryGet(new StorageKey({ id, key })); + const storageKey = new StorageKey({ id, key }); + const item = await blockchain.storages.tryGet(storageKey); if (item === undefined) { return undefined; @@ -609,8 +619,9 @@ export const createHandler = ({ // Nep5 [RPC_METHODS.getnep5transfers]: async (args) => { - const scriptHash = JSONHelper.readUInt160(args[0]); - const address = crypto.scriptHashToAddress({ addressVersion: blockchain.settings.addressVersion, scriptHash }); + const addressVersion = blockchain.settings.addressVersion; + const scriptHash = getScriptHashFromParam(args[0], addressVersion); + const address = crypto.scriptHashToAddress({ addressVersion, scriptHash }); const SEVEN_DAYS_IN_MS = 7 * 24 * 60 * 60 * 1000; const startTime = args[1] === undefined ? Date.now() - SEVEN_DAYS_IN_MS : args[1]; @@ -630,7 +641,7 @@ export const createHandler = ({ .find$(gte, lte) .pipe(take(1000), map(mapToTransfers), toArray()) .toPromise(); - const receivedPromise = blockchain.nep5TransfersSent + const receivedPromise = blockchain.nep5TransfersReceived .find$(gte, lte) .pipe(take(1000), map(mapToTransfers), toArray()) .toPromise(); @@ -644,8 +655,9 @@ export const createHandler = ({ }; }, [RPC_METHODS.getnep5balances]: async (args) => { - const scriptHash = JSONHelper.readUInt160(args[0]); - const address = crypto.scriptHashToAddress({ addressVersion: blockchain.settings.addressVersion, scriptHash }); + const addressVersion = blockchain.settings.addressVersion; + const scriptHash = getScriptHashFromParam(args[0], addressVersion); + const address = crypto.scriptHashToAddress({ addressVersion, scriptHash }); const storedBalances = await blockchain.nep5Balances.find$(scriptHash).pipe(toArray()).toPromise(); const validBalances = await Promise.all( storedBalances.map(async ({ key, value }) => { @@ -723,13 +735,19 @@ export const createHandler = ({ }, [RPC_METHODS.getallstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); + 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.from([contract.id])) + .find$(buffer) .pipe( take(1000), map(({ key, value }) => value.serializeJSON(key)), From 3248e4684cff2a4a2656b73df00cbf9de4a5b556 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 5 Nov 2020 12:09:44 -0800 Subject: [PATCH 123/141] feat(applog): add applicationlog data and RPC method, plus fixes (#2215) --- .../neo-one-client-common/src/models/index.ts | 1 + .../src/models/trigger.ts | 35 ++++++++ .../neo-one-client-common/src/models/types.ts | 44 +++------- .../neo-one-client-common/src/models/vm.ts | 1 - .../src/__tests__/provider/temp.test.ts | 30 ++++--- .../src/provider/JSONRPCClient.ts | 4 +- .../src/provider/convert.ts | 1 + .../neo-one-node-blockchain/src/Blockchain.ts | 48 ++++++++++- .../src/PersistingBlockchain.ts | 4 +- packages/neo-one-node-blockchain/src/utils.ts | 2 +- .../neo-one-node-blockchain/src/verify.ts | 3 +- .../neo-one-node-core/src/ApplicationLog.ts | 80 +++++++++++++++++++ packages/neo-one-node-core/src/BlockBase.ts | 13 ++- packages/neo-one-node-core/src/Header.ts | 7 +- .../neo-one-node-core/src/Notification.ts | 19 ++++- .../src/StackItems/StackItems.ts | 7 +- packages/neo-one-node-core/src/Storage.ts | 6 +- packages/neo-one-node-core/src/index.ts | 1 + packages/neo-one-node-core/src/utils/index.ts | 1 - .../src/utils/notificationToJSON.ts | 14 ---- packages/neo-one-node-core/src/vm.ts | 8 +- .../src/createHandler.ts | 30 +++++-- .../neo-one-node-storage-common/src/keys.ts | 7 ++ .../src/convertChange.ts | 9 +++ .../src/levelUpStorage.ts | 7 ++ packages/neo-one-node-vm/lib/ReturnHelpers.cs | 2 - .../neo-one-node-vm/src/ApplicationEngine.ts | 10 +-- .../src/Methods/EngineMethods.ts | 4 +- .../src/__tests__/ApplicationEngine.test.ts | 2 +- .../src/__tests__/Dispatcher.test.ts | 3 +- .../src/__tests__/storage.test.ts | 12 +-- .../src/__tests__/syscalls.test.ts | 4 +- 32 files changed, 299 insertions(+), 120 deletions(-) create mode 100644 packages/neo-one-client-common/src/models/trigger.ts create mode 100644 packages/neo-one-node-core/src/ApplicationLog.ts delete mode 100644 packages/neo-one-node-core/src/utils/notificationToJSON.ts diff --git a/packages/neo-one-client-common/src/models/index.ts b/packages/neo-one-client-common/src/models/index.ts index b07f03ae13..863b8cd5ae 100644 --- a/packages/neo-one-client-common/src/models/index.ts +++ b/packages/neo-one-client-common/src/models/index.ts @@ -9,3 +9,4 @@ 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/trigger.ts b/packages/neo-one-client-common/src/models/trigger.ts new file mode 100644 index 0000000000..0f90bf91e2 --- /dev/null +++ b/packages/neo-one-client-common/src/models/trigger.ts @@ -0,0 +1,35 @@ +import { InvalidFormatError } from '../common'; + +export enum TriggerType { + Verification = 0x20, + System = 0x01, + Application = 0x40, +} + +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 950c69a151..979c75fafb 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -3,6 +3,7 @@ import { UInt256Hex } from '../common'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; +import { TriggerType, TriggerTypeJSON } from './trigger'; import { VerifyResultModel } from './VerifyResultModel'; import { VMState, VMStateJSON } from './vm'; import { WitnessScopeModel } from './WitnessScopeModel'; @@ -218,21 +219,6 @@ export interface UnclaimedGASJSON { readonly address: string; } -// TODO: not sure if we need this -export interface StateItemJSON { - readonly type: string; - readonly value: string; -} - -// TODO: not sure if we need this -export interface NeoNotificationJSON { - readonly contract: string; - readonly state: { - readonly type: string; - readonly value: readonly StateItemJSON[]; - }; -} - export interface StackItemJSONBase { readonly type: StackItemJSON['type']; // readonly value: @@ -293,15 +279,8 @@ export type StackItemJSON = | BufferStackItemJSON | ArrayStackItemJSON // | StructStackItemJSON + // | InteropInterfaceStackItemJSON | MapStackItemJSON; -// | InteropInterfaceStackItemJSON; - -// TODO: copy pasted from node-core. We might want to put this here instead -export enum TriggerType { - Verification = 0x00, - System = 0x01, - Application = 0x10, -} export interface ExecutionResultJSON { readonly trigger: keyof typeof TriggerType; @@ -312,9 +291,13 @@ export interface ExecutionResultJSON { readonly notifications: readonly NotificationActionJSON[]; } -export interface ApplicationLogDataJSON { - readonly txid: string; - readonly executions: readonly ExecutionResultJSON[]; +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 TransactionJSON { @@ -331,10 +314,6 @@ export interface TransactionJSON { readonly script: string; readonly witnesses: readonly WitnessJSON[]; readonly receipt?: TransactionReceiptJSON; - readonly blockhash: string; - readonly confirmations: number; - readonly blocktime: string; - readonly vmstate: string; } // Just for Neo returns, don't think we need it for anything @@ -467,7 +446,7 @@ export interface BlockBaseJSON { readonly witnesses: readonly WitnessJSON[]; readonly hash: string; readonly size: number; - readonly confirmations: number; + readonly confirmations?: number; } export interface ConsensusDataJSON { @@ -507,10 +486,9 @@ export interface NetworkSettingsJSON { // } export interface NotificationJSON { - // readonly scriptcontainer: SerializedScriptContainerJSON; readonly scripthash: string; readonly eventname: string; - readonly state: readonly StackItemJSON[]; + readonly state: readonly StackItemJSON[] | string; } export interface CallReceiptJSON { diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index e7c8804d65..9ea9278aa7 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -310,7 +310,6 @@ export const getSysCallHash = (sysCall: SysCallName) => { return maybeHash; }; -// TODO: probably good to drop the implementation in node-core and just use this one export enum VMState { NONE = 0x00, HALT = 0x01, 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 index 26a0c91a74..93c2c0591c 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts @@ -1,6 +1,5 @@ import { common, ScriptBuilder, TransactionModel } from '@neo-one/client-common'; import BN from 'bn.js'; -import { Hash160 } from '../../Hash160'; import { JSONRPCClient, JSONRPCHTTPProvider } from '../../provider'; describe('JSONRPCClient Tests', () => { @@ -274,12 +273,25 @@ describe('JSONRPCClient Tests', () => { expect(notifications).toEqual([]); }); - // TODO: implement getapplicationlog - // JSON client method - // JSON return type - // RPC method - // storage, etc. - // test('getApplicationLog', async () => { - // const log = await client.getApplicationLog(); - // }); + test('getApplicationLog', async () => { + const { gasconsumed, notifications, stack, trigger, txid, vmstate } = await client.getApplicationLog( + transactionHash, + ); + + expect(gasconsumed).toEqual('0'); + expect(stack).toEqual([]); + expect(trigger).toEqual('Application'); + expect(vmstate).toEqual('HALT'); + expect(txid).toEqual(transactionHash); + expect(notifications.length).toEqual(2); + expect(notifications[0]).toEqual({ + eventname: 'Transfer', + scripthash: '0xde5f57d430d3dece511cf975a8d37848cb9e0525', + state: [ + { type: 'Any' }, + { type: 'ByteString', value: '4KPFXK1yAo+1kBdIsZonviH2VAQ=' }, + { type: 'Integer', value: '100000000' }, + ], + }); + }); }); diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 4be5d071f8..d94ff01a53 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -1,7 +1,7 @@ import { AddressString, addressToScriptHash, - ApplicationLogDataJSON, + ApplicationLogJSON, BlockJSON, BufferString, ContractJSON, @@ -222,7 +222,7 @@ export class JSONRPCClient { return this.withInstance(async (provider) => provider.request({ method: 'getversion' })); } - public async getApplicationLog(hash: Hash256String): Promise { + public async getApplicationLog(hash: Hash256String): Promise { return this.withInstance(async (provider) => provider.request({ method: 'getapplicationlog', diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index f8fc7a5450..dab99057e4 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -29,6 +29,7 @@ export function convertCallReceipt(receipt: CallReceiptJSON): RawCallReceipt { }; } +// TODO: this almost definitely needs to be looked at and redone export function convertStackItem(item: StackItemJSON): RawStackItem { switch (item.type) { case 'Any': diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 91b538fd32..3bef31673a 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,7 +1,8 @@ -import { common, ScriptBuilder, UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { common, ScriptBuilder, TriggerType, UInt256, VerifyResultModel } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { ApplicationExecuted, + ApplicationLog, Block, Blockchain as BlockchainType, BlockchainSettings, @@ -16,12 +17,12 @@ import { Mempool, NativeContainer, Nep5Balance, + Notification, RunEngineOptions, Signers, Storage, Transaction, TransactionVerificationContext, - TriggerType, VerifyConsensusPayloadOptions, VerifyOptions, VM, @@ -243,6 +244,10 @@ export class Blockchain { return this.storage.nep5TransfersSent; } + public get applicationLogs() { + return this.storage.applicationLogs; + } + public get transactions() { return this.storage.transactions; } @@ -675,6 +680,42 @@ export class Blockchain { return nep5BalanceChangeSet.concat(nep5TransfersReceivedChangeSet, nep5TransfersSentChangeSet); } + 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, + }), + ); + + const value = new ApplicationLog({ + txid: transaction?.hash, + trigger, + vmState, + gasConsumed, + stack, + notifications, + }); + + return { + type: 'add', + subType: 'add', + change: { type: 'applicationLog', key: transaction?.hash ?? block.hash, value }, + }; + }, + ); + } + private async persistBlockInternal(block: Block, verify?: boolean): Promise { if (verify) { await this.verifyBlock(block); @@ -696,6 +737,9 @@ export class Blockchain { const nep5Updates = this.updateNep5Balances({ applicationsExecuted, block }); await this.storage.commit(nep5Updates); + const applicationLogUpdates = this.updateApplicationLogs({ applicationsExecuted, block }); + await this.storage.commit(applicationLogUpdates); + this.vm.updateSnapshots(); } diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index 13bf33e31e..d81a804c50 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -1,6 +1,6 @@ // tslint:disable no-array-mutation no-object-mutation -import { common, VMState } from '@neo-one/client-common'; -import { ApplicationExecuted, Block, SnapshotHandler, Transaction, TriggerType, VM } from '@neo-one/node-core'; +import { common, TriggerType, VMState } from '@neo-one/client-common'; +import { ApplicationExecuted, Block, SnapshotHandler, Transaction, VM } from '@neo-one/node-core'; import { PersistNativeContractsError } from './errors'; import { utils as blockchainUtils } from './utils'; diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index a4f4f6215e..0ee23c7dfb 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -6,6 +6,7 @@ import { IOHelper, Op, ScriptBuilder, + TriggerType, UInt160, VMState, } from '@neo-one/client-common'; @@ -18,7 +19,6 @@ import { getOpCodePrice, Notification, Transaction, - TriggerType, utils as coreUtils, Verifiable, VM, diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index 18adedd6e9..f23d82d2b4 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -1,4 +1,4 @@ -import { common, UInt160, VMState } from '@neo-one/client-common'; +import { common, TriggerType, UInt160, VMState } from '@neo-one/client-common'; import { BlockchainStorage, CallFlags, @@ -6,7 +6,6 @@ import { ExecuteScriptResult, NativeContainer, SerializableContainer, - TriggerType, Verifiable, VM, } from '@neo-one/node-core'; 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..28f605d335 --- /dev/null +++ b/packages/neo-one-node-core/src/ApplicationLog.ts @@ -0,0 +1,80 @@ +import { + ApplicationLogJSON, + BinaryWriter, + createSerializeWire, + JSONHelper, + SerializableWire, + SerializeWire, + toTriggerTypeJSON, + toVMStateJSON, + TriggerType, + UInt256, + VMState, +} from '@neo-one/client-common'; +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: number; + 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: number; + 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/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 947a38f15c..dc29f5e13a 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -204,9 +204,18 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, addressVersion: context.addressVersion, scriptHash: this.nextConsensus, }), - witnesses: [this.witness.serializeJSON()], - // confirmations: [] TODO: this is a property we used to use, do we still need? + }; + } + + public serializeJSONVerbose( + context: SerializeJSONContext, + verbose: { readonly confirmations: number; readonly nextblockhash?: UInt256Hex }, + ): BlockBaseJSON { + return { + ...this.serializeJSON(context), + confirmations: verbose.confirmations, + nextblockhash: verbose.nextblockhash, }; } diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index dfcdb23be1..ea15f794bd 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -23,10 +23,9 @@ export class Header extends BlockBase implements SerializableWire, SerializableJ public static deserializeWireBase(options: DeserializeWireBaseOptions): Header { const { reader } = options; const blockBase = super.deserializeWireBase(options); - if (reader.readUInt8() !== 0) { - throw new InvalidFormatError( - `Expected Header BinaryReader readUInt8(0) to be 0. Received: ${reader.readUInt8()}`, - ); + const uint8 = reader.readUInt8(); + if (uint8 !== 0) { + throw new InvalidFormatError(`Expected Header BinaryReader readUInt8() to be 0. Received: ${uint8}`); } return new this({ diff --git a/packages/neo-one-node-core/src/Notification.ts b/packages/neo-one-node-core/src/Notification.ts index 828d6a92fd..503c3a0f45 100644 --- a/packages/neo-one-node-core/src/Notification.ts +++ b/packages/neo-one-node-core/src/Notification.ts @@ -1,5 +1,5 @@ -import { common, UInt160 } from '@neo-one/client-common'; -import { assertArrayStackItem, StackItem } from './StackItems'; +import { common, NotificationJSON, UInt160 } from '@neo-one/client-common'; +import { assertArrayStackItem, StackItem, stackItemToJSON } from './StackItems'; import { Verifiable } from './Verifiable'; export interface NotificationAdd { @@ -35,4 +35,19 @@ export class Notification { 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/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index 60a8dceb7a..d48b695462 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -133,7 +133,6 @@ export const assertPrimitiveStackItem = (item: any): PrimitiveStackItem => { }; export const stackItemToJSON = (item: StackItem, context?: Set): StackItemJSON => { - const type = StackItemType[item.type]; switch (item.type) { case StackItemType.Array: const array = assertArrayStackItem(item); @@ -153,12 +152,12 @@ export const stackItemToJSON = (item: StackItem, context?: Set): Stac case StackItemType.Buffer: const buffer = assertBufferStackItem(item); - return { type: 'Buffer', value: JSONHelper.writeBuffer(buffer.getBuffer()) }; + return { type: 'Buffer', value: JSONHelper.writeBase64Buffer(buffer.getBuffer()) }; case StackItemType.ByteString: const byteString = assertByteStringStackItem(item); - return { type: 'ByteString', value: JSONHelper.writeBuffer(byteString.getBuffer()) }; + return { type: 'ByteString', value: JSONHelper.writeBase64Buffer(byteString.getBuffer()) }; case StackItemType.Integer: const integer = assertIntegerStackItem(item); @@ -187,6 +186,6 @@ export const stackItemToJSON = (item: StackItem, context?: Set): Stac return { type: 'Pointer', value: pointer.position }; default: - throw new InvalidFormatError(`didn't expect stack item of type: ${type} on return`); + return { type: 'Any', value: undefined }; } }; diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index b041b85a1d..9fbe735410 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -1,4 +1,6 @@ +import { ApplicationLogJSON } from '@neo-one/client-common'; import { Observable } from 'rxjs'; +import { ApplicationLog } from './ApplicationLog'; import { ContractIDState } from './ContractIDState'; import { ContractKey, ContractState } from './ContractState'; import { HashIndexState } from './HashIndexState'; @@ -109,7 +111,8 @@ export type AddChange = | { 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: 'nep5TransferReceived'; readonly key: Nep5TransferKey; readonly value: Nep5Transfer } + | { readonly type: 'applicationLog'; readonly key: TransactionKey; readonly value: ApplicationLog }; export type DeleteChange = | { readonly type: 'contract'; readonly key: ContractKey } @@ -127,6 +130,7 @@ export interface BlockchainStorage { readonly nep5Balances: ReadAllFindStorage; readonly nep5TransfersSent: ReadFindStorage; readonly nep5TransfersReceived: ReadFindStorage; + readonly applicationLogs: ReadStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; readonly storages: ReadFindStorage; diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 530bf09d11..5c692a5b10 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -38,3 +38,4 @@ export * from './Nep5Balance'; export * from './Nep5Transfer'; export * from './Nep5BalanceKey'; export * from './Nep5TransferKey'; +export * from './ApplicationLog'; diff --git a/packages/neo-one-node-core/src/utils/index.ts b/packages/neo-one-node-core/src/utils/index.ts index 84eff6f7fc..622b9a87fe 100644 --- a/packages/neo-one-node-core/src/utils/index.ts +++ b/packages/neo-one-node-core/src/utils/index.ts @@ -1,4 +1,3 @@ export * from './BinaryReader'; export * from './deserializeStackItem'; export * from './utils'; -export * from './notificationToJSON'; diff --git a/packages/neo-one-node-core/src/utils/notificationToJSON.ts b/packages/neo-one-node-core/src/utils/notificationToJSON.ts deleted file mode 100644 index c775ec5e53..0000000000 --- a/packages/neo-one-node-core/src/utils/notificationToJSON.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { common, NotificationJSON } from '@neo-one/client-common'; -import { Notification } from '../Notification'; -// import { deserializeScriptContainer, DeserializeWireContext } from '../Serializable'; -import { stackItemToJSON } from '../StackItems'; - -export const notificationToJSON = (notification: Notification): NotificationJSON => ({ - // scriptcontainer: { - // type: notification.scriptContainer.type, - // container: deserializeScriptContainer(notification.scriptContainer, context), - // }, - scripthash: common.uInt160ToString(notification.scriptHash), - eventname: notification.eventName, - state: notification.state.map((s) => stackItemToJSON(s, undefined)), -}); diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 078623a246..c0afe588b4 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,4 +1,4 @@ -import { UInt256, VMState } from '@neo-one/client-common'; +import { TriggerType, UInt256, VMState } from '@neo-one/client-common'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; import { Notification } from './Notification'; @@ -6,12 +6,6 @@ import { SerializableContainer } from './Serializable'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; -export enum TriggerType { - Verification = 0x00, - System = 0x01, - Application = 0x10, -} - export interface CallReceipt { readonly state: VMState; readonly gasConsumed: number; diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index f988b7ca18..7aeebb09a6 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -20,7 +20,6 @@ import { Nep5Transfer, Nep5TransferKey, Node, - notificationToJSON, Signers, StackItem, stackItemToJSON, @@ -305,7 +304,7 @@ export const createHandler = ({ state: toVMStateJSON(result.state), stack, gasconsumed: result.gasConsumed, - notifications: result.notifications.map(notificationToJSON), + notifications: result.notifications.map((n) => n.serializeJSON()), }; } catch { return { @@ -313,7 +312,7 @@ export const createHandler = ({ state: toVMStateJSON(result.state), stack: 'error: recursive reference', gasconsumed: result.gasConsumed, - notifications: result.notifications.map(notificationToJSON), + notifications: result.notifications.map((n) => n.serializeJSON()), }; } }; @@ -366,7 +365,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'); @@ -578,8 +581,23 @@ export const createHandler = ({ [RPC_METHODS.listplugins]: async () => { throw new JSONRPCError(-101, 'Not implemented'); }, - [RPC_METHODS.getapplicationlog]: 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 diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index ffe4b2fcc4..761b5d34e9 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -14,6 +14,7 @@ export enum Prefix { 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, @@ -145,11 +146,17 @@ const getNep5BalanceSearchRange = createGetSearchRange(Prefix.Nep5Balance); const getNep5TransferReceivedSearchRange = createGetSearchRange(Prefix.Nep5TransferReceived); const getNep5TransferSentSearchRange = createGetSearchRange(Prefix.Nep5TransferSent); +const createApplicationLogKey = getCreateKey({ + serializeKey: (key) => key, + prefix: Prefix.Transaction, +}); + export const keys = { createBlockKey, createNep5BalanceKey, createNep5TransferSentKey, createNep5TransferReceivedKey, + createApplicationLogKey, createTransactionKey, createContractKey, createStorageKey, diff --git a/packages/neo-one-node-storage-levelup/src/convertChange.ts b/packages/neo-one-node-storage-levelup/src/convertChange.ts index c86879b76e..d02fbfa2b5 100644 --- a/packages/neo-one-node-storage-levelup/src/convertChange.ts +++ b/packages/neo-one-node-storage-levelup/src/convertChange.ts @@ -39,6 +39,15 @@ const convertAddChange = (change: AddChange): readonly PutBatch[] => { }, ]; + case 'applicationLog': + return [ + { + type: 'put', + key: keys.createApplicationLogKey(change.key), + value: change.value.serializeWire(), + }, + ]; + case 'block': return [ { diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index ba0bea8f7e..97ed9a9904 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,4 +1,5 @@ import { + ApplicationLog, BinaryReader, BlockKey, ContractIDState, @@ -122,6 +123,12 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage deserializeKey: (buffer) => Nep5TransferKey.deserializeWire({ context, buffer }), }), + applicationLogs: read.createReadStorage({ + db, + serializeKey: keys.createApplicationLogKey, + deserializeValue: (buffer) => ApplicationLog.deserializeWire({ context, buffer }), + }), + transactions: read.createReadStorage({ db, serializeKey: keys.createTransactionKey, diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index 1a3818e3e5..dfe3ca28e5 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -1,10 +1,8 @@ using System; using System.Linq; using Neo.IO; -using Neo.SmartContract; using Neo.VM.Types; using Neo; -using Neo.Network.P2P.Payloads; namespace NEOONE { diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index ebe8cf800e..d2eb50f1fb 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,11 +1,5 @@ -import { common, VMState } from '@neo-one/client-common'; -import { - CallFlags, - SerializableContainer, - serializeScriptContainer, - SnapshotName, - TriggerType, -} from '@neo-one/node-core'; +import { common, TriggerType, VMState } from '@neo-one/client-common'; +import { CallFlags, SerializableContainer, serializeScriptContainer, SnapshotName } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; import { parseStackItems } from './converters'; diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 9b17e08e20..86da4e3e5d 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,5 +1,5 @@ -import { VMState } from '@neo-one/client-common'; -import { CallFlags, SerializedScriptContainer, SnapshotName, TriggerType } from '@neo-one/node-core'; +import { TriggerType, VMState } from '@neo-one/client-common'; +import { CallFlags, SerializedScriptContainer, SnapshotName } from '@neo-one/node-core'; import { StackItemReturn } from '../converters'; import { DefaultMethods, DispatchMethod } from '../types'; diff --git a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts index b2f386b6fc..0b7096f0e7 100644 --- a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts @@ -1,4 +1,4 @@ -import { TriggerType } from '@neo-one/node-core'; +import { TriggerType } from '@neo-one/client-common'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 1b20f0bb9c..993888df5e 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -1,5 +1,4 @@ -import { ScriptBuilder, VMState } from '@neo-one/client-common'; -import { TriggerType } from '@neo-one/node-core'; +import { ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; import { blockchainSettingsToProtocolSettings } from '../utils'; diff --git a/packages/neo-one-node-vm/src/__tests__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts index 1143fa6f26..8c6b16c574 100644 --- a/packages/neo-one-node-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -1,13 +1,5 @@ -import { common, ScriptBuilder, UInt256, WitnessScopeModel } from '@neo-one/client-common'; -import { - assertArrayStackItem, - Block, - ConsensusData, - Signer, - Transaction, - TriggerType, - Witness, -} from '@neo-one/node-core'; +import { common, ScriptBuilder, TriggerType, UInt256, WitnessScopeModel } 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'; 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 d64647db63..7120e9eb88 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -1,5 +1,5 @@ -import { common, ScriptBuilder } from '@neo-one/client-common'; -import { Block, ConsensusData, TriggerType, Witness } from '@neo-one/node-core'; +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 { ApplicationEngine } from '../ApplicationEngine'; From a25b2ecadf5a9592c56d4298da3fc8cb1d8c7b11 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 5 Nov 2020 12:15:38 -0800 Subject: [PATCH 124/141] fix(rpc): fix invokescript method (#2216) --- .../neo-one-client-common/src/models/types.ts | 2 +- .../src/__tests__/provider/temp.test.ts | 38 ++++++------------- .../src/createHandler.ts | 4 +- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 2 +- 4 files changed, 15 insertions(+), 31 deletions(-) diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 979c75fafb..f24324beef 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -494,7 +494,7 @@ export interface NotificationJSON { export interface CallReceiptJSON { readonly script: string; readonly state: keyof typeof VMState; - readonly gasconsumed: number; + readonly gasconsumed: string; readonly stack: readonly StackItemJSON[] | string; readonly notifications: readonly NotificationJSON[]; } 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 index 93c2c0591c..3d399b8bf7 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts @@ -187,18 +187,6 @@ describe('JSONRPCClient Tests', () => { expect(memorypoolmaxtransactions).toBeDefined(); }); - // TODO: run test - // test('getAllStorage', async () => { - // const storages = await client.getAllStorage(Hash160.NEO); - - // expect(storages.length).toEqual(10); - // expect(storages[0]).toEqual({ - // isConstant: false, - // key: 'feffffff0b', - // value: '7ee57ed872ab0a', - // }); - // }); - test('getNep5Balances', async () => { const balances = await client.getNep5Balances(address); @@ -212,7 +200,6 @@ describe('JSONRPCClient Tests', () => { ]); }); - // TODO: why are transfers and received equivalent? test('getNep5Transfers', async () => { const transfers = await client.getNep5Transfers(addressWithTransfers, 1468595301000, 1603753592250); @@ -240,13 +227,12 @@ describe('JSONRPCClient Tests', () => { }); }); - // test('relayTransaction', async () => { - // const receipt = await client.relayTransaction(); - - // // TODO: test - // expect(receipt.transaction).toBeDefined(); - // expect(receipt.verifyResult).toBeDefined(); - // }); + // TODO: run test/ debug + test('relayTransaction', async () => { + const receipt = await client.relayTransaction(Buffer.from([]).toString()); + expect(receipt.transaction).toBeDefined(); + expect(receipt.verifyResult).toBeDefined(); + }); // TODO: run test/ debug test('sendRawTransaction', async () => { @@ -260,16 +246,14 @@ describe('JSONRPCClient Tests', () => { expect(receipt).toEqual(true); }); - // TODO: run test test('testInvokeRaw', async () => { - const { script, state, stack, gasconsumed, notifications } = await client.testInvokeRaw( - new ScriptBuilder().emitOp('PUSH0').build().toString('hex'), - ); + const input = new ScriptBuilder().emitOp('PUSH0').build().toString('hex'); + const { script, state, stack, gasconsumed, notifications } = await client.testInvokeRaw(input); - expect(script).toEqual(''); + expect(script).toEqual('10'); expect(state).toEqual('HALT'); - expect(stack).toEqual([]); - expect(gasconsumed).toEqual('0'); + expect(stack).toEqual([{ type: 'Integer', value: '0' }]); + expect(gasconsumed).toEqual('30'); expect(notifications).toEqual([]); }); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 7aeebb09a6..49d29387d5 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -303,7 +303,7 @@ export const createHandler = ({ script: script.toString('hex'), state: toVMStateJSON(result.state), stack, - gasconsumed: result.gasConsumed, + gasconsumed: common.fixed8FromDecimal(result.gasConsumed.toString()).toString(), notifications: result.notifications.map((n) => n.serializeJSON()), }; } catch { @@ -311,7 +311,7 @@ export const createHandler = ({ script: script.toString('hex'), state: toVMStateJSON(result.state), stack: 'error: recursive reference', - gasconsumed: result.gasConsumed, + gasconsumed: common.fixed8FromDecimal(result.gasConsumed.toString()).toString(), notifications: result.notifications.map((n) => n.serializeJSON()), }; } diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 06bb281b93..2b3bfa09bc 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -159,7 +159,7 @@ private bool _loadScript(Script script, CallFlags flag) private bool _setInstructionPointer(int initialPosition) { this.isEngineInitialized(); - this.engine.LoadClonedContext(initialPosition); + this.engine.CurrentContext.InstructionPointer = initialPosition; return true; } From 31b7a706568d8eca58f13d9c6a3f9de7bd823a96 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Thu, 19 Nov 2020 10:08:01 -0800 Subject: [PATCH 125/141] feat(transactions): fix all transaction stuff, rpc calls, more (#2217) --- packages/neo-one-client-common/src/crypto.ts | 2 + .../src/models/Serializable.ts | 9 +- .../src/models/VerifyResultModel.ts | 2 +- .../transaction/FeelessTransactionModel.ts | 12 +- .../models/transaction/TransactionModel.ts | 4 + .../src/models/transaction/helper.ts | 1 + .../neo-one-client-common/src/models/types.ts | 25 +- .../provider/sendrawtransaction.test.ts | 122 ++++++++ .../src/__tests__/provider/temp.test.ts | 282 +++++------------- .../src/provider/JSONRPCClient.ts | 3 +- .../src/user/LocalUserAccountProvider.ts | 2 +- .../models/manifest/ContractManifestModel.ts | 4 - .../ContractPermissionDescriptorModel.ts | 21 +- .../neo-one-node-blockchain/src/Blockchain.ts | 8 +- packages/neo-one-node-core/src/Block.ts | 7 + packages/neo-one-node-core/src/BlockBase.ts | 10 +- .../neo-one-node-core/src/ConsensusData.ts | 4 +- .../neo-one-node-core/src/ContractState.ts | 14 +- packages/neo-one-node-core/src/Header.ts | 2 + .../neo-one-node-core/src/TrimmedBlock.ts | 6 + .../src/payload/ConsensusPayload.ts | 1 + .../src/payload/UnsignedConsensusPayload.ts | 8 +- .../src/transaction/Transaction.ts | 10 +- .../transaction/attributes/AttributeBase.ts | 2 +- packages/neo-one-node-native/src/GASToken.ts | 2 +- packages/neo-one-node-native/src/NEOToken.ts | 5 +- packages/neo-one-node-native/src/Nep5.ts | 2 + packages/neo-one-node-protocol/src/Node.ts | 2 +- .../src/TransactionVerificationContext.ts | 2 +- .../src/createHandler.ts | 25 +- .../neo-one-node-storage-common/src/keys.ts | 2 +- 31 files changed, 317 insertions(+), 284 deletions(-) create mode 100644 packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index e2a58ea881..8b5a44a698 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -252,6 +252,7 @@ const createInvocationScript = (message: Buffer, privateKey: PrivateKey): Buffer const createVerificationScript = (publicKey: ECPoint): Buffer => { const builder = new ScriptBuilder(); builder.emitPushECPoint(publicKey); + builder.emitOp('PUSHNULL'); builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); return builder.build(); @@ -320,6 +321,7 @@ const createMultiSignatureVerificationScript = (mIn: number, publicKeys: readonl builder.emitPushECPoint(ecPoint); }); builder.emitPushInt(publicKeysSorted.length); + builder.emitOp('PUSHNULL'); builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); return builder.build(); diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 4da4061b9c..c5134e4197 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -18,14 +18,7 @@ export interface SerializableJSON { readonly serializeJSON: () => TJSON; } -/** TODO: revist how the `magic` gets in here. Previously it was passed only as a `DeserializeContext` option - * but now its needed for getting the hash of certain models. Really this is something that should get passed in - * from `Blockchain` or `Settings` - */ - -// mainnet: 5195086 -// testnet: 1951352142 -export const createGetHashData = (serializeWire: () => Buffer, magic = 1951352142) => () => { +export const createGetHashData = (serializeWire: () => Buffer, magic: number) => () => { const writer = new BinaryWriter(); writer.writeUInt32LE(magic); writer.writeBytes(serializeWire()); diff --git a/packages/neo-one-client-common/src/models/VerifyResultModel.ts b/packages/neo-one-client-common/src/models/VerifyResultModel.ts index 39bfcc2b00..f40351a222 100644 --- a/packages/neo-one-client-common/src/models/VerifyResultModel.ts +++ b/packages/neo-one-client-common/src/models/VerifyResultModel.ts @@ -31,7 +31,7 @@ export const assertVerifyResult = (value: number): VerifyResultModel => { return value; }; -export const toJSONVerifyResult = (reason: VerifyResultModel): VerifyResultJSON => +export const toVerifyResultJSON = (reason: VerifyResultModel): VerifyResultJSON => assertVerifyResultJSON(VerifyResultModel[reason]); export const isVerifyResultJSON = (reason: string): reason is VerifyResultJSON => diff --git a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts index 21e79cf971..d03a1f6c3d 100644 --- a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts @@ -12,6 +12,7 @@ import { AttributeModel } from './attribute'; export interface TransactionConsensusOptions { readonly nonce: number; readonly validUntilBlock: number; + readonly messageMagic: number; } export interface TransactionFeesAdd { @@ -26,12 +27,13 @@ export interface FeelessTransactionModelAdd< > { readonly version?: number; readonly nonce?: number; - readonly validUntilBlock?: 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; @@ -58,12 +60,13 @@ export class FeelessTransactionModel< 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(() => createGetHashData(this.serializeUnsigned)()); + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned, this.messageMagic)()); public constructor({ version, @@ -71,9 +74,10 @@ export class FeelessTransactionModel< attributes = [], witnesses = [], signers = [], - validUntilBlock = 0, + validUntilBlock, script, hash, + messageMagic, }: FeelessTransactionModelAdd) { this.version = version === undefined ? DEFAULT_VERSION : version; this.nonce = nonce; @@ -83,6 +87,7 @@ export class FeelessTransactionModel< 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; @@ -117,6 +122,7 @@ export class FeelessTransactionModel< witnesses: this.witnesses, nonce: options.nonce, validUntilBlock: options.validUntilBlock, + messageMagic: this.messageMagic, }); } 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 3e6676d5b0..b568aaa8e4 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -45,6 +45,7 @@ export class TransactionModel< hash, systemFee, networkFee, + messageMagic, }: TransactionModelAdd) { super({ version, @@ -55,6 +56,7 @@ export class TransactionModel< validUntilBlock, script, hash, + messageMagic, }); this.systemFee = systemFee; @@ -75,6 +77,7 @@ export class TransactionModel< networkFee: this.networkFee, nonce: this.nonce, validUntilBlock: this.validUntilBlock, + messageMagic: this.messageMagic, }); } @@ -93,6 +96,7 @@ export class TransactionModel< networkFee: this.networkFee, nonce: options.nonce, validUntilBlock: options.validUntilBlock, + messageMagic: this.messageMagic, }); } diff --git a/packages/neo-one-client-common/src/models/transaction/helper.ts b/packages/neo-one-client-common/src/models/transaction/helper.ts index 3334622b3e..187c7627e0 100644 --- a/packages/neo-one-client-common/src/models/transaction/helper.ts +++ b/packages/neo-one-client-common/src/models/transaction/helper.ts @@ -10,6 +10,7 @@ const addFees = (tx: FeelessTransactionModel, fees: TransactionFeesAdd): Transac witnesses: tx.witnesses, nonce: tx.nonce, validUntilBlock: tx.validUntilBlock, + messageMagic: tx.messageMagic, systemFee: fees.systemFee, networkFee: fees.networkFee, }); diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index f24324beef..b7786cb406 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -320,7 +320,7 @@ export interface TransactionJSON { export interface VerboseTransactionJSON extends TransactionJSON { readonly blockhash: UInt256Hex; readonly confirmations: number; - readonly blocktime: string; + readonly blocktime: number; readonly vmstate: VMStateJSON; } @@ -366,12 +366,7 @@ export interface ContractGroupJSON { readonly signature: string; } -export interface ContractPermissionDescriptorJSON { - readonly hashOrGroup: string; - readonly isHash: boolean; - readonly isGroup: boolean; - readonly isWildcard: boolean; -} +export type ContractPermissionDescriptorJSON = string; export interface ContractPermissionJSON { readonly contract: ContractPermissionDescriptorJSON; @@ -379,9 +374,6 @@ export interface ContractPermissionJSON { } export interface ContractManifestJSON { - readonly hash: string; - // TODO: only hash is included in old `ContractJSON` definition. Remove hashHex? - readonly hashHex: string; readonly abi: ContractABIJSON; readonly groups: readonly ContractGroupJSON[]; readonly permissions: readonly ContractPermissionJSON[]; @@ -402,10 +394,9 @@ export interface ContractParameterDefinitionJSON { export interface ContractJSON { readonly id: number; + readonly hash: string; readonly script: string; readonly manifest: ContractManifestJSON; - readonly hasStorage: boolean; - readonly payable: boolean; } export interface Nep5TransfersJSON { @@ -439,7 +430,7 @@ export interface BlockBaseJSON { readonly version: number; readonly previousblockhash: string; readonly merkleroot: string; - readonly time: string; + readonly time: number; readonly index: number; readonly nextconsensus: string; readonly nextblockhash?: string; @@ -467,7 +458,7 @@ export interface TrimmedBlockJSON extends BlockBaseJSON { } export interface NetworkSettingsJSON { - readonly decrementinternal: number; + readonly decrementinterval: number; readonly generationamount: readonly number[]; readonly privatekeyversion: number; readonly standbyvalidators: readonly string[]; @@ -516,9 +507,13 @@ export interface RelayTransactionResultJSON { readonly verifyResult?: VerifyResultJSON; } +export interface SendRawTransactionResultJSON { + readonly hash: string; +} + export interface ValidatorJSON { readonly active: boolean; - readonly publicKey: string; + readonly publickey: string; readonly votes: string; } 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..9c2e7c3cb9 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts @@ -0,0 +1,122 @@ +import { + common, + crypto, + privateKeyToAddress, + privateKeyToScriptHash, + ScriptBuilder, + scriptHashToAddress, + SignerModel, + TransactionModel, + WitnessModel, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import BN from 'bn.js'; +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))); + }); +}); 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 index 3d399b8bf7..a20c2d6a29 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts @@ -1,72 +1,92 @@ -import { common, ScriptBuilder, TransactionModel } from '@neo-one/client-common'; -import BN from 'bn.js'; +import { common, ScriptBuilder, UInt160 } from '@neo-one/client-common'; +import { Hash160 } from '../../Hash160'; import { JSONRPCClient, JSONRPCHTTPProvider } from '../../provider'; -describe('JSONRPCClient Tests', () => { - const client = new JSONRPCClient(new JSONRPCHTTPProvider('https://staging.neotracker.io/rpc')); +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'; - - test('getBlockHeader', async () => { - const { - version, - hash, - size, - previousblockhash, - merkleroot, - time, - index, - nextconsensus, - nextblockhash, - witnesses, - confirmations, - } = await client.getBlockHeader(1); - - expect(version).toEqual(0); - expect(hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); - expect(size).toEqual(691); - expect(previousblockhash).toEqual('0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45'); - expect(merkleroot).toEqual('0x9ff5ba403c81151c0d031b548fe6cff82ef61a01be72c38ecc81d4bc2f1ee01c'); - expect(time).toEqual('1596537327793'); - expect(index).toEqual(1); - expect(nextconsensus).toEqual('NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL'); - expect(confirmations).toEqual(369993); - expect(nextblockhash).toEqual('0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae'); - expect(witnesses[0].invocation).toEqual( - 'DED/2tpnw4uN5407xKQuwAXw+Hm9L4P51hSMfjwbEcm7pN+aFdn5+d/VxT9ifDX0KQRGlbericqr6h2gQvnJYvHqDECO9w/7PAccs3K3yqAZ4zDTpsnxxDU5EyR1PNNcBUx31lFGyHtjcxhce+YNYxcJc2zOFFk+lFmCBn+ZiF1HZrkPDEBbpwRGODeexXqSws2VQPrOg/BiCNYKmAj3vPW8HvC3ypnly/Hfy8lYF9iZiIighzUALC4QzQpxdq1IdNMSH22jDEAe/l0FF8HXc6e20zT6x0D8XvrITHsKMxxe4S5hGYwojgBDjJPcMwvJbT83AF+sorbZc7SMaCGwT1XOEg+9M0G2DEDOK/OsvMqyKgyHf/gz5QFgQxPjHKuuMoN38+OLuMRP36K4Eunv7oql3KstrgpVIqZHtETEHmxMEFIFXu5hFEa8', - ); - expect(witnesses[0].verification).toEqual( - 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', - ); + // 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); + }); }); - test('getValidators', async () => { - const validators = await client.getValidators(); - const currentPublicKey = '03daca45da7acf52602c630e58af4f45a894a427fa274544cadac5335a9a293d4e'; + // 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')); - expect(validators.length).toEqual(11); - expect(validators.some((val) => val.publicKey === currentPublicKey)); - }); + const hash = common.nativeHashes.Policy; + // 0xce06595079cd69583126dbfd1d2e25cca74cffe9 - test('getTransactionHeight', async () => { - const height = await client.getTransactionHeight(transactionHash); + const maxPerBlock = await getStorageByNum(hash, 23); + expect(maxPerBlock).toEqual('00020000'); - expect(height).toEqual(1); - }); + const feePerByte = await getStorageByNum(hash, 10); + expect(feePerByte).toEqual('e803000000000000'); - test('getunclaimedgas', async () => { - const unclaimed = await client.getUnclaimedGas(address); + const blockedAccounts = await getStorageByNum(hash, 15); + expect(blockedAccounts).toEqual('00'); - expect(unclaimed.address).toEqual(address); - expect(unclaimed.unclaimed).toEqual('0'); - }); + const maxBlockSize = await getStorageByNum(hash, 12); + expect(maxBlockSize).toEqual('00000400'); - test('validateAddress', async () => { - const result = await client.validateAddress(address); - - expect(result.address).toEqual(address); - expect(result.isvalid).toEqual(true); + const maxBlockSysFee = await getStorageByNum(hash, 17); + expect(maxBlockSysFee).toEqual('00282e8cd1000000'); }); test('getSettings', async () => { @@ -75,43 +95,6 @@ describe('JSONRPCClient Tests', () => { expect(settings.millisecondsPerBlock).toEqual(15000); }); - test('getBlock', async () => { - const block = await client.getBlock(1); - - expect(block).toBeDefined(); - expect(block.hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); - expect(block.nextconsensus).toEqual('NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL'); - expect(block.tx).toEqual([]); - }); - - test('getBestBlockHash', async () => { - const hash = await client.getBestBlockHash(); - - expect(hash).toBeDefined(); - expect(hash.length).toBe(66); - expect(common.isUInt256(common.stringToUInt256(hash))).toBeTruthy(); - }); - - test('getBlockCount', async () => { - const count = await client.getBlockCount(); - - expect(count).toBeGreaterThan(343360); - }); - - test('getMemPool', async () => { - const mempool = await client.getMemPool(); - - expect(mempool.height).toBeGreaterThan(343360); - expect(mempool.verified).toEqual([]); - }); - - test('getTransaction', async () => { - const transaction = await client.getTransaction(transactionHash); - - expect(transaction.hash).toEqual(transactionHash); - expect(transaction.blockhash).toEqual('0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45'); - }); - test('getTransactionReceipt', async () => { const receipt = await client.getTransactionReceipt(transactionHash); @@ -119,26 +102,14 @@ describe('JSONRPCClient Tests', () => { expect(receipt.blockIndex).toEqual(0); expect(receipt.globalIndex).toEqual('-1'); expect(receipt.transactionHash).toEqual(transactionHash); - expect(receipt.confirmations).toBeGreaterThan(345557); + expect(receipt.confirmations).toBeDefined(); expect(receipt.blockTime).toEqual('1468595301000'); }); - test('getTransactionHeight', async () => { - const height = await client.getTransactionHeight(transactionHash); - - expect(height).toEqual(0); - }); - - test('getBlockHash', async () => { - const hash = await client.getBlockHash(1); - - expect(hash).toEqual('0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5'); - }); - test('getConnectionCount', async () => { const count = await client.getConnectionCount(); - expect(count).toBeGreaterThan(1); + expect(count).toBeGreaterThanOrEqual(1); }); test('getVersion', async () => { @@ -160,7 +131,7 @@ describe('JSONRPCClient Tests', () => { test('getNetworkSettings', async () => { const { - decrementinternal, + decrementinterval, generationamount, privatekeyversion, standbyvalidators, @@ -173,9 +144,8 @@ describe('JSONRPCClient Tests', () => { memorypoolmaxtransactions, } = await client.getNetworkSettings(); - expect(decrementinternal).toBeDefined(); + expect(decrementinterval).toBeDefined(); expect(generationamount).toBeDefined(); - expect(decrementinternal).toBeDefined(); expect(privatekeyversion).toBeDefined(); expect(standbyvalidators).toBeDefined(); expect(messagemagic).toBeDefined(); @@ -186,96 +156,4 @@ describe('JSONRPCClient Tests', () => { expect(millisecondsperblock).toBeDefined(); expect(memorypoolmaxtransactions).toBeDefined(); }); - - test('getNep5Balances', async () => { - const balances = await client.getNep5Balances(address); - - expect(balances.address).toEqual(address); - expect(balances.balance).toEqual([ - { - amount: '8995481360', - assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', - lastupdatedblock: 5284, - }, - ]); - }); - - test('getNep5Transfers', async () => { - const transfers = await client.getNep5Transfers(addressWithTransfers, 1468595301000, 1603753592250); - - expect(transfers.address).toEqual(addressWithTransfers); - expect(transfers.received.length).toEqual(3); - expect(transfers.sent.length).toEqual(3); - expect(transfers.sent).not.toEqual(transfers.received); - expect(transfers.received[0]).toEqual({ - amount: '50000000000', - assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', - blockindex: 74129, - timestamp: 1597856421280, - transferaddress: '0x31248a51a630048a3fa00c3cfed7428a76d320ad', - transfernotifyindex: 0, - txhash: '0x57726a30d9efb510017d698f0fc55e54586bed7878f05b867884bb03dd07aa64', - }); - expect(transfers.sent[0]).toEqual({ - amount: '50000000000', - assethash: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', - blockindex: 74129, - timestamp: 1597856421280, - transferaddress: '0x31248a51a630048a3fa00c3cfed7428a76d320ad', - transfernotifyindex: 0, - txhash: '0x57726a30d9efb510017d698f0fc55e54586bed7878f05b867884bb03dd07aa64', - }); - }); - - // TODO: run test/ debug - test('relayTransaction', async () => { - const receipt = await client.relayTransaction(Buffer.from([]).toString()); - expect(receipt.transaction).toBeDefined(); - expect(receipt.verifyResult).toBeDefined(); - }); - - // TODO: run test/ debug - test('sendRawTransaction', async () => { - const transaction = new TransactionModel({ - systemFee: new BN(0), - networkFee: new BN(0), - script: new ScriptBuilder().emitOp('PUSH0').build(), - }); - const receipt = await client.sendRawTransaction(transaction.serializeWire().toString('hex')); - - expect(receipt).toEqual(true); - }); - - test('testInvokeRaw', async () => { - const input = new ScriptBuilder().emitOp('PUSH0').build().toString('hex'); - const { script, state, stack, gasconsumed, notifications } = await client.testInvokeRaw(input); - - expect(script).toEqual('10'); - expect(state).toEqual('HALT'); - expect(stack).toEqual([{ type: 'Integer', value: '0' }]); - expect(gasconsumed).toEqual('30'); - expect(notifications).toEqual([]); - }); - - test('getApplicationLog', async () => { - const { gasconsumed, notifications, stack, trigger, txid, vmstate } = await client.getApplicationLog( - transactionHash, - ); - - expect(gasconsumed).toEqual('0'); - expect(stack).toEqual([]); - expect(trigger).toEqual('Application'); - expect(vmstate).toEqual('HALT'); - expect(txid).toEqual(transactionHash); - expect(notifications.length).toEqual(2); - expect(notifications[0]).toEqual({ - eventname: 'Transfer', - scripthash: '0xde5f57d430d3dece511cf975a8d37848cb9e0525', - state: [ - { type: 'Any' }, - { type: 'ByteString', value: '4KPFXK1yAo+1kBdIsZonviH2VAQ=' }, - { type: 'Integer', value: '100000000' }, - ], - }); - }); }); diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index d94ff01a53..47adbe08df 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -16,6 +16,7 @@ import { PrivateNetworkSettings, RawInvocationResultJSON, RelayTransactionResultJSON, + SendRawTransactionResultJSON, StorageItemJSON, TransactionReceiptJSON, UnclaimedGASJSON, @@ -127,7 +128,7 @@ export class JSONRPCClient { ); } - public async sendRawTransaction(value: BufferString): Promise { + public async sendRawTransaction(value: BufferString): Promise { return this.withInstance(async (provider) => provider .request({ diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 83955dc39a..ad6207010b 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -175,7 +175,7 @@ export class LocalUserAccountProvider { const signature = await this.keystore.sign({ account: from, - message: transactionUnsigned.serializeUnsigned().toString('hex'), + message: transactionUnsigned.message.toString('hex'), }); const userAccount = this.getUserAccount(from); 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 index 76d7b7edf9..9f2a0fd509 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -85,10 +85,6 @@ export class ContractManifestModel< public serializeJSON(): ContractManifestJSON { return { - // TODO: not sure if hash and hashHex should be returned here - // we serialize hash but not hashHex in old `Contract.ts` - hash: JSONHelper.writeUInt160(this.hash), - hashHex: this.hashHex, groups: this.groups.map((group) => group.serializeJSON()), features: { storage: this.hasStorage, 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 index 80b6300e0c..386a5919a6 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts @@ -32,27 +32,12 @@ export class ContractPermissionDescriptorModel implements SerializableJSON { readonly merkleRoot?: UInt256; readonly consensusData?: ConsensusData; readonly transactions: readonly Transaction[]; + readonly messageMagic: number; } // export interface BlockVerifyOptions { @@ -102,6 +103,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa nextConsensus: blockBase.nextConsensus, witness: blockBase.witness, transactions, + messageMagic: options.context.messageMagic, }); } @@ -128,6 +130,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa index: this.index, nextConsensus: this.nextConsensus, witness: this.witness, + messageMagic: this.messageMagic, }), ); @@ -145,6 +148,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa witness, hash, transactions, + messageMagic, merkleRoot = MerkleTree.computeRoot(getCombinedModels(transactions, consensusData).map((model) => model.hash)), }: BlockAdd) { super({ @@ -156,6 +160,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa nextConsensus, witness, hash, + messageMagic, }); this.transactions = transactions; @@ -185,6 +190,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa index: this.index, consensusData: this.consensusData, nextConsensus: this.nextConsensus, + messageMagic: this.messageMagic, transactions, witness, }); @@ -218,6 +224,7 @@ export class Block extends BlockBase implements SerializableContainer, Serializa witness: this.witness, hashes: this.allHashes, consensusData: this.consensusData, + messageMagic: this.messageMagic, }); } } diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index dc29f5e13a..8b22c08194 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -34,6 +34,7 @@ export interface BlockBaseAdd { readonly timestamp: BN; readonly index: number; readonly nextConsensus: UInt160; + readonly messageMagic: number; readonly witness?: Witness; readonly hash?: UInt256; } @@ -58,6 +59,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, index, nextConsensus, witness: witnesses[0], + messageMagic: options.context.messageMagic, }; } public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): BlockBaseAdd { @@ -77,6 +79,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, timestamp, index, nextConsensus, + messageMagic: options.context.messageMagic, }; } @@ -87,6 +90,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, public readonly timestamp: BN; public readonly index: number; public readonly nextConsensus: UInt160; + public readonly messageMagic: number; public readonly getScriptHashesForVerifying = utils.lazyAsync( async (context: { readonly storage: BlockchainStorage }) => { if (this.previousHash === common.ZERO_UINT256) { @@ -112,7 +116,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, 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(() => createGetHashData(this.serializeUnsigned)()); + private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeUnsigned, this.messageMagic)()); private readonly witnessInternal: Witness | undefined; private readonly sizeInternal = utils.lazy( () => @@ -136,6 +140,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, nextConsensus, witness, hash, + messageMagic, }: BlockBaseAdd) { this.version = version; this.previousHash = previousHash; @@ -144,6 +149,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, this.index = index; this.nextConsensus = nextConsensus; this.witnessInternal = witness; + this.messageMagic = messageMagic; const hashIn = hash; this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; } @@ -198,7 +204,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, size: this.size, previousblockhash: JSONHelper.writeUInt256(this.previousHash), merkleroot: JSONHelper.writeUInt256(this.merkleRoot), - time: JSONHelper.writeUInt64(this.timestamp), + time: this.timestamp.toNumber(), index: this.index, nextconsensus: crypto.scriptHashToAddress({ addressVersion: context.addressVersion, diff --git a/packages/neo-one-node-core/src/ConsensusData.ts b/packages/neo-one-node-core/src/ConsensusData.ts index 33dcfc903f..20a089fe68 100644 --- a/packages/neo-one-node-core/src/ConsensusData.ts +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -1,4 +1,4 @@ -import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, JSONHelper, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; import { DEFAULT_VALIDATORS_COUNT } from './constants'; import { @@ -56,7 +56,7 @@ export class ConsensusData implements SerializableWire, SerializableJSON { }); } - public serializeJSON() { + public serializeJSON(): ContractJSON { return { id: this.id, hash: JSONHelper.writeUInt160(this.scriptHash), - script: JSONHelper.writeBuffer(this.script), + script: JSONHelper.writeBase64Buffer(this.script), manifest: this.manifest.serializeJSON(), }; } diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index ea15f794bd..6e560c0536 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -36,6 +36,7 @@ export class Header extends BlockBase implements SerializableWire, SerializableJ index: blockBase.index, nextConsensus: blockBase.nextConsensus, witness: blockBase.witness, + messageMagic: options.context.messageMagic, }); } @@ -59,6 +60,7 @@ export class Header extends BlockBase implements SerializableWire, SerializableJ nextConsensus: this.nextConsensus, witness: this.witness, hashes: [], + messageMagic: this.messageMagic, }); } diff --git a/packages/neo-one-node-core/src/TrimmedBlock.ts b/packages/neo-one-node-core/src/TrimmedBlock.ts index 1eb8bf8c74..d6279d97d8 100644 --- a/packages/neo-one-node-core/src/TrimmedBlock.ts +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -46,6 +46,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { witness, hashes, consensusData, + messageMagic: options.context.messageMagic, }); } @@ -76,6 +77,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { index: this.index, nextConsensus: this.nextConsensus, witness: this.witness, + messageMagic: this.messageMagic, }), ); @@ -90,6 +92,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { hash, consensusData, hashes, + messageMagic, }: TrimmedBlockAdd) { super({ version, @@ -100,6 +103,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { nextConsensus, witness, hash, + messageMagic, }); this.consensusData = consensusData; this.hashes = hashes; @@ -127,6 +131,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { return state.transaction; }), ), + messageMagic: this.messageMagic, }); } @@ -142,6 +147,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { witness: this.witness, hashes: this.hashes, consensusData: this.consensusData, + messageMagic: this.messageMagic, ...options, }); } diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index ae462501a6..78674ef3ff 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -44,6 +44,7 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial validatorIndex, data, witness, + magic: options.context.messageMagic, }); } diff --git a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts index 265b90d396..5f614ce791 100644 --- a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts @@ -11,7 +11,7 @@ export interface UnsignedConsensusPayloadAdd { readonly data?: Buffer; readonly getConsensusMessage?: () => ConsensusMessage; readonly consensusMessage?: ConsensusMessage; - readonly magic?: number; + readonly magic: number; } export class UnsignedConsensusPayload implements SerializableWire { @@ -56,7 +56,7 @@ export class UnsignedConsensusPayload implements SerializableWire { public readonly previousHash: UInt256; public readonly blockIndex: number; public readonly validatorIndex: number; - public readonly magic: number | undefined; + public readonly magic: number; public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly consensusMessageInternal: (() => ConsensusMessage) | undefined; @@ -86,8 +86,8 @@ export class UnsignedConsensusPayload implements SerializableWire { public get consensusMessage() { if (this.consensusMessageInternal === undefined) { - // TODO: Implement an error here; - throw new Error('need a way to get consensusMessage'); + // TODO: Implement an error here + throw new Error('Need a way to get consensusMessage'); } return this.consensusMessageInternal(); diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 9ae4d37cda..5a131fcaca 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -36,7 +36,7 @@ export type TransactionAddUnsigned = Omit signer.serializeJSON()), attributes: this.attributes.map((attr) => attr.serializeJSON()), diff --git a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts index 4d07094030..00dbd0db33 100644 --- a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts +++ b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts @@ -6,7 +6,7 @@ import { IOHelper, toJSONAttributeType, } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; +import { DeserializeWireBaseOptions, SerializableJSON } from '../../Serializable'; import { VerifyOptions } from '../../Verifiable'; import { Transaction } from '../Transaction'; diff --git a/packages/neo-one-node-native/src/GASToken.ts b/packages/neo-one-node-native/src/GASToken.ts index d372c899e4..64ac350091 100644 --- a/packages/neo-one-node-native/src/GASToken.ts +++ b/packages/neo-one-node-native/src/GASToken.ts @@ -1,7 +1,7 @@ import { NEP5NativeContract } from './Nep5'; export class GASToken extends NEP5NativeContract { - public static readonly decimals: 8; + public static readonly decimals: number = 8; public constructor() { super({ id: -2, diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts index cf639690b2..426b0f1887 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -145,6 +145,9 @@ export class NEOToken extends NEP5NativeContract { amount = amount.addn((iend - istart) * this.settings.generationAmount[ustart]); } - return common.fixedFromDecimal(amount.mul(value), GASToken.decimals).div(this.totalAmount); + return common + .fixedFromDecimal(amount.mul(value), GASToken.decimals) + .mul(new BN(10 ** GASToken.decimals)) + .div(this.totalAmount); } } diff --git a/packages/neo-one-node-native/src/Nep5.ts b/packages/neo-one-node-native/src/Nep5.ts index b2061f16e3..642c6fbcb8 100644 --- a/packages/neo-one-node-native/src/Nep5.ts +++ b/packages/neo-one-node-native/src/Nep5.ts @@ -11,6 +11,7 @@ export interface NEP5NativeContractAdd extends NativeContractAdd { export abstract class NEP5NativeContract extends NativeContract { public readonly symbol: string; public readonly decimals: number; + public readonly factor: BN; protected readonly totalSupplyPrefix = Buffer.from([11]); protected readonly accountPrefix = Buffer.from([20]); @@ -19,6 +20,7 @@ export abstract class NEP5NativeContract extends NativeContract { super(options); this.symbol = options.symbol; this.decimals = options.decimals; + this.factor = new BN(10 ** this.decimals); } public async totalSupply({ storages }: NativeContractStorageContext): Promise { diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index df124ce791..d690f29510 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -290,7 +290,7 @@ export class Node implements INode { this.mutableMemPool = {}; this.transactionVerificationContext = new TransactionVerificationContext({ - getGasBalance: native.GAS.balanceOf, + getGasBalance: native.GAS.balanceOf.bind(native.GAS), }); this.mutableKnownBlockHashes = createScalingBloomFilter(); this.tempKnownBlockHashes = new Set(); diff --git a/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts b/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts index d1face8582..f0bd31c897 100644 --- a/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts +++ b/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts @@ -45,7 +45,7 @@ export class TransactionVerificationContext { const maybeFee = this.mutableSenderFee[key]; if (maybeFee === undefined) { // TODO: implement error; - throw new Error('transaction not present in verification context to remove'); + throw new Error('Transaction not present in verification context to remove'); } const newFee = maybeFee.sub(tx.systemFee).sub(tx.networkFee); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 49d29387d5..ece9195aab 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -5,11 +5,12 @@ import { JSONHelper, RelayTransactionResultJSON, scriptHashToAddress, - toJSONVerifyResult, + toVerifyResultJSON, toVMStateJSON, TransactionJSON, TransactionReceiptJSON, VerboseTransactionJSON, + VerifyResultModel, } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { @@ -444,7 +445,7 @@ export const createHandler = ({ return tx.serializeJSONWithVerboseData({ blockhash: JSONHelper.writeUInt256(header.hash), confirmations: blockchain.currentBlockIndex - header.index + 1, - blocktime: JSONHelper.writeUInt64LE(header.timestamp), + blocktime: header.timestamp.toNumber(), vmstate: toVMStateJSON(state.state), }); } @@ -479,7 +480,7 @@ export const createHandler = ({ ]); return candidates.map((candidate) => ({ - publicKey: JSONHelper.writeECPoint(candidate.publicKey), + publickey: JSONHelper.writeECPoint(candidate.publicKey), votes: candidate.votes.toString(), active: validators.some((validator) => validator.compare(candidate.publicKey) === 0), })); @@ -520,11 +521,17 @@ export const createHandler = ({ }); 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 () => { @@ -724,7 +731,7 @@ export const createHandler = ({ const transactionJSON = transaction.serializeJSON(); const result = await node.relayTransaction(transaction, { forceAdd: true, throwVerifyError: true }); - const resultJSON = result.verifyResult !== undefined ? toJSONVerifyResult(result.verifyResult) : undefined; + const resultJSON = result.verifyResult !== undefined ? toVerifyResultJSON(result.verifyResult) : undefined; // const resultJSON = // result.verifyResult === undefined @@ -848,7 +855,7 @@ export const createHandler = ({ decrementinterval: decrementInterval, generationamount: generationAmount, privatekeyversion: privateKeyVersion, - standbydalidators: standbyValidators.map((val) => common.ecPointToString(val)), + standbyvalidators: standbyValidators.map((val) => common.ecPointToString(val)), messagemagic: messageMagic, addressversion: addressVersion, standbycommittee: standbyCommittee.map((val) => common.ecPointToString(val)), diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index 761b5d34e9..d275c824f2 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -148,7 +148,7 @@ const getNep5TransferSentSearchRange = createGetSearchRange(Prefix.Nep5TransferS const createApplicationLogKey = getCreateKey({ serializeKey: (key) => key, - prefix: Prefix.Transaction, + prefix: Prefix.ApplicationLog, }); export const keys = { From 436b78e43373473064ab3e3ae0596c756cd3f1c4 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Thu, 19 Nov 2020 14:53:42 -0800 Subject: [PATCH 126/141] fix(nep5): fix nep5 tracking error (#2219) --- packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts index 394581297f..ba2ce55b4f 100644 --- a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts +++ b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts @@ -92,7 +92,7 @@ export function getNep5UpdateOptions({ if (toBytes !== undefined) { to = common.bufferToUInt160(toBytes); - const toKey = new Nep5BalanceKey({ userScriptHash: from, assetScriptHash: scriptHash }); + const toKey = new Nep5BalanceKey({ userScriptHash: to, assetScriptHash: scriptHash }); const toKeyString = toKey.serializeWire().toString('hex'); if (!nep5BalancesChanged.has(toKeyString)) { nep5BalancesChanged.add(toKeyString); From f61dd90dfc4f30c440b2dc38cf4e5420f2189d77 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Fri, 20 Nov 2020 14:21:14 -0800 Subject: [PATCH 127/141] fix(client): fix more client apis (#2220) --- packages/neo-one-cli/src/compile/interop.ts | 26 ++- .../neo-one-cli/src/console/startConsole.ts | 4 +- .../neo-one-cli/src/deploy/runMigration.ts | 4 +- .../neo-one-client-common/src/models/types.ts | 10 - packages/neo-one-client-common/src/types.ts | 194 +++++++++++------ .../provider/sendrawtransaction.test.ts | 1 + packages/neo-one-client-core/src/args.ts | 51 ++--- packages/neo-one-client-core/src/nep5.ts | 8 +- .../src/provider/JSONRPCClient.ts | 4 +- .../src/provider/NEOONEDataProvider.ts | 203 +++++------------- .../src/provider/NEOONEProvider.ts | 11 +- .../src/provider/convert.ts | 18 +- .../src/user/LocalUserAccountProvider.ts | 2 +- .../src/user/UserAccountProviderBase.ts | 18 +- 14 files changed, 246 insertions(+), 308 deletions(-) diff --git a/packages/neo-one-cli/src/compile/interop.ts b/packages/neo-one-cli/src/compile/interop.ts index 19cb6856fc..362ee538b5 100644 --- a/packages/neo-one-cli/src/compile/interop.ts +++ b/packages/neo-one-cli/src/compile/interop.ts @@ -1,4 +1,4 @@ -import { ABI } from '@neo-one/client'; +import { ContractABI } from '@neo-one/client'; import { common, crypto } from '@neo-one/client-common'; const jmpABI = { @@ -69,13 +69,13 @@ const convertABIMetadata = (metadata: NEOONEContractMetadata) => ({ 'is-payable': metadata.payable, }); -const convertABI = (abi: ABI, metadata: NEOONEContractMetadata, script: Buffer) => ({ +const convertABI = (abi: ContractABI, metadata: NEOONEContractMetadata, script: Buffer) => ({ hash: common.uInt160ToHex(crypto.toScriptHash(script)), entrypoint: '@Jmp', functions: [ jmpABI, dispatcherABI, - ...abi.functions.map((func) => ({ + ...abi.methods.map((func) => ({ name: func.name, parameters: func.parameters ? func.parameters.map(({ name, type }) => ({ @@ -83,19 +83,17 @@ const convertABI = (abi: ABI, metadata: NEOONEContractMetadata, script: Buffer) type, })) : [], - returntype: func.returnType.type, + returntype: func.returnType, })), ], - events: abi.events - ? abi.events.map((event) => ({ - name: event.name, - parameters: event.parameters.map(({ name, type }) => ({ - name, - type, - })), - returntype: 'Void', - })) - : [], + events: abi.events.map((event) => ({ + name: event.name, + parameters: event.parameters.map(({ name, type }) => ({ + name, + type, + })), + returntype: 'Void', + })), metadata: convertABIMetadata(metadata), }); 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 fd693c0bf4..06da26ac80 100644 --- a/packages/neo-one-cli/src/deploy/runMigration.ts +++ b/packages/neo-one-cli/src/deploy/runMigration.ts @@ -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-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index b7786cb406..d72e1a94d3 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -221,13 +221,6 @@ export interface UnclaimedGASJSON { export interface StackItemJSONBase { readonly type: StackItemJSON['type']; - // readonly value: - // | string - // | number - // | boolean - // | readonly StackItemJSON[] - // | undefined - // | ReadonlyArray<{ readonly key: PrimitiveStackItemJSON; readonly value: StackItemJSON }>; } export interface AnyStackItemJSON extends StackItemJSONBase { @@ -278,8 +271,6 @@ export type StackItemJSON = | PrimitiveStackItemJSON | BufferStackItemJSON | ArrayStackItemJSON - // | StructStackItemJSON - // | InteropInterfaceStackItemJSON | MapStackItemJSON; export interface ExecutionResultJSON { @@ -327,7 +318,6 @@ export interface VerboseTransactionJSON extends TransactionJSON { export interface TransactionWithInvocationDataJSON extends TransactionJSON { readonly script: string; readonly gas: string; - readonly invocationData?: InvocationDataJSON | undefined; } export interface TransactionReceiptJSON { diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index aa107eaec8..6719320a2c 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -5,7 +5,16 @@ import { BN } from 'bn.js'; import { Observable } from 'rxjs'; import { RawSourceMap } from 'source-map'; import { ECPoint, UInt160, UInt160Hex, UInt256 } from './common'; -import { AttributeTypeModel, VMState, Wildcard } from './models'; +import { + AttributeTypeModel, + NotificationJSON, + StackItemJSON, + TriggerTypeJSON, + VerifyResultModel, + VMState, + VMStateJSON, + Wildcard, +} from './models'; /** * Base58 encoded string that represents a NEO address. @@ -123,7 +132,7 @@ export interface Signer { /** * Array of contract groups that this address can verify. */ - readonly allowedGroups?: readonly ECPoint[]; + readonly allowedGroups?: readonly PublicKeyString[]; } /** @@ -196,7 +205,7 @@ export interface ConfirmedTransaction extends Transaction { /** * 'Receipt' of the confirmed transaction on the blockchain. This contains properties like the block the `Transaction` was included in. */ - readonly receipt: TransactionReceipt; + readonly receipt?: TransactionReceipt; } /** @@ -290,7 +299,7 @@ export interface TransactionReceipt { /** * `Block` time of the `Transaction` for this receipt. */ - readonly blockTime: number; + readonly blockTime: string; /** * Transaction index of the `Transaction` within the `Block` for this receipt. */ @@ -1398,7 +1407,7 @@ export interface ContractABIClient { /** * Script hash of the contract. */ - readonly hash: UInt160; + readonly hash: UInt160Hex; /** * TODO: describe * Specification of the smart contract methods. @@ -1420,7 +1429,7 @@ export interface ContractABI { /** * Script hash of the contract. */ - readonly hash: UInt160; + readonly hash: UInt160Hex; /** * Specification of the smart contract methods. */ @@ -1439,9 +1448,8 @@ export interface ContractABI { export interface ContractGroup { /** * The public key identifying the group. - * TODO: should this be some sort of string? Like ECPointString? */ - readonly publicKey: ECPoint; + readonly publicKey: PublicKeyString; /** * Signature of the contract hash. */ @@ -1477,21 +1485,7 @@ export type WildcardContainer = readonly T[] | 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 interface ContractPermissionDescriptor { - readonly hashOrGroup: UInt160 | ECPoint | Wildcard; - /** - * True if the permission is for a `UInt160`. - */ - readonly isHash: boolean; - /** - * True if the permission is for an `ECPoint`, representing a `ContractGroup`. - */ - readonly isGroup: boolean; - /** - * True if the permission is a wildcard (*), meaning any group or address can call this `Contract`. - */ - readonly isWildcard: boolean; -} +export type ContractPermissionDescriptor = UInt160Hex | PublicKeyString | Wildcard; /** * Describes which contracts may be invoked and which methods are called. @@ -1517,13 +1511,7 @@ export interface ContractManifestClient { /** * The `Contract`'s hash. */ - readonly hash: UInt160; - /** - * The `Contract`'s hash as a hex string. - * TODO: we didn't include hashHex in the old `Contract` type definition - * Not sure if it belongs in this type here - */ - readonly hashHex: UInt160Hex; + readonly hash: UInt160Hex; /** * Set of mutually trusted contracts. */ @@ -1552,7 +1540,7 @@ export interface ContractManifestClient { /** * The trusts field is an array containing a set of contract hashes or group of public keys. */ - readonly trusts: WildcardContainer; + readonly trusts: WildcardContainer; /** * The safeMethods field is an array containing a set of safe methods. */ @@ -1576,16 +1564,6 @@ export interface ContractManifestClient { * it will be limited by its declared list of features and permissions. */ export interface ContractManifest { - /** - * The `Contract`'s hash. - */ - readonly hash: UInt160; - /** - * The `Contract`'s hash as a hex string. - * TODO: we didn't include hashHex in the old `Contract` type definition - * Not sure if it belongs in this type here - */ - readonly hashHex: UInt160Hex; /** * Set of mutually trusted contracts. */ @@ -1594,7 +1572,13 @@ export interface ContractManifest { * The features field describes what features are available for the contract. */ readonly features: { + /** + * True if the `Contract` modified blockchain storage. + */ readonly storage: boolean; + /** + * True if the `Contract` can receive assets. + */ readonly payable: boolean; }; /** @@ -1613,7 +1597,7 @@ export interface ContractManifest { /** * The trusts field is an array containing a set of contract hashes or group of public keys. */ - readonly trusts: WildcardContainer; + readonly trusts: WildcardContainer; /** * The safeMethods field is an array containing a set of safe methods. */ @@ -1627,7 +1611,7 @@ export interface ContractManifest { */ readonly hasStorage: boolean; /** - * True if the `Contract` can receive native assets. + * True if the `Contract` can receive assets. */ readonly payable: boolean; } @@ -1749,17 +1733,13 @@ export interface Contract { */ readonly script: BufferString; /** - * The `Contract`'s manifest. - */ - readonly manifest: ContractManifest; - /** - * True if the `Contract` modified blockchain storage. + * The `Contract`'s script hash. */ - readonly hasStorage: boolean; + readonly hash: UInt160Hex; /** - * True if the `Contract` can receive native assets. + * The `Contract`'s manifest. */ - readonly payable: boolean; + readonly manifest: ContractManifest; } /* BEGIN LOW-LEVEL API */ @@ -2209,7 +2189,7 @@ export type RawStorageChange = RawStorageChangeAdd | RawStorageChangeModify | Ra export interface RawCallReceipt { readonly state: keyof typeof VMState; readonly script: Buffer; - readonly gasConsumed: number; + readonly gasConsumed: BigNumber; readonly stack: readonly RawStackItem[] | string; readonly notifications: readonly NewRawNotification[]; } @@ -2219,17 +2199,58 @@ export interface RawCallReceipt { * * Low-level API for advanced usage only. */ -export interface RawStackItem { - readonly type: string; - readonly value: - | boolean - | Buffer - | string - | undefined - | BigNumber - | number - | Map - | ReadonlyArray; +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: Buffer; +} + +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; } /** @@ -2240,8 +2261,7 @@ export interface RawStackItem { export interface NewRawNotification { readonly scriptHash: UInt160; readonly eventName: string; - readonly state: readonly RawStackItem[]; - // readonly scriptContainer: any; + readonly state: readonly RawStackItem[] | string; } /** @@ -2325,7 +2345,7 @@ export interface RelayTransactionResult { /** * Verification result. */ - readonly verifyResult?: VerifyTransactionResult; + readonly verifyResult?: VerifyResultModel; } /** @@ -2358,6 +2378,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. @@ -2376,7 +2426,17 @@ export type ParamJSON = * Constant settings used to initialize the client APIs. */ export interface NetworkSettings { - readonly issueGASFee: BigNumber; + 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-core/src/__tests__/provider/sendrawtransaction.test.ts b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts index 9c2e7c3cb9..70235a18e9 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts @@ -3,6 +3,7 @@ import { crypto, privateKeyToAddress, privateKeyToScriptHash, + publicKeyToAddress, ScriptBuilder, scriptHashToAddress, SignerModel, diff --git a/packages/neo-one-client-core/src/args.ts b/packages/neo-one-client-core/src/args.ts index 499f38b4ed..8c8d3cd1a5 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -23,7 +23,6 @@ import { ContractParameter, ContractPermission, ContractPermissionDescriptor, - ECPoint, ForwardValue, Hash256String, InvokeSendUnsafeReceiveTransactionOptions, @@ -41,7 +40,7 @@ import { toAttributeType, TransactionOptions, Transfer, - UInt160, + UInt160Hex, UpdateAccountNameOptions, UserAccountID, wifToPrivateKey, @@ -141,6 +140,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); @@ -629,7 +638,7 @@ export const assertContractABIClient = (name: string, value?: unknown): Contract } return { - hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160), + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160Hex), methods: assertProperty(value, 'ContractABI', 'methods', assertArray).map((method) => assertContractMethodDescriptorClient('ContractABI.methods', method), ), @@ -645,7 +654,7 @@ export const assertContractABI = (name: string, value?: unknown): ContractABI => } return { - hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160), + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160Hex), methods: assertProperty(value, 'ContractABI', 'methods', assertArray).map((method) => assertContractMethodDescriptor('ContractABI.methods', method), ), @@ -733,39 +742,25 @@ export const assertNullableJSON = (name: string, value?: unknown): JSONObject => return value; }; -const assertUInt160 = (name: string, value?: unknown): UInt160 => { - const valueIn = assertString(name, value); - - return common.stringToUInt160(valueIn); -}; - -// TODO: should this assert some sort of string? Like an ECPointString? -const assertECPoint = (name: string, value?: unknown): ECPoint => { - const valueIn = assertString(name, value); - - return common.stringToECPoint(valueIn); -}; - -// TODO: check logic here -const assertHashOrGroup = (name: string, value?: unknown): ECPoint | UInt160 | Wildcard => { +const assertHashOrGroup = (name: string, value?: unknown): PublicKeyString | UInt160Hex | Wildcard => { const valueIn = assertString(name, value); if (valueIn === '*') { return '*'; } try { - return assertUInt160(valueIn); + return assertUInt160Hex(name, valueIn); } catch { // do nothing } try { - return assertECPoint(valueIn); + return assertPublicKey(name, valueIn); } catch { // do nothing } - return '*'; + throw new InvalidArgumentError('HashOrGroup', name, value); }; export const assertContractManifestClient = (name: string, value?: unknown): ContractManifestClient => { @@ -774,8 +769,7 @@ export const assertContractManifestClient = (name: string, value?: unknown): Con } return { - hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160), - hashHex: assertProperty(value, 'ContractManifest', 'hashHex', assertString), + hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160Hex), groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => assertContractGroup('ContractManifest.groups', group), ), @@ -790,7 +784,7 @@ export const assertContractManifestClient = (name: string, value?: unknown): Con permissions: assertProperty(value, 'ContractManifest', 'permissions', assertArray).map((permission) => assertContractPermission('ContractManifest.permissions', permission), ), - trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160), + trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), @@ -804,8 +798,7 @@ export const assertContractManifest = (name: string, value?: unknown): ContractM } return { - hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160), - hashHex: assertProperty(value, 'ContractManifest', 'hashHex', assertString), + hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160Hex), groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => assertContractGroup('ContractManifest.groups', group), ), @@ -820,7 +813,7 @@ export const assertContractManifest = (name: string, value?: unknown): ContractM permissions: assertProperty(value, 'ContractManifest', 'permissions', assertArray).map((permission) => assertContractPermission('ContractManifest.permissions', permission), ), - trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160), + trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), @@ -858,7 +851,7 @@ const assertContractGroup = (name: string, value?: unknown): ContractGroup => { } return { - publicKey: assertProperty(value, 'ContractGroup', 'publicKey', assertECPoint), + publicKey: assertProperty(value, 'ContractGroup', 'publicKey', assertPublicKey), signature: assertProperty(value, 'ContractGroup', 'signature', assertBuffer), }; }; diff --git a/packages/neo-one-client-core/src/nep5.ts b/packages/neo-one-client-core/src/nep5.ts index fff0770371..fa54822a9f 100644 --- a/packages/neo-one-client-core/src/nep5.ts +++ b/packages/neo-one-client-core/src/nep5.ts @@ -50,12 +50,12 @@ const decimalsFunction: ContractMethodDescriptorClient = { offset: 0, }; +// 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 => ({ - // TODO: check - hash: blankHash, + hash: common.uInt160ToString(blankHash), methods: [ { name: 'name', @@ -136,9 +136,9 @@ export const abi = (decimals: number): ContractABIClient => ({ ], }); +// TODO: check that the script/hash can/should be blank here export const manifest = (decimals: number): ContractManifestClient => ({ - hash: blankHash, // TODO: check - hashHex: common.uInt160ToHex(blankHash), // TODO: check + hash: common.uInt160ToString(blankHash), groups: [], features: { storage: true, diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index 47adbe08df..afbe3c6b90 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -4,6 +4,7 @@ import { ApplicationLogJSON, BlockJSON, BufferString, + CallReceiptJSON, ContractJSON, GetOptions, Hash256String, @@ -14,7 +15,6 @@ import { NetworkSettingsJSON, Peer, PrivateNetworkSettings, - RawInvocationResultJSON, RelayTransactionResultJSON, SendRawTransactionResultJSON, StorageItemJSON, @@ -101,7 +101,7 @@ export class JSONRPCClient { public async testInvokeRaw( script: BufferString, verifications: readonly BufferString[] = [], - ): Promise { + ): Promise { return this.withInstance(async (provider) => provider.request({ method: 'invokescript', diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 10b1f87090..f8af79e026 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -2,11 +2,11 @@ import { Account, AddressString, + ApplicationLogJSON, Attribute, AttributeJSON, Block, BlockJSON, - common, ConfirmedTransaction, Contract, ContractABI, @@ -25,14 +25,11 @@ import { ContractParameterType, ContractParameterTypeJSON, ContractPermission, - ContractPermissionDescriptor, - ContractPermissionDescriptorJSON, ContractPermissionJSON, DeveloperProvider, FeelessTransactionModel, GetOptions, Hash256String, - InvocationDataJSON, IterOptions, JSONHelper, NetworkSettings, @@ -40,44 +37,35 @@ import { NetworkType, Peer, PrivateNetworkSettings, - RawAction, + RawApplicationLogData, RawCallReceipt, - RawInvocationData, - RawStorageChange, RelayTransactionResult, RelayTransactionResultJSON, ScriptBuilderParam, scriptHashToAddress, Signer, SignerJSON, - StorageChangeJSON, StorageItem, StorageItemJSON, toAttributeType, + toVerifyResult, Transaction, TransactionJSON, TransactionModel, TransactionReceipt, TransactionReceiptJSON, - TransactionWithInvocationDataJSON, - VerboseTransactionJSON, - VerifyTransactionResult, - VerifyTransactionResultJSON, - WildcardContainer, - WildcardContainerJSON, + VerifyResultJSON, + VerifyResultModel, } 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'; @@ -131,27 +119,14 @@ 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), - ]); - - if (transaction.data === undefined) { - throw new MissingTransactionDataError(hash); - } + public async getApplicationLogData(hash: Hash256String): Promise { + const applicationLogData = await this.mutableClient.getApplicationLog(hash); - return this.convertInvocationData( - invocationData, - transaction.data.blockHash, - transaction.data.blockIndex, - hash, - transaction.data.transactionIndex, - ); + return this.convertApplicationLogData(applicationLogData); } public async testInvoke(transaction: FeelessTransactionModel): Promise { - const receipt = await this.mutableClient.testInvocation(transaction.script.toString('hex')); + const receipt = await this.mutableClient.testInvokeRaw(transaction.script.toString('hex')); return convertCallReceipt(receipt); } @@ -207,27 +182,25 @@ 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) => [...transaction?.invocationData?.actions])); - - return AsyncIterableX.of(...actions); - }), - ); - } - public async call( contract: AddressString, method: string, params: ReadonlyArray, + validUntilBlock?: number, ): Promise { + const countPromise = validUntilBlock ? Promise.resolve(0) : this.mutableClient.getBlockCount(); + const [count, { messagemagic: messageMagic }] = await Promise.all([ + countPromise, + this.mutableClient.getNetworkSettings(), + ]); const testTransaction = new FeelessTransactionModel({ script: clientUtils.getInvokeMethodScript({ address: contract, method, params, }), + validUntilBlock: validUntilBlock ? validUntilBlock : count + 240, + messageMagic, }); return this.testInvoke(testTransaction); @@ -296,7 +269,6 @@ export class NEOONEDataProvider implements DeveloperProvider { }; } - // TODO: implement this; private convertBlock(block: BlockJSON): Block { return { version: block.version, @@ -354,19 +326,14 @@ export class NEOONEDataProvider implements DeveloperProvider { account: scriptHashToAddress(signer.account), scopes: signer.scopes, allowedContracts: signer.allowedcontracts?.map(scriptHashToAddress), - allowedGroups: signer.allowedgroups?.map((group) => common.stringToECPoint(group)), // TODO: check + allowedGroups: signer.allowedgroups, }; } - private convertConfirmedTransaction(transaction: ConfirmedTransactionJSON): ConfirmedTransaction { - if (transaction.data === undefined) { - /* istanbul ignore next */ - throw new Error('Unexpected undefined data'); - } - + private convertConfirmedTransaction(transaction: TransactionJSON): ConfirmedTransaction { return { ...this.convertTransaction(transaction), - receipt: this.convertTransactionReceipt(transaction.receipt), + receipt: transaction.receipt ? this.convertTransactionReceipt(transaction.receipt) : undefined, }; } @@ -380,16 +347,13 @@ export class NEOONEDataProvider implements DeveloperProvider { return { id: contract.id, script: contract.script, + hash: contract.hash, manifest: this.convertContractManifest(contract.manifest), - hasStorage: contract.hasStorage, - payable: contract.payable, }; } private convertContractManifest(manifest: ContractManifestJSON): ContractManifest { return { - hash: common.stringToUInt160(manifest.hash), - hashHex: common.uInt160ToHex(common.stringToUInt160(manifest.hashHex)), groups: manifest.groups.map(this.convertContractGroup), features: { storage: manifest.features.storage, @@ -398,7 +362,7 @@ export class NEOONEDataProvider implements DeveloperProvider { supportedStandards: manifest.supportedstandards, abi: this.convertContractABI(manifest.abi), permissions: manifest.permissions.map(this.convertContractPermission), - trusts: this.convertWildcardContainer(manifest.trusts, common.stringToUInt160), + trusts: manifest.trusts, safeMethods: manifest.safemethods, extra: manifest.extra, hasStorage: manifest.features.storage, @@ -408,49 +372,21 @@ export class NEOONEDataProvider implements DeveloperProvider { private convertContractGroup(group: ContractGroupJSON): ContractGroup { return { - publicKey: common.stringToECPoint(group.publicKey), // TODO: check this + publicKey: group.publicKey, signature: group.signature, }; } private convertContractPermission(permission: ContractPermissionJSON): ContractPermission { return { - contract: this.convertContractPermissionDescriptor(permission.contract), - methods: this.convertWildcardContainer(permission.methods, (str) => str), - }; - } - - private convertWildcardContainer( - container: WildcardContainerJSON, - converter: (val: string) => T, - ): WildcardContainer { - if (container === '*') { - return '*'; - } - - return container.map(converter); - } - - private convertContractPermissionDescriptor( - descriptor: ContractPermissionDescriptorJSON, - ): ContractPermissionDescriptor { - const hashOrGroup = descriptor.isWildcard - ? '*' - : descriptor.isGroup - ? common.stringToECPoint(descriptor.hashOrGroup) - : common.stringToUInt160(descriptor.hashOrGroup); - - return { - hashOrGroup, - isHash: descriptor.isHash, - isGroup: descriptor.isGroup, - isWildcard: descriptor.isWildcard, + contract: permission.contract, + methods: permission.methods, }; } private convertContractABI(abi: ContractABIJSON): ContractABI { return { - hash: common.stringToUInt160(abi.hash), + hash: abi.hash, methods: abi.methods.map(this.convertContractMethodDescriptor), events: abi.events.map(this.convertContractEventDescriptor), }; @@ -514,86 +450,43 @@ export class NEOONEDataProvider implements DeveloperProvider { } } - private convertInvocationData( - data: InvocationDataJSON, - blockHash: string, - blockIndex: number, - transactionHash: string, - transactionIndex: number, - ): RawInvocationData { + private convertApplicationLogData(data: ApplicationLogJSON): RawApplicationLogData { return { - result: convertInvocationResult(data.result), - contracts: data.contracts.map((contract) => this.convertContract(contract)), - deletedContractAddresses: data.deletedContractHashes.map(scriptHashToAddress), - migratedContractAddresses: data.migratedContractHashes.map( - ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)], - ), - 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, + 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 convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { return { - issueGASFee: new BigNumber(settings.issueGASFee), + 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 0e5491dc91..82427466ac 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -8,9 +8,8 @@ import { IterOptions, NetworkSettings, NetworkType, - RawAction, + RawApplicationLogData, RawCallReceipt, - RawInvocationData, RelayTransactionResult, ScriptBuilderParam, Transaction, @@ -73,8 +72,8 @@ 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, transaction: FeelessTransactionModel): Promise { @@ -110,10 +109,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 dab99057e4..0e5ffb1efd 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -23,13 +23,12 @@ export function convertCallReceipt(receipt: CallReceiptJSON): RawCallReceipt { return { script: JSONHelper.readBuffer(receipt.script), state: receipt.state, - gasConsumed: receipt.gasconsumed, + gasConsumed: new BigNumber(receipt.gasconsumed), stack: typeof receipt.stack === 'string' ? receipt.stack : receipt.stack.map(convertStackItem), - notifications: receipt.notifications.map(convertNotifications), + notifications: receipt.notifications.map(convertNotification), }; } -// TODO: this almost definitely needs to be looked at and redone export function convertStackItem(item: StackItemJSON): RawStackItem { switch (item.type) { case 'Any': @@ -39,7 +38,7 @@ export function convertStackItem(item: StackItemJSON): RawStackItem { case 'Pointer': return { type: 'Pointer', value: item.value }; case 'Integer': - return { type: 'Integer', value: new BigNumber(item.value) }; // TODO: BigNumber or BN? + return { type: 'Integer', value: new BigNumber(item.value) }; case 'Buffer': return { type: 'Buffer', value: Buffer.from(item.value, 'hex') }; case 'ByteString': @@ -49,19 +48,22 @@ export function convertStackItem(item: StackItemJSON): RawStackItem { case 'Map': return { type: 'Map', - value: item.value.map(({ key, value }) => [convertStackItem(key), convertStackItem(value)]), + value: item.value.map(({ key, value }) => [ + convertStackItem(key), + convertStackItem(value), + ]), }; default: - // utils.assertNever(item.type); + utils.assertNever(item); throw new Error('Problem converting stack item'); } } -export function convertNotifications(notification: NotificationJSON): NewRawNotification { +export function convertNotification(notification: NotificationJSON): NewRawNotification { return { scriptHash: common.stringToUInt160(notification.scripthash), eventName: notification.eventname, - state: notification.state.map(convertStackItem), + state: typeof notification.state === 'string' ? notification.state : notification.state.map(convertStackItem), }; } diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index ad6207010b..5b12ba69dd 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -372,7 +372,7 @@ export class LocalUserAccountProvider { - 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 }); }, diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 8aa13f1776..7599b8591d 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -12,10 +12,12 @@ import { Hash256String, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, + NetworkSettings, NetworkType, Param, ParamJSON, RawAction, + RawApplicationLogData, RawCallReceipt, RawInvocationData, RawInvokeReceipt, @@ -105,7 +107,7 @@ export interface Provider { hash: Hash256String, options?: GetOptions, ) => Promise; - readonly getInvocationData: (network: NetworkType, hash: Hash256String) => Promise; + readonly getApplicationLogData: (network: NetworkType, hash: Hash256String) => Promise; readonly testInvoke: (network: NetworkType, transaction: FeelessTransactionModel) => Promise; readonly call: ( network: NetworkType, @@ -113,11 +115,11 @@ export interface Provider { method: string, params: ReadonlyArray, ) => Promise; + readonly getNetworkSettings: (network: NetworkType) => Promise; readonly getBlockCount: (network: NetworkType) => Promise; readonly getTransaction: (network: NetworkType, hash: Hash256String) => Promise; readonly iterBlocks: (network: NetworkType, options?: IterOptions) => AsyncIterable; readonly getAccount: (network: NetworkType, address: AddressString) => Promise; - readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; } interface TransactionOptionsFull { @@ -471,16 +473,20 @@ export abstract class UserAccountProviderBase { readonly gas: BigNumber; readonly attributes: ReadonlyArray; }> { - const testTransaction = new TransactionModel({ - systemFee: common.TEN_THOUSAND_FIXED8, + const [count, { messageMagic }] = await Promise.all([ + this.provider.getBlockCount(from.network), + this.provider.getNetworkSettings(from.network), + ]); + const testTransaction = new FeelessTransactionModel({ attributes: this.convertAttributes(attributes), - networkFee: common.TEN_THOUSAND_FIXED8, script, witnesses, + messageMagic, + validUntilBlock: count + 240, }); const callReceipt = await this.provider.testInvoke(from.network, testTransaction); - if (callReceipt.result.state === 'FAULT') { + if (callReceipt === 'FAULT') { const message = await processActionsAndMessage({ actions: callReceipt.actions, message: callReceipt.result.message, From f2db576c67d559d1abadaff3dc5f8b13c935c2ed Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 30 Nov 2020 15:02:56 -0800 Subject: [PATCH 128/141] fix(web): fix website deployment script (#2127) --- common/config/rush/command-line.json | 2 +- packages/neo-one-editor-server/src/resolveMiddleware.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 490b7890d2..6fe42b25f8 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -151,7 +151,7 @@ "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=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build && sh ./scripts/rm-cruft" + "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", 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 From 1e5f7c1bb95a41f9a85df1a8d7fa0d6eb7b10504 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 1 Dec 2020 09:29:28 -0800 Subject: [PATCH 129/141] feat(consensus): initial local consensus block generation is working (#2222) --- packages/neo-one-client-common/src/crypto.ts | 10 +- .../src/models/Serializable.ts | 4 +- .../transaction/FeelessTransactionModel.ts | 4 +- .../provider/sendrawtransaction.test.ts | 73 ++ .../neo-one-node-blockchain/src/Blockchain.ts | 36 +- .../neo-one-node-consensus/src/Consensus.ts | 49 +- .../{ConsensusContext.ts => TimerContext.ts} | 6 +- .../src/__data__/context.ts | 77 +-- .../consensus/handleConsensusPayload.test.ts | 157 +++-- .../src/checkPayload.ts | 95 +++ packages/neo-one-node-consensus/src/common.ts | 505 ++++++-------- .../src/context/BlockSentContext.ts | 17 - .../src/context/Context.ts | 76 --- .../src/context/HeaderContext.ts | 107 --- .../src/context/InitialContext.ts | 17 - .../src/context/RequestReceivedContext.ts | 156 ----- .../src/context/RequestSentContext.ts | 98 --- .../src/context/SignatureSentContext.ts | 92 --- .../src/context/ViewChangingContext.ts | 51 -- .../src/context/cloneBlockSent.ts | 16 - .../src/context/cloneInitial.ts | 42 -- .../src/context/common.ts | 332 ++++++++++ .../src/context/index.ts | 11 +- .../src/context/types.ts | 1 - .../src/handleConsensusPayload.ts | 625 ++++++++++++++---- .../src/handlePersistBlock.ts | 35 +- .../src/handleTransactionReceived.ts | 22 +- .../neo-one-node-consensus/src/makePayload.ts | 295 +++++++++ .../src/runConsensus.ts | 365 +++++----- packages/neo-one-node-consensus/src/types.ts | 13 +- packages/neo-one-node-core/src/BlockBase.ts | 25 +- packages/neo-one-node-core/src/Blockchain.ts | 9 +- .../neo-one-node-core/src/ConsensusContext.ts | 3 - packages/neo-one-node-core/src/Contract.ts | 4 - .../src/ContractParametersContext.ts | 405 ++++++++++++ packages/neo-one-node-core/src/Native.ts | 2 +- packages/neo-one-node-core/src/Node.ts | 3 + packages/neo-one-node-core/src/Storage.ts | 2 + .../src/TransactionVerificationContext.ts | 60 +- .../ContractParametersContext.test.ts | 125 ++++ .../src/consensus/BlockBuilder.ts | 108 +++ .../src/consensus/ConsensusContext.ts | 211 ++++++ .../neo-one-node-core/src/consensus/index.ts | 2 + packages/neo-one-node-core/src/index.ts | 3 + .../src/payload/ChangeViewPayloadCompact.ts | 13 + .../src/payload/CommitPayloadCompact.ts | 12 + .../src/payload/ConsensusPayload.ts | 55 +- .../src/payload/PreparationPayloadCompact.ts | 8 + .../src/payload/UnsignedConsensusPayload.ts | 29 +- .../message/RecoveryConsensusMessage.ts | 54 +- .../src/transaction/Transaction.ts | 2 +- packages/neo-one-node-native/src/Policy.ts | 4 +- packages/neo-one-node-protocol/src/Node.ts | 62 +- .../src/TransactionVerificationContext.ts | 59 -- .../src/createHandler.ts | 13 +- .../neo-one-node-storage-common/src/keys.ts | 6 + .../src/levelUpStorage.ts | 11 +- .../neo-one-node-vm/lib/Dispatcher.csproj | 2 +- .../src/__tests__/blockchain.test.ts | 66 +- .../src/__tests__/consensus.test.ts | 90 +++ packages/neo-one-utils/src/utils.ts | 17 + 61 files changed, 3245 insertions(+), 1607 deletions(-) rename packages/neo-one-node-consensus/src/{ConsensusContext.ts => TimerContext.ts} (81%) create mode 100644 packages/neo-one-node-consensus/src/checkPayload.ts delete mode 100644 packages/neo-one-node-consensus/src/context/BlockSentContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/Context.ts delete mode 100644 packages/neo-one-node-consensus/src/context/HeaderContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/InitialContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/RequestReceivedContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/RequestSentContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/SignatureSentContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/ViewChangingContext.ts delete mode 100644 packages/neo-one-node-consensus/src/context/cloneBlockSent.ts delete mode 100644 packages/neo-one-node-consensus/src/context/cloneInitial.ts create mode 100644 packages/neo-one-node-consensus/src/context/common.ts create mode 100644 packages/neo-one-node-consensus/src/makePayload.ts delete mode 100644 packages/neo-one-node-core/src/ConsensusContext.ts create mode 100644 packages/neo-one-node-core/src/ContractParametersContext.ts create mode 100644 packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts create mode 100644 packages/neo-one-node-core/src/consensus/BlockBuilder.ts create mode 100644 packages/neo-one-node-core/src/consensus/ConsensusContext.ts create mode 100644 packages/neo-one-node-core/src/consensus/index.ts delete mode 100644 packages/neo-one-node-protocol/src/TransactionVerificationContext.ts create mode 100644 packages/neo-one-node/src/__tests__/consensus.test.ts diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 8b5a44a698..498775f7e0 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -621,12 +621,15 @@ const isMultiSigContract = (script: Buffer) => { }; // tslint:enable -type MultiSigResult = { readonly result: true; readonly m: number; readonly n: number } | { readonly result: false }; +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 }; @@ -652,7 +655,8 @@ const isMultiSigContractWithResult = (script: Buffer): MultiSigResult => { while (script[i] == Op.PUSHDATA1) { if (script.length <= i + 35) return { result: false }; if (script[++i] !== 33) return { result: false }; - // points?.push(script.slice(i + 1, i + 1 + 33)); // TODO: add "points" List from C# + // 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; @@ -680,7 +684,7 @@ const isMultiSigContractWithResult = (script: Buffer): MultiSigResult => { if (script[i++] !== Op.SYSCALL) return { result: false }; if (script.length !== i + 4) return { result: false }; if (script.slice(i) !== checkMultiSigUint) return { result: false }; - return { result: true, m, n }; + return { result: true, m, n, points }; }; // tslint:enable diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index c5134e4197..3f630b998c 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -18,10 +18,10 @@ export interface SerializableJSON { readonly serializeJSON: () => TJSON; } -export const createGetHashData = (serializeWire: () => Buffer, magic: number) => () => { +export const getHashData = (wire: Buffer, magic: number) => { const writer = new BinaryWriter(); writer.writeUInt32LE(magic); - writer.writeBytes(serializeWire()); + writer.writeBytes(wire); return writer.toBuffer(); }; diff --git a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts index d03a1f6c3d..a96c6ad73e 100644 --- a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts @@ -4,7 +4,7 @@ import { BinaryWriter } from '../../BinaryWriter'; import { common, ECPoint, InvalidFormatError, PrivateKey, UInt160, UInt256, UInt256Hex } from '../../common'; import { crypto } from '../../crypto'; import { utils } from '../../utils'; -import { createGetHashData, createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; +import { createSerializeWire, getHashData, SerializableWire, SerializeWire } from '../Serializable'; import { SignerModel } from '../SignerModel'; import { WitnessModel } from '../WitnessModel'; import { AttributeModel } from './attribute'; @@ -66,7 +66,7 @@ export class FeelessTransactionModel< 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(() => createGetHashData(this.serializeUnsigned, this.messageMagic)()); + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeUnsigned(), this.messageMagic)); public constructor({ version, 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 index 70235a18e9..5436f8ead0 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts @@ -13,6 +13,7 @@ import { } 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', () => { @@ -120,4 +121,76 @@ describe('RPC Call sendrawtransaction', () => { 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: 23, + 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-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 6bd71ec212..8eb203fb8a 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,4 +1,12 @@ -import { common, ScriptBuilder, TriggerType, UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { + common, + crypto, + ECPoint, + ScriptBuilder, + TriggerType, + UInt256, + VerifyResultModel, +} from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { ApplicationExecuted, @@ -276,6 +284,10 @@ export class Blockchain { return this.storage.contractID; } + public get consensusState() { + return this.storage.consensusState; + } + public get serializeJSONContext() { return { addressVersion: this.settings.addressVersion, @@ -414,6 +426,26 @@ export class Blockchain { 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 persistBlock({ block, verify = false, @@ -630,7 +662,7 @@ export class Blockchain { const nep5BalancePairs = assetKeys.map((key) => { const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); - const callReceipt = this.runEngineWrapper({ script, gas: 1, snapshot: 'main' }); + const callReceipt = this.invokeScript(script); const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: this.currentBlockIndex }) }; diff --git a/packages/neo-one-node-consensus/src/Consensus.ts b/packages/neo-one-node-consensus/src/Consensus.ts index d5d759a7ad..0d4cc16837 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; @@ -188,7 +193,7 @@ export class Consensus { node: this.node, privateKey: options.privateKey, transaction: event.transaction, - consensusContext: this.mutableConsensusContext, + timerContext: this.mutableTimerContext, }); break; @@ -197,7 +202,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,19 +228,19 @@ 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, + 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..a6e9fc5551 --- /dev/null +++ b/packages/neo-one-node-consensus/src/checkPayload.ts @@ -0,0 +1,95 @@ +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..37b2f57ef6 --- /dev/null +++ b/packages/neo-one-node-consensus/src/context/common.ts @@ -0,0 +1,332 @@ +import { common, crypto, ECPoint, IOHelper, PrivateKey, ScriptBuilder, UInt256 } from '@neo-one/client-common'; +import { + Blockchain, + BlockchainStorage, + ChangeViewConsensusMessage, + CommitConsensusMessage, + ConsensusContext, + Contract, + 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 = Contract.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 > 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), + }; + + 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..a4a007210e 100644 --- a/packages/neo-one-node-consensus/src/handleTransactionReceived.ts +++ b/packages/neo-one-node-consensus/src/handleTransactionReceived.ts @@ -1,8 +1,7 @@ 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 ({ @@ -10,16 +9,20 @@ export const handleTransactionReceived = async ({ node, privateKey, transaction, - consensusContext, + timerContext, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; readonly privateKey: PrivateKey; readonly transaction: Transaction; - readonly consensusContext: ConsensusContext; -}): Promise> => { + readonly timerContext: TimerContext; +}): Promise => { 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 +35,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..5319f4ebe4 --- /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 } }); + + 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-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 8b22c08194..af8b60baa5 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -2,8 +2,8 @@ import { BinaryWriter, BlockBaseJSON, common, - createGetHashData, crypto, + getHashData, InvalidFormatError, IOHelper, JSONHelper, @@ -39,6 +39,27 @@ export interface BlockBaseAdd { readonly hash?: UInt256; } +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( @@ -116,7 +137,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, 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(() => createGetHashData(this.serializeUnsigned, this.messageMagic)()); + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeUnsigned(), this.messageMagic)); private readonly witnessInternal: Witness | undefined; private readonly sizeInternal = utils.lazy( () => diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 321909bf27..c2de0b15a6 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -1,4 +1,5 @@ -import { UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { ECPoint, UInt256, VerifyResultModel } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { Observable } from 'rxjs'; import { Block } from './Block'; import { Header } from './Header'; @@ -46,6 +47,12 @@ export interface Blockchain extends BlockchainStorage { 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 invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; readonly invokeTransaction: ( transaction: TTransaction, diff --git a/packages/neo-one-node-core/src/ConsensusContext.ts b/packages/neo-one-node-core/src/ConsensusContext.ts deleted file mode 100644 index 77d45f276e..0000000000 --- a/packages/neo-one-node-core/src/ConsensusContext.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const CONSENSUS_STATE_PREFIX = 0xf4; - -export class ConsensusContext {} diff --git a/packages/neo-one-node-core/src/Contract.ts b/packages/neo-one-node-core/src/Contract.ts index 003bf6378e..8569a4a864 100644 --- a/packages/neo-one-node-core/src/Contract.ts +++ b/packages/neo-one-node-core/src/Contract.ts @@ -15,10 +15,6 @@ export interface ContractAdd { readonly scriptHash?: UInt160; readonly address?: string; } - -/* I implemented this but then didn't need it since I can just use the underlying crypto function I need. - * It might come up later so we will keep it around for now. TODO: revist - **/ export class Contract { public static createMultiSigContract(m: number, publicKeys: readonly ECPoint[]): Contract { return new Contract({ 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/Native.ts b/packages/neo-one-node-core/src/Native.ts index 34c4638920..7d848b0c6c 100644 --- a/packages/neo-one-node-core/src/Native.ts +++ b/packages/neo-one-node-core/src/Native.ts @@ -26,7 +26,7 @@ export interface GASContract extends NEP5NativeContract {} export interface PolicyContract extends NativeContract { readonly getMaxTransactionsPerBlock: (storage: NativeContractStorageContext) => Promise; readonly getMaxBlockSize: (storage: NativeContractStorageContext) => Promise; - readonly getMaxBlockSystemFee: (storage: NativeContractStorageContext) => Promise; + readonly getMaxBlockSystemFee: (storage: NativeContractStorageContext) => Promise; readonly getFeePerByte: (storage: NativeContractStorageContext) => Promise; readonly getBlockedAccounts: (storage: NativeContractStorageContext) => Promise; } diff --git a/packages/neo-one-node-core/src/Node.ts b/packages/neo-one-node-core/src/Node.ts index 6adb9a5c93..672c38c557 100644 --- a/packages/neo-one-node-core/src/Node.ts +++ b/packages/neo-one-node-core/src/Node.ts @@ -1,9 +1,11 @@ import { VerifyResultModel } from '@neo-one/client-common'; import { Block } from './Block'; 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; @@ -41,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/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 9fbe735410..859a8fd005 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -1,6 +1,7 @@ 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'; @@ -131,6 +132,7 @@ export interface BlockchainStorage { readonly nep5TransfersSent: ReadFindStorage; readonly nep5TransfersReceived: ReadFindStorage; readonly applicationLogs: ReadStorage; + readonly consensusState: ReadMetadataStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; readonly storages: ReadFindStorage; diff --git a/packages/neo-one-node-core/src/TransactionVerificationContext.ts b/packages/neo-one-node-core/src/TransactionVerificationContext.ts index da6c9a1b3a..b913ec208f 100644 --- a/packages/neo-one-node-core/src/TransactionVerificationContext.ts +++ b/packages/neo-one-node-core/src/TransactionVerificationContext.ts @@ -1,8 +1,60 @@ +import { common, UInt160, UInt160Hex } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { NativeContractStorageContext } from './Native'; import { Transaction } from './transaction'; -export interface TransactionVerificationContext { - readonly addTransaction: (tx: Transaction) => void; - readonly checkTransaction: (tx: Transaction, storage: NativeContractStorageContext) => Promise; - readonly removeTransaction: (tx: Transaction) => void; +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/__tests__/ContractParametersContext.test.ts b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts new file mode 100644 index 0000000000..a7b8e5a3c1 --- /dev/null +++ b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts @@ -0,0 +1,125 @@ +import { + common, + ContractParameterTypeModel, + crypto, + ECPoint, + PrivateKey, + UInt160, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Contract } from '../Contract'; +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), + }); + +describe('ContractParametersContext Test', () => { + let privateKey: PrivateKey; + let publicKey: ECPoint; + let contract: Contract; + beforeEach(() => { + // tslint:disable-next-line: prefer-array-literal + privateKey = common.asPrivateKey(Buffer.from(new Array(32).fill(0x01))); + publicKey = crypto.privateKeyToPublicKey(privateKey); + contract = Contract.createSignatureContract(publicKey); + }); + + test('addWithIndex', () => { + const context = new ContractParametersContext([common.ZERO_UINT160]); + const testContract = new Contract({ + 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 Contract({ + 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/consensus/BlockBuilder.ts b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts new file mode 100644 index 0000000000..88834cafa6 --- /dev/null +++ b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts @@ -0,0 +1,108 @@ +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 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; + } + + public clone({ + merkleRoot, + consensusData, + transactions, + version, + previousHash, + timestamp, + index, + nextConsensus, + witness, + hash, + }: BlockPartial) { + return new BlockBuilder({ + merkleRoot: merkleRoot ?? this.merkleRoot, + consensusData: consensusData ?? this.consensusData, + 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 options = { + merkleRoot: this.merkleRoot, + consensusData: this.getConsensusData(), + transactions: this.transactions, + version: this.version, + previousHash: this.previousHash, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + hash: this.hash, + }; + + // 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..1bd07d7d18 --- /dev/null +++ b/packages/neo-one-node-core/src/consensus/ConsensusContext.ts @@ -0,0 +1,211 @@ +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({ + viewNumber, + myIndex, + validators, + blockReceivedTimeMS, + verificationContext, + blockOptions, + preparationPayloads, + commitPayloads, + changeViewPayloads, + lastChangeViewPayloads, + transactions, + transactionHashes, + }: Partial) { + return new ConsensusContext({ + viewNumber: viewNumber ?? this.viewNumber, + myIndex: myIndex ?? this.myIndex, + validators: validators ?? this.validators, + blockReceivedTimeMS: blockReceivedTimeMS ?? this.blockReceivedTimeMS, + verificationContext: verificationContext ?? this.verificationContext, + blockOptions: blockOptions === undefined ? this.blockBuilder : this.blockBuilder.clone(blockOptions), + preparationPayloads: preparationPayloads ?? this.preparationPayloads, + commitPayloads: commitPayloads ?? this.commitPayloads, + changeViewPayloads: changeViewPayloads ?? this.changeViewPayloads, + lastChangeViewPayloads: lastChangeViewPayloads ?? this.lastChangeViewPayloads, + transactions: transactions ?? this.transactions, + transactionHashes: transactionHashes ?? this.transactionHashes, + }); + } + + 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/index.ts b/packages/neo-one-node-core/src/index.ts index 5c692a5b10..a05d964d6b 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -1,10 +1,13 @@ export * from './Block'; export * from './BlockBase'; export * from './Blockchain'; +export * from './consensus'; export * from './ConsensusData'; +export * from './ContractParametersContext'; export * from './manifest'; export * from './ContractIDState'; export * from './ContractState'; +export * from './Contract'; export * from './constants'; export * from './crypto'; export * from './Equatable'; diff --git a/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts index f3a0d30522..55c637f846 100644 --- a/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts +++ b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts @@ -2,6 +2,8 @@ import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/cl 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; @@ -11,6 +13,17 @@ export interface ChangeViewPayloadCompactAdd { } 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(); diff --git a/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts index 99599c7dfa..87643adde6 100644 --- a/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts +++ b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts @@ -1,6 +1,8 @@ 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; @@ -10,6 +12,16 @@ export interface CommitPayloadCompactAdd { } 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(); diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index 78674ef3ff..3d7c5c8df4 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -1,4 +1,14 @@ -import { BinaryWriter, createSerializeWire, crypto, InvalidFormatError } from '@neo-one/client-common'; +import { + BinaryWriter, + createSerializeWire, + crypto, + ECPoint, + getHashData, + InvalidFormatError, + PrivateKey, +} from '@neo-one/client-common'; +import { Contract } from '../Contract'; +import { ContractParametersContext } from '../ContractParametersContext'; import { NativeContainer } from '../Native'; import { DeserializeWireBaseOptions, @@ -10,6 +20,7 @@ import { BlockchainStorage } from '../Storage'; import { BinaryReader, utils } from '../utils'; import { Verifiable, VerifyOptions } from '../Verifiable'; import { Witness } from '../Witness'; +import { ConsensusMessage } from './message'; import { UnsignedConsensusPayload, UnsignedConsensusPayloadAdd } from './UnsignedConsensusPayload'; export interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { @@ -20,7 +31,30 @@ export interface VerifyConsensusPayloadOptions extends VerifyOptions { readonly height: number; } -export class ConsensusPayload extends UnsignedConsensusPayload implements SerializableContainer, Verifiable { +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 = Contract.createSignatureContract(publicKey); + const signature = crypto.sign({ message: hashData, privateKey }); + context.addSignature(signatureContract, publicKey, signature); + + return new ConsensusPayload({ + version: payload.version, + previousHash: payload.previousHash, + blockIndex: payload.blockIndex, + validatorIndex: payload.validatorIndex, + consensusMessage: payload.consensusMessage, + witness: context.getWitnesses()[0], + messageMagic, + }); + } public static deserializeWireBase(options: DeserializeWireBaseOptions, validatorsCount = 7): ConsensusPayload { const { reader } = options; const { @@ -44,7 +78,7 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial validatorIndex, data, witness, - magic: options.context.messageMagic, + messageMagic: options.context.messageMagic, }); } @@ -59,17 +93,6 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial public readonly witness: Witness; public readonly serializeUnsigned = createSerializeWire(this.serializeWireBaseUnsigned); public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public readonly getScriptHashesForVerifying = utils.lazyAsync( - async (context: { readonly storage: BlockchainStorage; readonly native: NativeContainer }) => { - const validators = await context.native.NEO.getNextBlockValidators(context.storage); - if (validators.length <= this.validatorIndex) { - // TODO: implement a real error - throw new Error(`${validators.length} <= ${this.validatorIndex}`); - } - - return [crypto.toScriptHash(crypto.createSignatureRedeemScript(validators[this.validatorIndex]))]; - }, - ); public constructor(options: ConsensusPayloadAdd) { super(options); @@ -90,6 +113,10 @@ export class ConsensusPayload extends UnsignedConsensusPayload implements Serial super.serializeWireBase(writer); } + public getDeserializedMessage() { + return this.consensusMessage as T; + } + public async verify(options: VerifyConsensusPayloadOptions) { if (this.blockIndex <= options.height) { return false; diff --git a/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts b/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts index 36026cdb67..ec8e5ca054 100644 --- a/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts +++ b/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts @@ -1,6 +1,7 @@ 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; @@ -8,6 +9,13 @@ export interface PreparationPayloadCompactAdd { } 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(); diff --git a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts index 5f614ce791..656f11e693 100644 --- a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts @@ -1,4 +1,12 @@ -import { BinaryWriter, common, createGetHashData, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; +import { + BinaryWriter, + common, + createSerializeWire, + 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'; @@ -11,7 +19,7 @@ export interface UnsignedConsensusPayloadAdd { readonly data?: Buffer; readonly getConsensusMessage?: () => ConsensusMessage; readonly consensusMessage?: ConsensusMessage; - readonly magic: number; + readonly messageMagic: number; } export class UnsignedConsensusPayload implements SerializableWire { @@ -37,7 +45,7 @@ export class UnsignedConsensusPayload implements SerializableWire { validatorIndex, data, getConsensusMessage, - magic: options.context.messageMagic, + messageMagic: options.context.messageMagic, }; } @@ -61,7 +69,7 @@ export class UnsignedConsensusPayload implements SerializableWire { public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); private readonly consensusMessageInternal: (() => ConsensusMessage) | undefined; private readonly dataInternal?: Buffer; - private readonly messageInternal = utils.lazy(() => createGetHashData(this.serializeWire, this.magic)()); + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeWire(), this.magic)); private readonly hashInternal = utils.lazy(() => crypto.hash256(this.messageInternal())); public constructor({ @@ -72,7 +80,7 @@ export class UnsignedConsensusPayload implements SerializableWire { data, getConsensusMessage, consensusMessage, - magic, + messageMagic, }: UnsignedConsensusPayloadAdd) { this.version = version; this.previousHash = previousHash; @@ -81,7 +89,7 @@ export class UnsignedConsensusPayload implements SerializableWire { this.dataInternal = data; this.consensusMessageInternal = consensusMessage ? () => consensusMessage : getConsensusMessage; - this.magic = magic; + this.magic = messageMagic; } public get consensusMessage() { @@ -109,6 +117,15 @@ export class UnsignedConsensusPayload implements SerializableWire { 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) { writer.writeUInt32LE(this.version); writer.writeUInt256(this.previousHash); diff --git a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts index 0157230aca..33069dbd64 100644 --- a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts @@ -1,7 +1,7 @@ import { BinaryWriter, common, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { ConsensusContext } from '../../ConsensusContext'; +import { ConsensusContext } from '../../consensus/ConsensusContext'; import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; import { BinaryReader } from '../../utils'; import { Witness } from '../../Witness'; @@ -14,6 +14,7 @@ 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; @@ -158,4 +159,55 @@ export class RecoveryConsensusMessage extends ConsensusMessageBase { }), ); } + + 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/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 5a131fcaca..ea8fe39455 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -203,7 +203,7 @@ export class Transaction const maxBlockSysFee = await native.Policy.getMaxBlockSystemFee(storage); const sysFee = this.systemFee; - if (sysFee.gt(new BN(maxBlockSysFee))) { + if (sysFee.gt(maxBlockSysFee)) { return VerifyResultModel.PolicyFail; } diff --git a/packages/neo-one-node-native/src/Policy.ts b/packages/neo-one-node-native/src/Policy.ts index 15a401c572..0fc8198cae 100644 --- a/packages/neo-one-node-native/src/Policy.ts +++ b/packages/neo-one-node-native/src/Policy.ts @@ -42,10 +42,10 @@ export class PolicyContract extends NativeContract { 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).toNumber(); + return common.fixedFromDecimal(9000, GASToken.decimals); } - return new BN(item.value).toNumber(); + return new BN(item.value); } public async getFeePerByte({ storages }: NativeContractStorageContext) { diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index d690f29510..a2de014697 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -32,6 +32,7 @@ import { RelayTransactionResult, ServerCapability, Transaction, + TransactionVerificationContext, Version, } from '@neo-one/node-core'; import { composeDisposables, Disposable, Labels, noopDisposable, utils as commonUtils } from '@neo-one/utils'; @@ -60,9 +61,7 @@ import { PingPayload, VersionPayload, } from './payload'; -import { maxHashesCount } from './payload/InvPayload'; import { PeerData } from './PeerData'; -import { TransactionVerificationContext } from './TransactionVerificationContext'; const logger = createChild(nodeLogger, { component: 'node-protocol' }); @@ -158,10 +157,9 @@ interface PeerHealth { readonly checkTimeSeconds: number; } -const trimMemPool = () => Promise.reject(new Error('not implemented yet')); - export class Node implements INode { public readonly blockchain: Blockchain; + public readonly getNewVerificationContext: () => TransactionVerificationContext; // tslint:disable-next-line readonly-keyword private mutableMemPool: { [hash: string]: Transaction }; private readonly transactionVerificationContext: TransactionVerificationContext; @@ -233,30 +231,26 @@ export class Node implements INode { }, 5000); // tslint:disable-next-line no-unnecessary-type-annotation - // 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.networkFee({ - // fees: this.blockchain.settings.fees, - // }); - - // return { transaction, networkFee }; - // }), - // ); - - // const hashesToRemove = _.take( - // // tslint:disable-next-line no-array-mutation - // transactionAndFees.slice().sort(compareTransactionAndFees), - // this.blockchain.settings.memoryPoolMaxTransactions, - // ).map((transactionAndFee) => transactionAndFee.transaction.hashHex); - // hashesToRemove.forEach((hash) => { - // // tslint:disable-next-line no-dynamic-delete - // delete this.mutableMemPool[hash]; - // }); - // } - // }, TRIM_MEMPOOL_THROTTLE); + private readonly trimMemPool = _.throttle(async (): Promise => { + const memPool = Object.values(this.mutableMemPool); + if (memPool.length > MEM_POOL_SIZE) { + 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.memoryPoolMaxTransactions, + ).map((transactionAndFee) => transactionAndFee.transaction.hashHex); + hashesToRemove.forEach((hash) => { + // tslint:disable-next-line no-dynamic-delete + delete this.mutableMemPool[hash]; + }); + } + }, TRIM_MEMPOOL_THROTTLE); public constructor({ blockchain, @@ -289,9 +283,9 @@ export class Node implements INode { this.userAgent = `NEO:neo-one-js:3.0.0-preview3`; this.mutableMemPool = {}; - this.transactionVerificationContext = new TransactionVerificationContext({ - getGasBalance: native.GAS.balanceOf.bind(native.GAS), - }); + 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(); @@ -429,7 +423,7 @@ export class Node implements INode { } this.transactionVerificationContext.addTransaction(transaction); this.relayTransactionInternal(transaction); - await trimMemPool(); + await this.trimMemPool(); } } @@ -973,7 +967,7 @@ export class Node implements INode { payload: GetBlocksPayload, ): Promise { const hashStart = payload.hashStart; - const count = payload.count < 0 || payload.count > maxHashesCount ? maxHashesCount : payload.count; + 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) { @@ -1011,7 +1005,7 @@ export class Node implements INode { peer: ConnectedPeer, payload: GetBlockByIndexPayload, ): Promise { - const count = payload.count === -1 ? maxHashesCount : Math.min(payload.count, maxHashesCount); + 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) { diff --git a/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts b/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts deleted file mode 100644 index f0bd31c897..0000000000 --- a/packages/neo-one-node-protocol/src/TransactionVerificationContext.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { common, UInt160, UInt160Hex } from '@neo-one/client-common'; -import { NativeContractStorageContext, Transaction } from '@neo-one/node-core'; -import { BN } from 'bn.js'; - -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-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index ece9195aab..0ecf9ce92d 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -145,12 +145,13 @@ const mapToTransfers = ({ key, value }: { readonly key: Nep5TransferKey; readonl txhash: common.uInt256ToString(value.txHash), }); -const getScriptHashFromParam = (param: string, addressVersion: number) => { +const getScriptHashAndAddress = (param: string, addressVersion: number) => { if (param.length < 40) { - return crypto.addressToScriptHash({ addressVersion, address: param }); + return { address: param, scriptHash: crypto.addressToScriptHash({ addressVersion, address: param }) }; } + const scriptHash = JSONHelper.readUInt160(param); - return JSONHelper.readUInt160(param); + return { scriptHash, address: crypto.scriptHashToAddress({ addressVersion, scriptHash }) }; }; const createJSONRPCHandler = (handlers: Handlers) => { @@ -645,8 +646,7 @@ export const createHandler = ({ // Nep5 [RPC_METHODS.getnep5transfers]: async (args) => { const addressVersion = blockchain.settings.addressVersion; - const scriptHash = getScriptHashFromParam(args[0], addressVersion); - const address = crypto.scriptHashToAddress({ addressVersion, scriptHash }); + 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]; @@ -681,8 +681,7 @@ export const createHandler = ({ }, [RPC_METHODS.getnep5balances]: async (args) => { const addressVersion = blockchain.settings.addressVersion; - const scriptHash = getScriptHashFromParam(args[0], addressVersion); - const address = crypto.scriptHashToAddress({ addressVersion, scriptHash }); + 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 }) => { diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index d275c824f2..94986eb14b 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -11,6 +11,7 @@ export enum Prefix { CurrentBlock = 0xc0, CurrentHeader = 0xc1, ContractID = 0xc2, + ConsensusState = 0xf4, Nep5Balance = 0xf8, Nep5TransferSent = 0xf9, Nep5TransferReceived = 0xfa, @@ -132,6 +133,10 @@ 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 }); @@ -169,6 +174,7 @@ export const keys = { blockHashIndexKey, headerHashIndexKey, contractIDKey, + consensusStateKey, minBlockKey, maxBlockKey, }; diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 97ed9a9904..73e914b6d2 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -2,14 +2,15 @@ import { ApplicationLog, BinaryReader, BlockKey, + ConsensusContext, ContractIDState, ContractState, DeserializeWireContext, - HashIndexState, // InvocationData, + HashIndexState, HeaderHashList, - Nep5Balance, // TransactionData, + Nep5Balance, Nep5BalanceKey, Nep5Transfer, Nep5TransferKey, @@ -193,6 +194,12 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage 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(); }, diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index 284ce6f2db..d81a27334a 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -14,7 +14,7 @@ - + --> diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index 901d2a00b0..b35cd832c2 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -25,38 +25,62 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re describe('Blockchain storage works', () => { test('Blockchain can persist and retrieve blocks', async () => { - const blockchainSettings = createTest(); - const levelDBPath = '/Users/danielbyrne/Desktop/test-location'; + // const blockchainSettings = createTest(); + const levelDBPath = '/Users/danielbyrne/Desktop/consensus-node-data'; const db = LevelUp(RocksDB(levelDBPath)); const storage = levelupStorage({ db, - context: { messageMagic: blockchainSettings.messageMagic }, + context: { messageMagic: 7630401 }, }); - const dispatcher = new Dispatcher({ - levelDBPath, - protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), - }); + const allStorage = await storage.nep5Balances.all$.pipe(toArray()).toPromise(); + console.log(allStorage); - const native = new NativeContainer(blockchainSettings); + await rawReadStreamPromise(db, { gte: Buffer.from([0x00]), lte: Buffer.from([0xff]) }); + // const dispatcher = new Dispatcher({ + // levelDBPath, + // protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), + // }); - const blockchain = await Blockchain.create({ - settings: blockchainSettings, - storage, - vm: dispatcher, - native, - }); + // const native = new NativeContainer(blockchainSettings); + + // const blockchain = await Blockchain.create({ + // settings: blockchainSettings, + // storage, + // vm: dispatcher, + // native, + // }); - const sc = '0xf813c2cc8e18bbe4b3b87f8ef9105b50bb93918e'; - const scriptHash = common.stringToUInt160(sc).reverse(); + // const sc = '0xf813c2cc8e18bbe4b3b87f8ef9105b50bb93918e'; + // const scriptHash = common.stringToUInt160(sc).reverse(); - const timeIn = Buffer.from('830ce2c273010000', 'hex'); + // const timeIn = Buffer.from('830ce2c273010000', 'hex'); + + // const gte = Buffer.concat([scriptHash, timeIn]); + // const lte = Buffer.concat([scriptHash, new BN(Date.now(), 'le').toBuffer()]); + }); - const gte = Buffer.concat([scriptHash, timeIn]); - const lte = Buffer.concat([scriptHash, new BN(Date.now(), 'le').toBuffer()]); + test.only('', () => { + const validators = [ + '023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d', + '03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2', + '02ba2c70f5996f357a43198705859fae2cfea13e1172962800772b3d588a9d4abd', + '03408dcd416396f64783ac587ea1e1593c57d9fea880c8a6a1920e92a259477806', + '02a7834be9b32e2981d157cb5bbd3acb42cfd11ea5c3b10224d7a44e98c5910f1b', + '0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01', + '030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba', + ].map(common.stringToECPoint); - const transfers = await storage.nep5TransfersSent.find$(gte, lte).pipe(toArray()).toPromise(); - expect(transfers.length).toBeGreaterThan(0); + const testHash = crypto.toScriptHash( + crypto.createMultiSignatureVerificationScript(validators.length - (validators.length - 1) / 3, validators), + ); + const anotherHash = crypto.toScriptHash( + crypto.createMultiSignatureVerificationScript(validators.length / 2 + 1, validators), + ); + console.log(common.uInt160ToHex(testHash)); + console.log(common.uInt160ToHex(anotherHash)); + console.log(crypto.scriptHashToAddress({ addressVersion: 23, scriptHash: testHash })); + console.log(crypto.scriptHashToAddress({ addressVersion: 23, scriptHash: anotherHash })); }); }); 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..96f3dc8870 --- /dev/null +++ b/packages/neo-one-node/src/__tests__/consensus.test.ts @@ -0,0 +1,90 @@ +import { common, crypto } 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 }, + buffer: Buffer.from( + '000000000000000000000000000000000000000000000000000000000000000000000000a2f039e5cb15af6ab9eecfcb383ddac95c9ddc7f5c09d96c88dd26003a793a81759cf1e17501000000000000d83cd15a5036b5399bb7e6b91db9365a77ddb2510100011102001dac2b7c000000000000000000000000000000000000000000000000000000000001ca61e52e881d41374e640f819cd118cc153b21a700000541123e7fe801000111', + 'hex', + ), + }), + decrementInterval: 2000000, + generationAmount: [8, 7, 6], + messageMagic: 7630401, + addressVersion: 23, + 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-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, From 0c5792f973fda84f02e5f741a1f0b303ee9c7c61 Mon Sep 17 00:00:00 2001 From: Spencer Corwin Date: Mon, 7 Dec 2020 13:15:33 -0800 Subject: [PATCH 130/141] fix(cli): fix migration file path for typescript (#2237) --- packages/neo-one-cli-common-node/src/configuration.ts | 7 ++++++- .../docs/2-advanced-guides/09-configuration-options.md | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index c392fe7e3e..6b113db10d 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -305,7 +305,12 @@ const validateConfig = async (rootDir: string, configIn: any): Promise Date: Mon, 7 Dec 2020 13:58:16 -0800 Subject: [PATCH 131/141] feat(consensus): finish private consensus network (#2235) Co-authored-by: Spencer Corwin --- packages/neo-one-client-common/src/crypto.ts | 10 +- packages/neo-one-client-common/src/index.ts | 1 + .../src/models/AccountContract.ts} | 50 ++- .../src/models/SignerModel.ts | 40 +- .../neo-one-client-common/src/models/index.ts | 1 + .../models/transaction/TransactionModel.ts | 14 +- .../attribute/AttributeBaseModel.ts | 9 + .../neo-one-client-common/src/models/types.ts | 17 + packages/neo-one-client-common/src/prices.ts | 201 +++++++++ packages/neo-one-client-common/src/types.ts | 31 +- packages/neo-one-client-common/src/utils.ts | 2 + packages/neo-one-client-core/src/Client.ts | 46 +-- .../provider/sendrawtransaction.test.ts | 2 +- .../src/__tests__/signatures.test.ts | 74 ++++ .../user/LocalUserAccountProvider.test.ts | 141 +++++++ packages/neo-one-client-core/src/errors.ts | 5 + .../src/provider/JSONRPCClient.ts | 23 ++ .../src/provider/NEOONEDataProvider.ts | 29 +- .../src/provider/NEOONEProvider.ts | 19 + .../src/provider/convert.ts | 2 +- .../src/user/LocalUserAccountProvider.ts | 383 +++++++++++++----- .../src/user/UserAccountProviderBase.ts | 272 ++++++------- .../src/user/keystore/LocalKeyStore.ts | 63 +++ .../src/user/keystore/LocalStringStore.ts | 63 ++- packages/neo-one-node-bin/src/getOptions.ts | 6 +- .../neo-one-node-blockchain/src/Blockchain.ts | 46 ++- .../src/PersistingBlockchain.ts | 8 +- .../neo-one-node-blockchain/src/errors.ts | 5 + packages/neo-one-node-blockchain/src/utils.ts | 165 ++------ .../neo-one-node-blockchain/src/verify.ts | 17 +- .../neo-one-node-consensus/src/Consensus.ts | 1 + .../src/checkPayload.ts | 1 + .../src/context/common.ts | 18 +- .../src/handleTransactionReceived.ts | 19 + .../neo-one-node-consensus/src/makePayload.ts | 2 +- .../neo-one-node-core/src/ApplicationLog.ts | 5 +- packages/neo-one-node-core/src/BlockBase.ts | 2 +- packages/neo-one-node-core/src/Blockchain.ts | 13 +- .../neo-one-node-core/src/ConsensusData.ts | 6 +- packages/neo-one-node-core/src/Native.ts | 2 +- .../neo-one-node-core/src/Serializable.ts | 1 + packages/neo-one-node-core/src/Signer.ts | 45 +- .../neo-one-node-core/src/TrimmedBlock.ts | 2 +- packages/neo-one-node-core/src/Verifiable.ts | 5 +- .../ContractParametersContext.test.ts | 12 +- .../src/consensus/BlockBuilder.ts | 18 +- .../src/consensus/ConsensusContext.ts | 56 +-- packages/neo-one-node-core/src/index.ts | 1 - .../src/payload/ConsensusPayload.ts | 10 +- .../src/transaction/Transaction.ts | 22 +- .../transaction/attributes/AttributeBase.ts | 7 - packages/neo-one-node-core/src/vm.ts | 11 +- packages/neo-one-node-native/src/Policy.ts | 4 +- .../neo-one-node-neo-settings/src/common.ts | 14 +- .../src/createMain.ts | 21 +- .../src/createPriv.ts | 46 +++ .../src/createTest.ts | 5 +- .../neo-one-node-neo-settings/src/index.ts | 2 + .../neo-one-node-neo-settings/src/priv.ts | 15 + .../neo-one-node-neo-settings/src/serde.ts | 12 +- packages/neo-one-node-protocol/src/Node.ts | 1 + .../src/createHandler.ts | 52 ++- .../src/levelUpStorage.ts | 1 + .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 4 +- .../lib/Dispatcher.Snapshot.cs | 3 + packages/neo-one-node-vm/lib/Dispatcher.cs | 2 +- .../neo-one-node-vm/lib/Dispatcher.csproj | 2 +- .../neo-one-node-vm/src/ApplicationEngine.ts | 24 +- .../src/__tests__/Dispatcher.test.ts | 26 +- .../src/__tests__/blockchain.test.ts | 28 +- .../src/__tests__/consensus.test.ts | 6 +- packages/neo-one-node/src/startFullNode.ts | 2 +- 72 files changed, 1597 insertions(+), 677 deletions(-) rename packages/{neo-one-node-core/src/Contract.ts => neo-one-client-common/src/models/AccountContract.ts} (50%) create mode 100644 packages/neo-one-client-common/src/prices.ts create mode 100644 packages/neo-one-client-core/src/__tests__/signatures.test.ts create mode 100644 packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts create mode 100644 packages/neo-one-node-neo-settings/src/createPriv.ts create mode 100644 packages/neo-one-node-neo-settings/src/priv.ts diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 498775f7e0..f2cd912838 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -556,8 +556,8 @@ const decryptNEP2 = async ({ return common.bufferToPrivateKey(privateKey); }; -const checkSigUInt = Buffer.from([0x747476aa]); -const checkMultiSigUint = Buffer.from([0xc7c34cba]); +const checkMultisigWithECDsaSecp256r1 = Buffer.from('138defaf', 'hex'); +const verifyECDsaSecp256r1 = Buffer.from('95440d78', 'hex'); // tslint:disable const isMultiSigContract = (script: Buffer) => { @@ -616,7 +616,7 @@ const isMultiSigContract = (script: Buffer) => { 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) !== checkMultiSigUint) return false; + if (!script.slice(i).equals(checkMultisigWithECDsaSecp256r1)) return false; return true; }; // tslint:enable @@ -683,7 +683,7 @@ const isMultiSigContractWithResult = (script: Buffer): MultiSigResult => { 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) !== checkMultiSigUint) return { result: false }; + if (!script.slice(i).equals(checkMultisigWithECDsaSecp256r1)) return { result: false }; return { result: true, m, n, points }; }; // tslint:enable @@ -694,7 +694,7 @@ const isSignatureContract = (script: Buffer) => script[1] === 33 && script[35] === Op.PUSHNULL && script[36] === Op.SYSCALL && - script.slice(37) === checkSigUInt; + script.slice(37).equals(verifyECDsaSecp256r1); const isStandardContract = (script: Buffer) => isSignatureContract(script) || isMultiSigContract(script); diff --git a/packages/neo-one-client-common/src/index.ts b/packages/neo-one-client-common/src/index.ts index 06d81849cf..a44456a45b 100644 --- a/packages/neo-one-client-common/src/index.ts +++ b/packages/neo-one-client-common/src/index.ts @@ -8,6 +8,7 @@ export * from './IOHelper'; export * from './JSONHelper'; export * from './models'; export * from './paramUtils'; +export * from './prices'; export * from './BaseScriptBuilder'; export * from './ScriptBuilder'; export * from './types'; diff --git a/packages/neo-one-node-core/src/Contract.ts b/packages/neo-one-client-common/src/models/AccountContract.ts similarity index 50% rename from packages/neo-one-node-core/src/Contract.ts rename to packages/neo-one-client-common/src/models/AccountContract.ts index 8569a4a864..2e641b5bee 100644 --- a/packages/neo-one-node-core/src/Contract.ts +++ b/packages/neo-one-client-common/src/models/AccountContract.ts @@ -1,41 +1,52 @@ +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 { - common, ContractParameterTypeModel, - crypto, - ECPoint, - scriptHashToAddress, - UInt160, -} from '@neo-one/client-common'; -import _ from 'lodash'; -import { utils } from './utils'; + toContractParameterType, + toJSONContractParameterType, +} from './ContractParameterTypeModel'; +import { AccountContractJSON } from './types'; -export interface ContractAdd { +export interface AccountContractAdd { readonly script: Buffer; readonly parameterList: readonly ContractParameterTypeModel[]; readonly scriptHash?: UInt160; readonly address?: string; } -export class Contract { - public static createMultiSigContract(m: number, publicKeys: readonly ECPoint[]): Contract { - return new Contract({ +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): Contract { - return new Contract({ + 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 }: ContractAdd) { + 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)); @@ -51,4 +62,13 @@ export class Contract { 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/SignerModel.ts b/packages/neo-one-client-common/src/models/SignerModel.ts index b775317187..b90023b464 100644 --- a/packages/neo-one-client-common/src/models/SignerModel.ts +++ b/packages/neo-one-client-common/src/models/SignerModel.ts @@ -1,7 +1,11 @@ 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 { witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; +import { SignerJSON } from './types'; +import { toJSONWitnessScope, witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; export interface SignerAdd { readonly account: UInt160; @@ -10,6 +14,11 @@ export interface SignerAdd { 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; @@ -21,6 +30,18 @@ export class SignerModel implements SerializableWire { 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; @@ -28,6 +49,10 @@ export class SignerModel implements SerializableWire { this.allowedGroups = allowedGroups === undefined ? [] : allowedGroups; } + public get size() { + return this.sizeInternal(); + } + public serializeWireBase(writer: BinaryWriter): void { writer.writeUInt160(this.account); writer.writeUInt8(this.scopes); @@ -38,4 +63,17 @@ export class SignerModel implements SerializableWire { 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/index.ts b/packages/neo-one-client-common/src/models/index.ts index 863b8cd5ae..50c880cde2 100644 --- a/packages/neo-one-client-common/src/models/index.ts +++ b/packages/neo-one-client-common/src/models/index.ts @@ -1,3 +1,4 @@ +export * from './AccountContract'; export * from './ContractParameterTypeModel'; export * from './SignerModel'; export * from './VerifyResultModel'; 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 b568aaa8e4..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,8 +1,9 @@ import { Constructor } from '@neo-one/utils'; import BN from 'bn.js'; import { BinaryWriter } from '../../BinaryWriter'; -import { ECPoint, PrivateKey } from '../../common'; +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'; @@ -29,6 +30,13 @@ export class TransactionModel< > 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; @@ -63,6 +71,10 @@ export class TransactionModel< this.networkFee = networkFee; } + public getScriptHashesForVerifying(): readonly UInt160[] { + return this.signers.map((signer) => signer.account); + } + public clone( options: { readonly witnesses?: readonly TWitness[] } = {}, ): TransactionModel { 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 24775a4d24..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,4 +1,5 @@ import { BinaryWriter } from '../../../BinaryWriter'; +import { IOHelper } from '../../../IOHelper'; import { createSerializeWire, SerializableWire, SerializeWire } from '../../Serializable'; import { AttributeTypeModel } from './AttributeTypeModel'; @@ -15,4 +16,12 @@ export abstract class AttributeBaseModel implements SerializableWire { 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/types.ts b/packages/neo-one-client-common/src/models/types.ts index d72e1a94d3..76cfb4949f 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,5 +1,6 @@ import { JSONObject } from '@neo-one/utils'; import { UInt256Hex } from '../common'; +import { UserAccount } from '../types'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; @@ -291,6 +292,13 @@ export interface ApplicationLogJSON { readonly notifications: readonly NotificationJSON[]; } +export interface AccountContractJSON { + readonly script: string; + readonly parameterlist: readonly ContractParameterTypeJSON[]; + readonly scripthash: string; + readonly address: string; +} + export interface TransactionJSON { readonly hash: string; readonly size: number; @@ -519,3 +527,12 @@ export interface VersionJSON { 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/prices.ts b/packages/neo-one-client-common/src/prices.ts new file mode 100644 index 0000000000..3f92cefa78 --- /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(800), + [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(200), + [Op.NOTEQUAL]: new BigNumber(200), + [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(7000), + [Op.UNPACK]: new BigNumber(7000), + [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(7000), + [Op.PICKITEM]: new BigNumber(270000), + [Op.APPEND]: new BigNumber(15000), + [Op.SETITEM]: new BigNumber(270000), + [Op.REVERSEITEMS]: new BigNumber(500), + [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 6719320a2c..cca6cb2d57 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -6,6 +6,7 @@ import { Observable } from 'rxjs'; import { RawSourceMap } from 'source-map'; import { ECPoint, UInt160, UInt160Hex, UInt256 } from './common'; import { + AccountContract, AttributeTypeModel, NotificationJSON, StackItemJSON, @@ -460,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; } /** @@ -595,14 +600,14 @@ export interface UserAccountProvider { * * Otherwise, parameters are the same as `invoke`. */ - // readonly invokeClaim: ( - // contract: AddressString, - // method: string, - // params: ReadonlyArray, - // paramsZipped: ReadonlyArray, - // options?: TransactionOptions, - // sourceMaps?: SourceMaps, - // ) => Promise; + readonly invokeClaim: ( + contract: AddressString, + method: string, + params: ReadonlyArray, + paramsZipped: ReadonlyArray, + options?: TransactionOptions, + sourceMaps?: SourceMaps, + ) => Promise; /** * Invokes the constant `method` on `contract` with `params` on `network`. */ @@ -846,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. * @@ -854,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 } diff --git a/packages/neo-one-client-common/src/utils.ts b/packages/neo-one-client-common/src/utils.ts index d23475a4d7..1eb9e7716b 100644 --- a/packages/neo-one-client-common/src/utils.ts +++ b/packages/neo-one-client-common/src/utils.ts @@ -66,6 +66,7 @@ function lazyInput(getValue: (input: Input) => Value): (input: Inp } 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), @@ -98,4 +99,5 @@ export const utils = { lazy, lazyInput, randomUInt, + randomUShort, }; diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index c7d81b2fcb..65e9e82c0e 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -610,29 +610,29 @@ export class Client< /** * @internal */ - // public async __invokeClaim( - // contract: AddressString, - // method: string, - // params: ReadonlyArray, - // paramsZipped: ReadonlyArray, - // optionsIn?: TransactionOptions, - // sourceMaps: SourceMaps = {}, - // ): Promise { - // args.assertAddress('contract', contract); - // args.assertString('method', method); - // args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); - // paramsZipped.forEach(([tupleString, tupleParam]) => [ - // args.assertString('tupleString', tupleString), - // args.assertNullableParam('tupleParam', tupleParam), - // ]); - // const options = args.assertTransactionOptions('options', optionsIn); - // args.assertSourceMaps('sourceMaps', sourceMaps); - // await this.applyBeforeRelayHook(options); - - // return this.addTransactionHooks( - // this.getProvider(options).invokeClaim(contract, method, params, paramsZipped, options, sourceMaps), - // ); - // } + public async __invokeClaim( + contract: AddressString, + method: string, + params: ReadonlyArray, + paramsZipped: ReadonlyArray, + optionsIn?: TransactionOptions, + sourceMaps: SourceMaps = {}, + ): Promise { + args.assertAddress('contract', contract); + args.assertString('method', method); + args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); + paramsZipped.forEach(([tupleString, tupleParam]) => [ + args.assertString('tupleString', tupleString), + args.assertNullableParam('tupleParam', tupleParam), + ]); + const options = args.assertTransactionOptions('options', optionsIn); + args.assertSourceMaps('sourceMaps', sourceMaps); + await this.applyBeforeRelayHook(options); + + return this.addTransactionHooks( + this.getProvider(options).invokeClaim(contract, method, params, paramsZipped, options, sourceMaps), + ); + } /** * @internal 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 index 5436f8ead0..b1050a175c 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts @@ -128,7 +128,7 @@ describe('RPC Call sendrawtransaction', () => { standbyValidators: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => common.stringToECPoint(p), ), - addressVersion: 23, + addressVersion: common.NEO_ADDRESS_VERSION, messageMagic: 7630401, }, }; 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__/user/LocalUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts new file mode 100644 index 0000000000..42093ec2cf --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -0,0 +1,141 @@ +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:8081/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); + }); +}); diff --git a/packages/neo-one-client-core/src/errors.ts b/packages/neo-one-client-core/src/errors.ts index fdb25d590e..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) => diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index afbe3c6b90..c7f9b4f730 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -22,6 +22,7 @@ import { UnclaimedGASJSON, ValidatorJSON, VerboseTransactionJSON, + VerificationCostJSON, VersionJSON, } from '@neo-one/client-common'; import { RelayTransactionError } from '../errors'; @@ -76,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({ @@ -110,6 +115,24 @@ export class JSONRPCClient { ); } + public async getVerificationCost(hash: AddressString, transaction: BufferString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getverificationcost', + params: [hash, transaction], + }), + ); + } + + public async testTransaction(transaction: BufferString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'testtransaction', + params: [transaction], + }), + ); + } + public async relayTransaction(value: BufferString): Promise { return this.withInstance(async (provider) => provider diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index f8af79e026..81b50813f1 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -131,12 +131,39 @@ export class NEOONEDataProvider implements DeveloperProvider { return convertCallReceipt(receipt); } + public async testTransaction(transaction: TransactionModel): Promise { + const receipt = await this.mutableClient.testTransaction(transaction.serializeWire().toString('hex')); + + return convertCallReceipt(receipt); + } + public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { const block = await this.mutableClient.getBlock(hashOrIndex, options); return this.convertBlock(block); } + public async getFeePerByte(): Promise { + const feePerByte = await this.mutableClient.getFeePerByte(); + + return new BigNumber(feePerByte); + } + + 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 { + fee: new BigNumber(result.fee), + size: result.size, + }; + } + public iterBlocks(options: IterOptions = {}): AsyncIterable { return AsyncIterableX.from( new AsyncBlockIterator({ @@ -296,7 +323,7 @@ export class NEOONEDataProvider implements DeveloperProvider { return { version: transaction.version, nonce: transaction.nonce, - sender: transaction.sender ? scriptHashToAddress(transaction.sender) : undefined, + sender: transaction.sender ? transaction.sender : undefined, hash: transaction.hash, size: transaction.size, validUntilBlock: transaction.validuntilblock, diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index 82427466ac..634e78fce9 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -80,6 +80,25 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).testInvoke(transaction); } + public async getFeePerByte(network: NetworkType): Promise { + return this.getProvider(network).getFeePerByte(); + } + + public async getVerificationCost( + network: NetworkType, + hash: AddressString, + transaction: TransactionModel, + ): Promise<{ + readonly fee: BigNumber; + readonly size: number; + }> { + return this.getProvider(network).getVerificationCost(hash, transaction); + } + + public async testTransaction(network: NetworkType, transaction: TransactionModel): Promise { + return this.getProvider(network).testTransaction(transaction); + } + public async call( network: NetworkType, contract: AddressString, diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 0e5ffb1efd..c0ca0d1d99 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -23,7 +23,7 @@ export function convertCallReceipt(receipt: CallReceiptJSON): RawCallReceipt { return { script: JSONHelper.readBuffer(receipt.script), state: receipt.state, - gasConsumed: new BigNumber(receipt.gasconsumed), + gasConsumed: common.fixedToDecimal(new BN(receipt.gasconsumed), 0), stack: typeof receipt.stack === 'string' ? receipt.stack : receipt.stack.map(convertStackItem), notifications: receipt.notifications.map(convertNotification), }; diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 5b12ba69dd..4a83a7e078 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -1,14 +1,22 @@ import { + AddressString, addressToScriptHash, Attribute, common, crypto, + ECDsaVerifyPrice, + getOpCodePrice, GetOptions, - IterOptions, + InvalidFormatError, + IOHelper, NetworkType, + Op, + Param, RawAction, RelayTransactionResult, ScriptBuilder, + ScriptBuilderParam, + SignerModel, SourceMaps, Transaction, TransactionModel, @@ -20,14 +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, UnknownAccountError } from '../errors'; -import { Hash160 } from '../Hash160'; +import { InsufficientNetworkFeeError, InvokeError, UnknownAccountError } from '../errors'; import { ExecuteInvokeMethodOptions, ExecuteInvokeScriptOptions, @@ -77,11 +86,7 @@ export interface KeyStore { } export interface Provider extends ProviderBase { - readonly relayTransaction: ( - network: NetworkType, - transaction: TransactionModel, - networkFee?: BigNumber | undefined, - ) => Promise; + readonly relayTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; } /** @@ -98,7 +103,6 @@ export class LocalUserAccountProvider Promise; public readonly updateUserAccountName?: (options: UpdateAccountNameOptions) => Promise; - public readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; protected readonly executeInvokeMethod: ( options: ExecuteInvokeMethodOptions, ) => Promise>; @@ -130,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 { + const witnessScript = this.getUserAccount({ + network, + address: crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: hash, + }), + }).contract.script; + + 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({ transaction: transactionUnsigned, from, onConfirm, - networkFee, - sourceMaps, }: { readonly transaction: TransactionModel; readonly from: UserAccountID; @@ -179,35 +260,58 @@ export class LocalUserAccountProvider 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); + // 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, + ); + } + + if (witness === undefined) { + throw new InvalidFormatError(); + } + + 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; @@ -232,83 +336,139 @@ export class LocalUserAccountProvider; - // readonly paramsZipped: ReadonlyArray; - // readonly from: UserAccountID; - // readonly sourceMaps?: SourceMaps; - // }): Promise { - // const builder = new ScriptBuilder() - // .emitSysCall('System.Contract.Call', common.GAS_CONTRACT_SCRIPT_HASH, 'transfer', [ - // addressToScriptHash(contract), - // common.GAS_CONTRACT_SCRIPT_HASH, - // unclaimedAmount.toString(), - // ]) - // .build(); - - // const { gas } = await this.getSystemFee({ from, script, attributes }); - - // const transaction = new TransactionModel({ - // systemFee: utils.bigNumberToBN(gas, 8), - // // Since the contract address is an input, we must add a witness for it. - // witnesses: this.getInvokeScripts(method, params, true), - // script, - // }); - - // return this.sendTransaction({ - // from, - // transaction, - // onConfirm: async ({ receipt }) => receipt, - // sourceMaps, - // }); - // } - - // TODO: probably want to make sure an "executeTransfer" function is able to transfer any asset - // since they're all just contract invocations now + protected async executeInvokeClaim({ + contract, + unclaimedAmount, + attributes, + method, + params, + paramsZipped, // TODO: see old executeInvokeClaim + from, + sourceMaps, + networkFee, + }: { + readonly contract: AddressString; + readonly unclaimedAmount: BigNumber; + readonly attributes: readonly Attribute[]; + readonly method: string; + readonly params: ReadonlyArray; + readonly paramsZipped: ReadonlyArray; + readonly from: UserAccountID; + readonly sourceMaps?: SourceMaps; + 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. + witnesses: this.getInvokeScripts(method, params, true), + script, + attributes: this.convertAttributes(attributes), + validUntilBlock: count + 240, + messageMagic, + }); + + return this.sendTransaction({ + from, + transaction, + onConfirm: async ({ receipt }) => receipt, + sourceMaps, + }); + } + protected async executeTransfer( transfers: readonly Transfer[], from: UserAccountID, attributes: readonly Attribute[], - networkFee: BigNumber, + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number = TransactionModel.maxValidBlockIncrement, ): Promise { const sb = new ScriptBuilder(); + if (transfers.length > 1) { + throw new Error('temporary'); + } + + const [{ addressVersion }, { count, messageMagic }] = await Promise.all([ + this.provider.getNetworkSettings(from.network), + this.getCountAndMagic(from.network), + ]); + transfers.forEach((transfer) => { - sb.emitSysCall( - 'System.Contract.Call', - transfer.asset === Hash160.NEO ? common.nativeHashes.NEO : common.nativeHashes.GAS, + sb.emitAppCall( + common.stringToUInt160(transfer.asset), 'transfer', - [addressToScriptHash(from.address), addressToScriptHash(transfer.to), transfer.amount.toString()], + crypto.addressToScriptHash({ addressVersion, address: from.address }), + crypto.addressToScriptHash({ addressVersion, address: transfer.to }), + transfer.amount.toNumber(), ); }); + const script = sb.build(); - const { gas } = await this.getSystemFee({ from, attributes, script }); + const signer = new SignerModel({ + account: crypto.addressToScriptHash({ address: from.address, addressVersion }), + scopes: WitnessScopeModel.Global, + }); + + const nonce = utils.randomUShort(); + const validUntilBlock = count + validBlockCount; - const transaction = new TransactionModel({ - systemFee: utils.bigNumberToBN(gas, 8), // TODO: check. fee for transfer method is 0.08 GAS - networkFee: utils.bigNumberToBN(networkFee, 8), // TODO: check + 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, + }); + + const [systemFee, networkFee] = await Promise.all([ + this.getSystemFee({ + network: from.network, + transaction: feelessTransaction, + maxFee: maxSystemFee, + }), + this.getNetworkFee({ + network: from.network, + transaction: feelessTransaction, + maxFee: maxNetworkFee, + }), + ]); + + 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({ from, transaction, onConfirm: async ({ receipt }) => receipt, - networkFee, }); } @@ -321,22 +481,25 @@ export class LocalUserAccountProvider({ @@ -347,24 +510,26 @@ export class LocalUserAccountProvider({ script, from, attributes, - gas, + systemFee, + networkFee, witnesses, onConfirm, sourceMaps, }: ExecuteInvokeScriptOptions): Promise> { - // TODO: check - const { gas: systemFee } = await this.getSystemFee({ attributes, script, from }); + const { count, messageMagic } = await this.getCountAndMagic(from); const invokeTransaction = new TransactionModel({ systemFee: utils.bigNumberToBN(systemFee, 8), // TODO: check - networkFee: utils.bigNumberToBN(gas, 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), - signers: [], // TODO: ? script, witnesses, + validUntilBlock: count + 240, + messageMagic, }); try { diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 7599b8591d..b017d6a7f2 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -16,12 +16,13 @@ import { NetworkType, Param, ParamJSON, - RawAction, RawApplicationLogData, RawCallReceipt, RawInvocationData, RawInvokeReceipt, ScriptBuilderParam, + Signer, + SignerModel, SourceMaps, Transaction, TransactionModel, @@ -29,19 +30,26 @@ import { TransactionReceipt, TransactionResult, Transfer, + UInt160, UserAccount, UserAccountID, utils, Witness, WitnessModel, } from '@neo-one/client-common'; -import { processActionsAndMessage } from '@neo-one/client-switch'; import { Labels, utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; +import { BN } from 'bn.js'; import debug from 'debug'; import { Observable } from 'rxjs'; import { clientUtils } from '../clientUtils'; -import { InsufficientSystemFeeError, InvokeError, NoAccountError, NotImplementedError } from '../errors'; +import { + InsufficientSystemFeeError, + InvokeError, + NoAccountError, + NothingToClaimError, + NotImplementedError, +} from '../errors'; import { converters } from './converters'; const logger = debug('NEOONE:LocalUserAccountProvider'); @@ -57,6 +65,7 @@ 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; @@ -66,15 +75,18 @@ export interface InvokeRawOptions { readonly witnesses?: readonly WitnessModel[]; readonly labels?: Record; readonly sourceMaps?: SourceMaps; + readonly networkFee?: BigNumber; } export interface ExecuteInvokeScriptOptions { readonly script: Buffer; readonly from: UserAccountID; readonly attributes: readonly Attribute[]; - readonly gas: BigNumber; + 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; + // TODO: fix onConfirm type. return type from node is no longer valid readonly onConfirm: (options: { readonly transaction: Transaction; readonly data: RawInvocationData; @@ -109,6 +121,7 @@ export interface Provider { ) => Promise; readonly getApplicationLogData: (network: NetworkType, hash: Hash256String) => Promise; readonly testInvoke: (network: NetworkType, transaction: FeelessTransactionModel) => Promise; + readonly testTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; readonly call: ( network: NetworkType, contract: AddressString, @@ -117,16 +130,26 @@ export interface Provider { ) => Promise; readonly getNetworkSettings: (network: NetworkType) => Promise; readonly getBlockCount: (network: NetworkType) => Promise; + readonly getFeePerByte: (network: NetworkType) => Promise; readonly getTransaction: (network: NetworkType, hash: Hash256String) => Promise; readonly iterBlocks: (network: NetworkType, options?: IterOptions) => AsyncIterable; readonly getAccount: (network: NetworkType, address: AddressString) => Promise; + readonly getVerificationCost: ( + network: NetworkType, + hash: AddressString, + 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; } interface FullTransfer extends Transfer { @@ -135,18 +158,12 @@ interface FullTransfer extends Transfer { export abstract class UserAccountProviderBase { public readonly provider: TProvider; - public readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; protected mutableBlockCount: number; public constructor({ provider }: { readonly provider: TProvider }) { this.provider = provider; this.mutableBlockCount = 0; - - const iterActionsRaw = this.provider.iterActionsRaw; - if (iterActionsRaw !== undefined) { - this.iterActionsRaw = iterActionsRaw.bind(this.provider); - } } public getCurrentUserAccount(): UserAccount | undefined { @@ -178,11 +195,14 @@ export abstract class UserAccountProviderBase { } public async transfer(transfers: readonly Transfer[], options?: TransactionOptions): Promise { - const { from, attributes, networkFee } = this.getTransactionOptions(options); + const { from, attributes, maxNetworkFee, maxSystemFee, validBlockCount } = this.getTransactionOptions(options); - return this.capture(async () => this.executeTransfer(transfers, from, attributes, networkFee), { - name: 'neo_transfer', - }); + return this.capture( + async () => this.executeTransfer(transfers, from, attributes, maxNetworkFee, maxSystemFee, validBlockCount), + { + name: 'neo_transfer', + }, + ); } public async claim(options?: TransactionOptions): Promise { @@ -261,6 +281,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO? public async invokeSend( contract: AddressString, method: string, @@ -290,6 +311,7 @@ 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, @@ -317,6 +339,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO: finalize after compiler (need to open issue) public async invokeCompleteSend( contract: AddressString, method: string, @@ -341,6 +364,7 @@ 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, @@ -361,6 +385,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO: finalize after compiler (need to open issue) public async invokeRefundAssets( contract: AddressString, method: string, @@ -374,10 +399,6 @@ export abstract class UserAccountProviderBase { const { from, attributes } = transactionOptions; const refundTransaction = await this.provider.getTransaction(from.network, hash); - // TODO: not sure how this will be handled now without UTXO. Can smart contracts receive native assets the same way? - // in order to refund assets we would have to invoke a "refundAssets" method on the smart contract, which would have to - // then call a transfer on the native NEO/GAS token contracts. We might have to construct a transaction here where - // one paramter of the "refundAssets" method is the refundTransaction hash and a valid signature??? return this.invokeRaw({ invokeMethodOptionsOrScript: { @@ -389,6 +410,7 @@ 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, @@ -409,40 +431,40 @@ export abstract class UserAccountProviderBase { }); } - // public async invokeClaim( - // contract: AddressString, - // method: string, - // params: ReadonlyArray, - // paramsZipped: ReadonlyArray, - // options: TransactionOptions = {}, - // sourceMaps: SourceMaps = {}, - // ): Promise { - // const { from, attributes, networkFee } = this.getTransactionOptions(options); - - // return this.capture( - // async () => { - // const unclaimedAmount = await this.provider.getUnclaimed(from.network, contract); - - // if (unclaimedAmount.lte(new BigNumber(0))) { - // throw new NothingToClaimError(from); - // } - - // return this.executeInvokeClaim({ - // contract, - // unclaimedAmount, - // attributes, - // from, - // method, - // params, - // paramsZipped, - // sourceMaps, - // }); - // }, - // { - // name: 'neo_invoke_claim', - // }, - // ); - // } + public async invokeClaim( + contract: AddressString, + method: string, + params: ReadonlyArray, + paramsZipped: ReadonlyArray, + options: TransactionOptions = {}, + sourceMaps: SourceMaps = {}, + ): Promise { + const { from, attributes } = this.getTransactionOptions(options); + + return this.capture( + async () => { + const unclaimedAmount = await this.provider.getUnclaimed(from.network, contract); + + if (unclaimedAmount.lte(new BigNumber(0))) { + throw new NothingToClaimError(from); + } + + return this.executeInvokeClaim({ + contract, + unclaimedAmount, + attributes, + from, + method, + params, + paramsZipped, + sourceMaps, + }); + }, + { + name: 'neo_invoke_claim', + }, + ); + } public async call( network: NetworkType, @@ -453,62 +475,35 @@ export abstract class UserAccountProviderBase { return this.provider.call(network, contract, method, params); } - public async checkSystemFees({ - script, - from, - systemFee, - attributes = [], - witnesses = [], - sourceMaps, + public async getSystemFee({ + network, + transaction, + maxFee, }: { - readonly script: Buffer; - readonly transfers?: ReadonlyArray; - readonly from: UserAccountID; - readonly networkFee: BigNumber; - readonly systemFee: BigNumber; - readonly attributes?: ReadonlyArray; - readonly witnesses?: ReadonlyArray; - readonly sourceMaps?: SourceMaps; - }): Promise<{ - readonly gas: BigNumber; - readonly attributes: ReadonlyArray; - }> { - const [count, { messageMagic }] = await Promise.all([ - this.provider.getBlockCount(from.network), - this.provider.getNetworkSettings(from.network), - ]); - const testTransaction = new FeelessTransactionModel({ - attributes: this.convertAttributes(attributes), - script, - witnesses, - messageMagic, - validUntilBlock: count + 240, - }); - - const callReceipt = await this.provider.testInvoke(from.network, testTransaction); - if (callReceipt === 'FAULT') { - const message = await processActionsAndMessage({ - actions: callReceipt.actions, - message: callReceipt.result.message, - sourceMaps, - }); - throw new InvokeError(message); + 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.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); + 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, attributes }; + return gas; } protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { const { attributes = [], - networkFee = utils.ZERO_BIG_NUMBER, - systemFee = utils.ZERO_BIG_NUMBER, + maxNetworkFee = utils.ZERO_BIG_NUMBER, + maxSystemFee = utils.ZERO_BIG_NUMBER, from: fromIn, + validBlockCount = TransactionModel.maxValidBlockIncrement - 1, } = options; let from = fromIn; @@ -523,8 +518,9 @@ export abstract class UserAccountProviderBase { return { from, attributes, - networkFee, - systemFee, + maxNetworkFee, + maxSystemFee, + validBlockCount, }; } @@ -557,7 +553,6 @@ export abstract class UserAccountProviderBase { ].filter(commonUtils.notNull); } - // TODO: check this protected addWitness({ transaction, witness, @@ -641,40 +636,6 @@ export abstract class UserAccountProviderBase { } } - protected async getSystemFee({ - script, - from, - attributes = [], - witnesses = [], - }: { - readonly script: Buffer; - readonly from: UserAccountID; - readonly attributes?: ReadonlyArray; - readonly witnesses?: ReadonlyArray; - }): Promise<{ - readonly gas: BigNumber; - readonly attributes: ReadonlyArray; - }> { - const testTransaction = new FeelessTransactionModel({ - attributes: this.convertAttributes(attributes), - script, - witnesses, - }); - - const callReceipt = await this.provider.testInvoke(from.network, testTransaction); - if (callReceipt.result.state === 'FAULT') { - const message = await processActionsAndMessage({ - actions: callReceipt.actions, - message: callReceipt.result.message, - }); - throw new InvokeError(message); - } - - const gas = callReceipt.result.gasConsumed.integerValue(BigNumber.ROUND_UP); - - return { gas, attributes }; - } - protected abstract async executeInvokeMethod( options: ExecuteInvokeMethodOptions, ): Promise>; @@ -683,13 +644,15 @@ export abstract class UserAccountProviderBase { options: ExecuteInvokeScriptOptions, ): 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, + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number, ): Promise; protected abstract async executeClaim( @@ -700,7 +663,6 @@ export abstract class UserAccountProviderBase { protected async invokeRaw({ invokeMethodOptionsOrScript, - transfers = [], options = {}, onConfirm, method, @@ -708,25 +670,22 @@ export abstract class UserAccountProviderBase { witnesses = [], labels = {}, sourceMaps, + 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, witnesses, - sourceMaps, }); - // TODO: instead of using inputs/outputs do we just use `transfers`? - // TODO: do we need to use 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 @@ -735,7 +694,8 @@ export abstract class UserAccountProviderBase { script, from, attributes, - gas, + systemFee, + networkFee, verify, witnesses, onConfirm, @@ -746,7 +706,8 @@ export abstract class UserAccountProviderBase { invokeMethodOptions, from, attributes, - gas, + systemFee, + networkFee, verify, witnesses, onConfirm, @@ -764,6 +725,17 @@ export abstract class UserAccountProviderBase { ); } + protected async getCountAndMagic( + network: NetworkType, + ): Promise<{ readonly count: number; readonly messageMagic: number }> { + const [count, { messageMagic }] = await Promise.all([ + this.provider.getBlockCount(network), + this.provider.getNetworkSettings(network), + ]); + + return { count, messageMagic }; + } + private getScriptAndInvokeMethodOptions( invokeMethodOptionsOrScript: InvokeMethodOptions | Buffer, ): { readonly script: Buffer; readonly invokeMethodOptions: InvokeMethodOptions | 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-node-bin/src/getOptions.ts b/packages/neo-one-node-bin/src/getOptions.ts index 43bb654cd7..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'; @@ -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-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 8eb203fb8a..f63e6bb7dd 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,9 +1,9 @@ import { common, - crypto, ECPoint, ScriptBuilder, TriggerType, + UInt160, UInt256, VerifyResultModel, } from '@neo-one/client-common'; @@ -41,7 +41,12 @@ import { BN } from 'bn.js'; import PriorityQueue from 'js-priority-queue'; import { Observable, Subject } from 'rxjs'; import { map, toArray } from 'rxjs/operators'; -import { BlockVerifyError, ConsensusPayloadVerifyError, GenesisBlockNotRegisteredError } from './errors'; +import { + BlockVerifyError, + ConsensusPayloadVerifyError, + GenesisBlockNotRegisteredError, + RecoverBlockchainError, +} from './errors'; import { getNep5UpdateOptions } from './getNep5UpdateOptions'; import { HeaderIndexCache } from './HeaderIndexCache'; import { PersistingBlockchain } from './PersistingBlockchain'; @@ -114,15 +119,14 @@ export const recoverHeaderIndex = async (storage: Storage) => { initCurrentHeaderHashes: sortedTrimmedBlocks.map((block) => block.hash), }); }; - export class Blockchain { public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { const headerIndexCache = await recoverHeaderIndex(storage); if (headerIndexCache.length > 0) { - const currentHeaderIndex = await headerIndexCache.get(headerIndexCache.length - 1); - const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: currentHeaderIndex }); + const currentHeaderHash = await headerIndexCache.get(headerIndexCache.length - 1); + const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: currentHeaderHash }); if (currentBlockTrimmed === undefined) { - throw new Error('For TS, this should never happen'); + throw new RecoverBlockchainError(headerIndexCache.length); } const currentBlock = await currentBlockTrimmed.getBlock(storage.transactions); @@ -184,6 +188,7 @@ export class Blockchain { options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); this.deserializeWireContext = { messageMagic: this.settings.messageMagic, + validatorsCount: this.settings.validatorsCount, }; this.mutableCurrentBlock = options.currentBlock; this.start(); @@ -446,6 +451,10 @@ export class Blockchain { return this.native.Policy.getMaxTransactionsPerBlock(this.storage); } + public async getFeePerByte(): Promise { + return this.native.Policy.getFeePerByte(this.storage); + } + public async persistBlock({ block, verify = false, @@ -473,18 +482,37 @@ export class Blockchain { }); } + public async getVerificationCost(contractHash: UInt160, transaction: Transaction) { + const contract = await this.contracts.tryGet(contractHash); + if (contract === undefined) { + return { fee: utils.ZERO, size: 0 }; + } + + return utils.verifyContract(contract, this.vm, transaction); + } + + public testTransaction(transaction: Transaction): CallReceipt { + return this.runEngineWrapper({ + script: transaction.script, + snapshot: 'clone', + container: transaction, + gas: common.ONE_HUNDRED_FIXED8, + testMode: true, + }); + } + public invokeScript(script: Buffer, signers?: Signers): CallReceipt { return this.runEngineWrapper({ script, snapshot: 'main', container: signers, - gas: 10, + gas: common.TEN_FIXED8, }); } public invokeTransaction( transaction: TTransaction, - gas: number, + gas: BN, ): CallReceipt { return this.vm.withApplicationEngine( { @@ -509,7 +537,7 @@ export class Blockchain { persistingBlock, offset = 0, testMode = false, - gas = 0, + gas = new BN(0), }: RunEngineOptions): CallReceipt { return this.vm.withSnapshots(({ main, clone }) => { const handler = snapshot === 'main' ? main : clone; diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index d81a804c50..e32139ec54 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -1,8 +1,8 @@ // tslint:disable no-array-mutation no-object-mutation -import { common, TriggerType, VMState } from '@neo-one/client-common'; +import { TriggerType, VMState } from '@neo-one/client-common'; import { ApplicationExecuted, Block, SnapshotHandler, Transaction, VM } from '@neo-one/node-core'; import { PersistNativeContractsError } from './errors'; -import { utils as blockchainUtils } from './utils'; +import { utils, utils as blockchainUtils } from './utils'; interface PersistingBlockchainOptions { readonly vm: VM; @@ -36,7 +36,7 @@ export class PersistingBlockchain { { trigger: TriggerType.System, snapshot: 'main', - gas: 0, + gas: utils.ZERO, testMode: true, }, (engine) => { @@ -88,7 +88,7 @@ export class PersistingBlockchain { trigger: TriggerType.Application, container: transaction, snapshot: 'clone', - gas: common.fixed8ToDecimal(transaction.systemFee).toNumber(), + gas: transaction.systemFee, testMode: false, }, (engine) => { diff --git a/packages/neo-one-node-blockchain/src/errors.ts b/packages/neo-one-node-blockchain/src/errors.ts index 8af5b1b947..2a4b1f6544 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -36,3 +36,8 @@ 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/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index 0ee23c7dfb..367f4d5fa2 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -1,22 +1,9 @@ -import { - common, - Contract, - crypto, - InvalidFormatError, - IOHelper, - Op, - ScriptBuilder, - TriggerType, - UInt160, - VMState, -} from '@neo-one/client-common'; +import { common, InvalidFormatError, IOHelper, ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; import { ApplicationEngine, BlockBase, - BlockchainStorage, CallFlags, - ECDsaVerifyPrice, - getOpCodePrice, + ContractState, Notification, Transaction, utils as coreUtils, @@ -58,119 +45,44 @@ const getCallReceipt = (engine: ApplicationEngine, container?: Verifiable) => ({ notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), }); -export interface TempWalletAccount { - readonly contract?: Contract; -} - -export type GetAccount = (hash: UInt160) => TempWalletAccount | undefined; - -export const getCalculateNetworkFee = ( - vm: VM, - storage: BlockchainStorage, - getAccount: GetAccount, - feePerByte: number, -) => async (transaction: Transaction) => { - const hashes = transaction.getScriptHashesForVerifying(); - // TODO: verify this size matches up across environments - const initSize = - Transaction.headerSize + - IOHelper.sizeOfArray(transaction.signers, (signer) => signer.size) + - IOHelper.sizeOfArray(transaction.attributes, (attr) => attr.size) + - IOHelper.sizeOfVarBytesLE(transaction.script) + - IOHelper.sizeOfVarUIntLE(hashes.length); - - const { fee, size } = await hashes.reduce(async (acc, hash) => { - const { fee: prevFee, size: prevSize } = await acc; - const { fee: nextFee, size: nextSize } = await verifyContract(hash, getAccount, storage, vm, transaction); - - return { fee: prevFee.add(nextFee), size: prevSize + nextSize }; - }, Promise.resolve({ fee: new BN(0), size: 0 })); - - return fee.addn(feePerByte * (size + initSize)); -}; - -const verifyContract = async ( - hash: UInt160, - getAccount: GetAccount, - storage: BlockchainStorage, - vm: VM, - transaction: Transaction, -) => { - const witnessScriptHex = getAccount(hash)?.contract?.script; - const witnessScript = witnessScriptHex ? Buffer.from(witnessScriptHex, 'hex') : undefined; - if (witnessScript === undefined) { - const contract = await storage.contracts.tryGet(hash); - if (contract === undefined) { - return { fee: coreUtils.ZERO, size: 0 }; - } - - 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: 0, - testMode: true, - }, - (engine) => { - engine.loadScript(contract.script, CallFlags.None); - engine.setInstructionPointer(verify.offset); - if (init !== undefined) { - engine.setInstructionPointer(init.offset); - } - - engine.loadScript(Buffer.from([]), 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; - }, - ); - - // TODO: once again need to verify decimal places on return types - return { fee: common.fixed8FromDecimal(gas.toString()), size: IOHelper.sizeOfUInt8 * 2 }; - } - if (crypto.isSignatureContract(witnessScript)) { - const sigSize = IOHelper.sizeOfVarBytesLE(witnessScript) + 67; - const sigFee = getOpCodePrice(Op.PUSHDATA1).muln(2).add(getOpCodePrice(Op.PUSHNULL)).add(ECDsaVerifyPrice); - - return { fee: sigFee, size: sigSize }; - } - 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).muln(m); - const mBuilder = new ScriptBuilder(); - const mScript = mBuilder.emitPushInt(m).build(); - const mFee = getOpCodePrice(mScript[0]).add(initMFee); - - const initNFee = getOpCodePrice(Op.PUSHDATA1).muln(n); - const nBuilder = new ScriptBuilder(); - const nScript = nBuilder.emitPushInt(n).build(); - const nFee = getOpCodePrice(nScript[0]).add(initNFee); - - const totalFee = getOpCodePrice(Op.PUSHNULL).add(ECDsaVerifyPrice.muln(n)).add(mFee).add(nFee); - - return { fee: totalFee, size: sizeMulti }; +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`); } - return { fee: coreUtils.ZERO, size: 0 }; + const init = contract.manifest.abi.getMethod('_initialize'); + const gas = vm.withApplicationEngine( + { + trigger: TriggerType.Verification, + container: transaction, + snapshot: 'clone', + gas: new BN(0), + testMode: true, + }, + (engine) => { + engine.loadScript(contract.script, CallFlags.None); + engine.setInstructionPointer(verify.offset); + if (init !== undefined) { + engine.setInstructionPointer(init.offset); + } + + engine.loadScript(Buffer.from([]), 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) => { @@ -192,7 +104,6 @@ export const utils = { getCallReceipt, getOnPersistNativeContractScript, verifyContract, - getCalculateNetworkFee, blockComparator, isTransaction, }; diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index f23d82d2b4..f460561cbc 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -9,9 +9,10 @@ import { Verifiable, VM, } from '@neo-one/node-core'; +import { BN } from 'bn.js'; import { ContractMethodError, ContractStateFetchError, WitnessVerifyError } from './errors'; -const maxVerificationGas = 0.5; +const maxVerificationGas = common.fixed8FromDecimal('0.5'); interface ApplicationEngineVerifyOptions { readonly verification: Buffer; @@ -58,12 +59,12 @@ export const verifyWithApplicationEngine = ( verifiable: Verifiable & SerializableContainer, verification: Buffer, index: number, - gas: number, + gas: BN, offset: number, init?: ContractMethodDescriptor, ): ExecuteScriptResult => vm.withApplicationEngine( - { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas, testMode: true }, + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas, testMode: false }, (engine) => { engine.loadScript(verification, CallFlags.None); engine.setInstructionPointer(offset); @@ -82,7 +83,7 @@ export const verifyWithApplicationEngine = ( return { result: false, gas }; } - return { result: true, gas: gas - engine.gasConsumed }; + return { result: true, gas: gas.sub(engine.gasConsumed) }; }, ); @@ -92,7 +93,7 @@ export const tryVerifyHash = async ( index: number, storage: BlockchainStorage, verifiable: Verifiable & SerializableContainer, - gas: number, + gas: BN, ): Promise => { const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; try { @@ -114,13 +115,13 @@ export const verifyWitnesses = async ( verifiable: Verifiable & SerializableContainer, storage: BlockchainStorage, native: NativeContainer, - gasIn: number, + gasIn: BN, ): Promise => { - if (gasIn < 0) { + if (gasIn.ltn(0)) { return false; } - const gas = gasIn > maxVerificationGas ? maxVerificationGas : gasIn; + const gas = gasIn.gt(maxVerificationGas) ? maxVerificationGas : gasIn; let hashes: readonly UInt160[]; try { diff --git a/packages/neo-one-node-consensus/src/Consensus.ts b/packages/neo-one-node-consensus/src/Consensus.ts index 0d4cc16837..894cb88321 100644 --- a/packages/neo-one-node-consensus/src/Consensus.ts +++ b/packages/neo-one-node-consensus/src/Consensus.ts @@ -191,6 +191,7 @@ export class Consensus { result = await handleTransactionReceived({ context, node: this.node, + privateNet: this.options.privateNet, privateKey: options.privateKey, transaction: event.transaction, timerContext: this.mutableTimerContext, diff --git a/packages/neo-one-node-consensus/src/checkPayload.ts b/packages/neo-one-node-consensus/src/checkPayload.ts index a6e9fc5551..c288148f52 100644 --- a/packages/neo-one-node-consensus/src/checkPayload.ts +++ b/packages/neo-one-node-consensus/src/checkPayload.ts @@ -28,6 +28,7 @@ export const checkPreparations = async (contextIn: ConsensusContext, node: Node, ) { 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); diff --git a/packages/neo-one-node-consensus/src/context/common.ts b/packages/neo-one-node-consensus/src/context/common.ts index 37b2f57ef6..195722e46c 100644 --- a/packages/neo-one-node-consensus/src/context/common.ts +++ b/packages/neo-one-node-consensus/src/context/common.ts @@ -1,11 +1,19 @@ -import { common, crypto, ECPoint, IOHelper, PrivateKey, ScriptBuilder, UInt256 } from '@neo-one/client-common'; +import { + AccountContract, + common, + crypto, + ECPoint, + IOHelper, + PrivateKey, + ScriptBuilder, + UInt256, +} from '@neo-one/client-common'; import { Blockchain, BlockchainStorage, ChangeViewConsensusMessage, CommitConsensusMessage, ConsensusContext, - Contract, ContractParametersContext, getBlockScriptHashesForVerifying, getM, @@ -66,7 +74,7 @@ const getPrimaryIndex = ({ export const createBlock = async (contextIn: ConsensusContext, storage: BlockchainStorage) => { let { context } = ensureHeader(contextIn); - const contract = Contract.createMultiSigContract(context.M, context.validators); + const contract = AccountContract.createMultiSigContract(context.M, context.validators); const scriptHashOptions = { previousHash: utils.nullthrows(context.blockBuilder.previousHash), witness: context.blockBuilder.witness, @@ -152,7 +160,7 @@ export const ensureMaxBlockLimitation = async ( } const newBlockSystemFee = acc.blockSystemFee.add(transaction.systemFee); - if (newBlockSystemFee > maxBlockSystemFee) { + if (newBlockSystemFee.gt(maxBlockSystemFee)) { return { ...acc, blockSize: newBlockSize, @@ -210,6 +218,8 @@ export const reset = async ({ previousHash: blockchain.currentBlock.hash, index: blockchain.currentBlockIndex + 1, nextConsensus: crypto.getConsensusAddress(validators), + merkleRoot: undefined, + messageMagic: blockchain.settings.messageMagic, }; const previousValidators = context.validators; diff --git a/packages/neo-one-node-consensus/src/handleTransactionReceived.ts b/packages/neo-one-node-consensus/src/handleTransactionReceived.ts index a4a007210e..56347597d0 100644 --- a/packages/neo-one-node-consensus/src/handleTransactionReceived.ts +++ b/packages/neo-one-node-consensus/src/handleTransactionReceived.ts @@ -8,15 +8,34 @@ export const handleTransactionReceived = async ({ context, node, privateKey, + privateNet, transaction, timerContext, }: { readonly context: ConsensusContext; readonly node: Node; readonly privateKey: PrivateKey; + readonly privateNet: boolean; readonly transaction: Transaction; 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.isBackup || context.notAcceptingPayloadsDueToViewChanging || diff --git a/packages/neo-one-node-consensus/src/makePayload.ts b/packages/neo-one-node-consensus/src/makePayload.ts index 5319f4ebe4..36f076261b 100644 --- a/packages/neo-one-node-consensus/src/makePayload.ts +++ b/packages/neo-one-node-consensus/src/makePayload.ts @@ -221,7 +221,7 @@ export const makePrepareRequest = async ({ } const timestamp = BN.max(new BN(Date.now()), previousHeader.timestamp.addn(1)); - context = context.clone({ blockOptions: { timestamp } }); + context = context.clone({ blockOptions: { timestamp, consensusData: { nonce: new BN(nonce) } } }); const preparationPayload = await makeSignedPayload({ node, diff --git a/packages/neo-one-node-core/src/ApplicationLog.ts b/packages/neo-one-node-core/src/ApplicationLog.ts index 28f605d335..898a4aaab1 100644 --- a/packages/neo-one-node-core/src/ApplicationLog.ts +++ b/packages/neo-one-node-core/src/ApplicationLog.ts @@ -11,6 +11,7 @@ import { 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'; @@ -20,7 +21,7 @@ export interface ApplicationLogAdd { readonly txid?: UInt256; readonly trigger: TriggerType; readonly vmState: VMState; - readonly gasConsumed: number; + readonly gasConsumed: BN; readonly stack: readonly StackItem[]; readonly notifications: readonly Notification[]; } @@ -42,7 +43,7 @@ export class ApplicationLog implements SerializableWire { public readonly txid?: UInt256; public readonly trigger: TriggerType; public readonly vmState: VMState; - public readonly gasConsumed: number; + public readonly gasConsumed: BN; public readonly stack: readonly StackItem[]; public readonly notifications: readonly Notification[]; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index af8b60baa5..94a1ab7f97 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -261,7 +261,7 @@ export abstract class BlockBase implements EquatableKey, SerializableContainer, return false; } - return verifyWitnesses(vm, this, storage, native, 1); + return verifyWitnesses(vm, this, storage, native, utils.ONE); } protected readonly sizeExclusive: () => number = () => 0; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index c2de0b15a6..01abe6edbd 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -1,4 +1,4 @@ -import { ECPoint, UInt256, VerifyResultModel } 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 { Block } from './Block'; @@ -52,12 +52,21 @@ export interface Blockchain extends BlockchainStorage { readonly getMaxBlockSize: () => Promise; readonly getMaxBlockSystemFee: () => Promise; readonly getMaxTransactionsPerBlock: () => Promise; + readonly getFeePerByte: () => Promise; readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; readonly invokeTransaction: ( transaction: TTransaction, - gas: number, + gas: BN, ) => 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; diff --git a/packages/neo-one-node-core/src/ConsensusData.ts b/packages/neo-one-node-core/src/ConsensusData.ts index 20a089fe68..0f04065c41 100644 --- a/packages/neo-one-node-core/src/ConsensusData.ts +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -17,8 +17,8 @@ export interface ConsensusDataAdd { export class ConsensusData implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusData { - const { reader } = options; - const primaryIndex = reader.readVarUIntLE(DEFAULT_VALIDATORS_COUNT.subn(1)).toNumber(); + const { reader, context } = options; + const primaryIndex = reader.readVarUIntLE(context.validatorsCount - 1).toNumber(); const nonce = reader.readUInt64LE(); return new this({ @@ -33,12 +33,12 @@ export class ConsensusData implements SerializableWire, SerializableJSON IOHelper.sizeOfVarUIntLE(this.primaryIndex) + IOHelper.sizeOfUInt64LE, ); - public readonly hashInternal = utils.lazy(() => crypto.hash256(this.serializeWire())); 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(); diff --git a/packages/neo-one-node-core/src/Native.ts b/packages/neo-one-node-core/src/Native.ts index 7d848b0c6c..c63820a9bd 100644 --- a/packages/neo-one-node-core/src/Native.ts +++ b/packages/neo-one-node-core/src/Native.ts @@ -27,7 +27,7 @@ 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 getFeePerByte: (storage: NativeContractStorageContext) => Promise; readonly getBlockedAccounts: (storage: NativeContractStorageContext) => Promise; } diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index f03eb86feb..a95fe78cd0 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -53,6 +53,7 @@ export const serializeScriptContainer = (item: SerializableContainer): Serialize export interface DeserializeWireContext { readonly messageMagic: number; + readonly validatorsCount: number; } export interface DeserializeWireBaseOptions { diff --git a/packages/neo-one-node-core/src/Signer.ts b/packages/neo-one-node-core/src/Signer.ts index ef770858cb..acc9951338 100644 --- a/packages/neo-one-node-core/src/Signer.ts +++ b/packages/neo-one-node-core/src/Signer.ts @@ -1,21 +1,16 @@ import { assertWitnessScope, + hasCustomContracts, + hasCustomGroups, InvalidFormatError, - IOHelper, JSONHelper, SignerJSON, SignerModel, - toJSONWitnessScope, + toWitnessScope, witnessScopeHasFlag, WitnessScopeModel, } from '@neo-one/client-common'; import { DeserializeWireBaseOptions, SerializableJSON } from './Serializable'; -import { utils } from './utils'; - -const hasCustomContracts = (scopes: WitnessScopeModel) => - witnessScopeHasFlag(scopes, WitnessScopeModel.CustomContracts); -const hasCustomGroups = (scopes: WitnessScopeModel) => witnessScopeHasFlag(scopes, WitnessScopeModel.CustomGroups); - export class Signer extends SignerModel implements SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Signer { const { reader } = options; @@ -35,32 +30,12 @@ export class Signer extends SignerModel implements SerializableJSON }); } - 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 get size() { - return this.sizeInternal(); - } - - 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, - }; + 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/TrimmedBlock.ts b/packages/neo-one-node-core/src/TrimmedBlock.ts index d6279d97d8..e5518dd75f 100644 --- a/packages/neo-one-node-core/src/TrimmedBlock.ts +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -33,7 +33,7 @@ export class TrimmedBlock extends BlockBase implements SerializableWire { options, ); - const hashes = reader.readArray(reader.readUInt256.bind(reader), Block.MaxContentsPerBlock); + const hashes = reader.readArray(() => reader.readUInt256(), Block.MaxContentsPerBlock); const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; return new TrimmedBlock({ diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts index fcea5a5ede..cf06cbba51 100644 --- a/packages/neo-one-node-core/src/Verifiable.ts +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -1,4 +1,5 @@ import { UInt160 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { NativeContainer } from './Native'; import { SerializableContainer } from './Serializable'; import { BlockchainStorage } from './Storage'; @@ -14,7 +15,7 @@ export interface Verifiable { } export interface ExecuteScriptResult { - readonly gas: number; + readonly gas: BN; readonly result: boolean; } @@ -23,7 +24,7 @@ export type VerifyWitnesses = ( verifiable: SerializableContainer, storage: BlockchainStorage, native: NativeContainer, - gasIn: number, + gasIn: BN, ) => Promise; export interface VerifyOptions { diff --git a/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts index a7b8e5a3c1..8b5cd9186c 100644 --- a/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts +++ b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts @@ -1,4 +1,5 @@ import { + AccountContract, common, ContractParameterTypeModel, crypto, @@ -8,7 +9,6 @@ import { WitnessScopeModel, } from '@neo-one/client-common'; import { BN } from 'bn.js'; -import { Contract } from '../Contract'; import { ContractParametersContext } from '../ContractParametersContext'; import { Signer } from '../Signer'; import { Transaction } from '../transaction'; @@ -32,22 +32,24 @@ const getTransaction = (sender: UInt160) => ], networkFee: new BN(0), systemFee: new BN(0), + validUntilBlock: 2000, + messageMagic: 73450591, }); describe('ContractParametersContext Test', () => { let privateKey: PrivateKey; let publicKey: ECPoint; - let contract: Contract; + 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 = Contract.createSignatureContract(publicKey); + contract = AccountContract.createSignatureContract(publicKey); }); test('addWithIndex', () => { const context = new ContractParametersContext([common.ZERO_UINT160]); - const testContract = new Contract({ + const testContract = new AccountContract({ script: Buffer.from([0x00]), parameterList: [0x10], scriptHash: common.ZERO_UINT160, @@ -64,7 +66,7 @@ describe('ContractParametersContext Test', () => { test('add', () => { const context = new ContractParametersContext([common.ZERO_UINT160]); - const testContract = new Contract({ + const testContract = new AccountContract({ script: Buffer.from([0x00]), parameterList: [0x10], scriptHash: common.ZERO_UINT160, diff --git a/packages/neo-one-node-core/src/consensus/BlockBuilder.ts b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts index 88834cafa6..a8bca3a913 100644 --- a/packages/neo-one-node-core/src/consensus/BlockBuilder.ts +++ b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts @@ -20,6 +20,7 @@ export class BlockBuilder { public readonly nextConsensus?: UInt160; public readonly witness?: Witness; public readonly hash?: UInt256; + public readonly messageMagic?: number; public constructor(options: BlockPartial) { this.merkleRoot = options.merkleRoot; @@ -32,6 +33,7 @@ export class BlockBuilder { this.nextConsensus = options.nextConsensus; this.witness = options.witness; this.hash = options.hash; + this.messageMagic = options.messageMagic; } public clone({ @@ -48,7 +50,13 @@ export class BlockBuilder { }: BlockPartial) { return new BlockBuilder({ merkleRoot: merkleRoot ?? this.merkleRoot, - consensusData: consensusData ?? this.consensusData, + 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, @@ -73,17 +81,17 @@ export class BlockBuilder { } public getBlock() { + const consensusData = this.getConsensusData(); const options = { - merkleRoot: this.merkleRoot, - consensusData: this.getConsensusData(), - transactions: this.transactions, + consensusData, + transactions: this.transactions ?? [], version: this.version, previousHash: this.previousHash, timestamp: this.timestamp, index: this.index, nextConsensus: this.nextConsensus, witness: this.witness, - hash: this.hash, + messageMagic: this.messageMagic, }; // TODO: we could assert all these options but we'd throw anyway, maybe clean up. diff --git a/packages/neo-one-node-core/src/consensus/ConsensusContext.ts b/packages/neo-one-node-core/src/consensus/ConsensusContext.ts index 1bd07d7d18..cc805e1aa8 100644 --- a/packages/neo-one-node-core/src/consensus/ConsensusContext.ts +++ b/packages/neo-one-node-core/src/consensus/ConsensusContext.ts @@ -167,33 +167,37 @@ export class ConsensusContext { return this.viewChanging && !this.moreThanFNodesCommittedOrLost; } - public clone({ - viewNumber, - myIndex, - validators, - blockReceivedTimeMS, - verificationContext, - blockOptions, - preparationPayloads, - commitPayloads, - changeViewPayloads, - lastChangeViewPayloads, - transactions, - transactionHashes, - }: Partial) { + 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: viewNumber ?? this.viewNumber, - myIndex: myIndex ?? this.myIndex, - validators: validators ?? this.validators, - blockReceivedTimeMS: blockReceivedTimeMS ?? this.blockReceivedTimeMS, - verificationContext: verificationContext ?? this.verificationContext, - blockOptions: blockOptions === undefined ? this.blockBuilder : this.blockBuilder.clone(blockOptions), - preparationPayloads: preparationPayloads ?? this.preparationPayloads, - commitPayloads: commitPayloads ?? this.commitPayloads, - changeViewPayloads: changeViewPayloads ?? this.changeViewPayloads, - lastChangeViewPayloads: lastChangeViewPayloads ?? this.lastChangeViewPayloads, - transactions: transactions ?? this.transactions, - transactionHashes: transactionHashes ?? this.transactionHashes, + 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, }); } diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index a05d964d6b..33973b27d8 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -7,7 +7,6 @@ export * from './ContractParametersContext'; export * from './manifest'; export * from './ContractIDState'; export * from './ContractState'; -export * from './Contract'; export * from './constants'; export * from './crypto'; export * from './Equatable'; diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index 3d7c5c8df4..9cf52cce44 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -1,4 +1,5 @@ import { + AccountContract, BinaryWriter, createSerializeWire, crypto, @@ -7,7 +8,6 @@ import { InvalidFormatError, PrivateKey, } from '@neo-one/client-common'; -import { Contract } from '../Contract'; import { ContractParametersContext } from '../ContractParametersContext'; import { NativeContainer } from '../Native'; import { @@ -41,7 +41,7 @@ export class ConsensusPayload extends UnsignedConsensusPayload { const context = new ContractParametersContext(payload.getScriptHashesForVerifying(validators)); const hashData = getHashData(payload.serializeWire(), messageMagic); const publicKey = crypto.privateKeyToPublicKey(privateKey); - const signatureContract = Contract.createSignatureContract(publicKey); + const signatureContract = AccountContract.createSignatureContract(publicKey); const signature = crypto.sign({ message: hashData, privateKey }); context.addSignature(signatureContract, publicKey, signature); @@ -55,15 +55,15 @@ export class ConsensusPayload extends UnsignedConsensusPayload { messageMagic, }); } - public static deserializeWireBase(options: DeserializeWireBaseOptions, validatorsCount = 7): ConsensusPayload { - const { reader } = options; + public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusPayload { + const { reader, context } = options; const { version, previousHash, blockIndex, validatorIndex, data, - } = super.deserializeUnsignedConsensusPayloadWireBase(options, validatorsCount); + } = super.deserializeUnsignedConsensusPayloadWireBase(options, context.validatorsCount); const count = reader.readInt8(); if (count !== 1) { throw new InvalidFormatError(`expected exactly 1 witness`); diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index ea8fe39455..cb46f4499e 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -43,16 +43,6 @@ export interface VerboseData { export class Transaction extends TransactionModel implements SerializableContainer, Verifiable { - public static readonly headerSize = - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt32LE; - - public get size() { - return this.sizeInternal(); - } public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { const { version, @@ -170,6 +160,10 @@ export class Transaction return attribute; }); } + public get size() { + return this.sizeInternal(); + } + public readonly type: SerializableContainerType = 'Transaction'; private readonly sizeInternal = utils.lazy( () => @@ -180,10 +174,6 @@ export class Transaction IOHelper.sizeOfArray(this.witnesses, (witness) => witness.size), ); - public getScriptHashesForVerifying(): readonly UInt160[] { - return this.signers.map((signer) => signer.account); - } - public async verifyForEachBlock( verifyOptions: VerifyOptions, transactionContext?: TransactionVerificationContext, @@ -253,12 +243,12 @@ export class Transaction return VerifyResultModel.Invalid; } const feePerByte = await native.Policy.getFeePerByte(storage); - const netFee = this.networkFee.subn(this.size * feePerByte); + const netFee = this.networkFee.sub(feePerByte.muln(this.size)); if (netFee.ltn(0)) { return VerifyResultModel.InsufficientFunds; } - const witnessVerify = await verifyWitnesses(vm, this, storage, native, common.fixed8ToDecimal(netFee).toNumber()); + const witnessVerify = await verifyWitnesses(vm, this, storage, native, netFee); if (!witnessVerify) { return VerifyResultModel.Invalid; } diff --git a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts index 00dbd0db33..cc5ccddb5d 100644 --- a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts +++ b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts @@ -21,9 +21,6 @@ export const createDeserializeAttributeType = (type: AttributeTypeModel) => (opt }; export abstract class AttributeBase extends AttributeBaseModel implements SerializableJSON { - public get size() { - return IOHelper.sizeOfUInt8 + this.sizeExclusive(); - } public serializeJSON(): AttributeJSON { return { type: toJSONAttributeType(this.type), @@ -34,8 +31,4 @@ export abstract class AttributeBase extends AttributeBaseModel implements Serial public async verify(_verifyOptions: VerifyOptions, _tx: Transaction) { return Promise.resolve(true); } - - protected sizeExclusive(): number { - return 0; - } } diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index c0afe588b4..2eb91a39db 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,4 +1,5 @@ import { TriggerType, UInt256, VMState } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; import { Notification } from './Notification'; @@ -8,7 +9,7 @@ import { Transaction } from './transaction'; export interface CallReceipt { readonly state: VMState; - readonly gasConsumed: number; + readonly gasConsumed: BN; readonly stack: readonly StackItem[]; readonly notifications: readonly Notification[]; } @@ -19,7 +20,7 @@ export interface ApplicationEngineOptions { readonly trigger: TriggerType; readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; - readonly gas: number; + readonly gas: BN; readonly testMode: boolean; } @@ -30,12 +31,12 @@ export interface RunEngineOptions { readonly persistingBlock?: Block; readonly offset?: number; readonly testMode?: boolean; - readonly gas?: number; + readonly gas?: BN; } export interface ApplicationEngine { readonly trigger: TriggerType; - readonly gasConsumed: number; + readonly gasConsumed: BN; readonly resultStack: readonly StackItem[]; readonly state: VMState; readonly notifications: readonly StackItem[]; @@ -65,7 +66,7 @@ export interface ApplicationExecuted { readonly transaction?: Transaction; readonly trigger: TriggerType; readonly state: VMState; - readonly gasConsumed: number; + readonly gasConsumed: BN; readonly stack: readonly StackItem[]; readonly notifications: readonly Notification[]; } diff --git a/packages/neo-one-node-native/src/Policy.ts b/packages/neo-one-node-native/src/Policy.ts index 0fc8198cae..9951682782 100644 --- a/packages/neo-one-node-native/src/Policy.ts +++ b/packages/neo-one-node-native/src/Policy.ts @@ -51,10 +51,10 @@ export class PolicyContract extends NativeContract { public async getFeePerByte({ storages }: NativeContractStorageContext) { const item = await storages.tryGet(this.createStorageKey(this.prefixes.feePerByte).toStorageKey()); if (item === undefined) { - return 1000; + return new BN(1000); } - return new BN(item.value).toNumber(); + return new BN(item.value); } public async getBlockedAccounts({ storages }: NativeContractStorageContext): Promise { diff --git a/packages/neo-one-node-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 45f655e6de..2a9aca577f 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -13,6 +13,7 @@ export const MAX_TRANSACTION_PER_BLOCK = 500; interface Options { readonly privateNet?: boolean; readonly consensusAddress: UInt160; + readonly messageMagic: number; } // const ONE_HUNDRED_MILLION = clientCommon.fixed8FromDecimal(100000000); @@ -65,7 +66,7 @@ const getDeployWitness = () => verification: Buffer.from([Op.PUSH1]), }); -const getDeployNativeContracts = () => { +const getDeployNativeContracts = (messageMagic: number) => { const scriptBuilder = new ScriptBuilder(); scriptBuilder.emitSysCall('Neo.Native.Deploy'); const script = scriptBuilder.build(); @@ -83,15 +84,18 @@ const getDeployNativeContracts = () => { ], attributes: [], witnesses: [getDeployWitness()], + validUntilBlock: 0, + messageMagic, }); }; interface GetGenesisBlockOptions { readonly consensusAddress: UInt160; + readonly messageMagic: number; readonly privateNet?: boolean; } -const getGenesisBlock = ({ consensusAddress, privateNet }: GetGenesisBlockOptions) => +const getGenesisBlock = ({ consensusAddress, messageMagic }: GetGenesisBlockOptions) => new Block({ previousHash: clientCommon.ZERO_UINT256, timestamp: new BN(Date.UTC(2016, 6, 15, 15, 8, 21)), @@ -102,13 +106,15 @@ const getGenesisBlock = ({ consensusAddress, privateNet }: GetGenesisBlockOption primaryIndex: 0, nonce: new BN(2083236893), }), - transactions: [getDeployNativeContracts()], + transactions: [getDeployNativeContracts(messageMagic)], + messageMagic, }); -export const common = ({ privateNet, consensusAddress }: Options) => ({ +export const common = ({ privateNet, consensusAddress, messageMagic }: Options) => ({ genesisBlock: getGenesisBlock({ consensusAddress, privateNet, + messageMagic, }), decrementInterval: DECREMENT_INTERVAL, generationAmount: privateNet ? GENERATION_AMOUNT_PRIVATE : GENERATION_AMOUNT, diff --git a/packages/neo-one-node-neo-settings/src/createMain.ts b/packages/neo-one-node-neo-settings/src/createMain.ts index 614b8a0ad3..f868be36f5 100644 --- a/packages/neo-one-node-neo-settings/src/createMain.ts +++ b/packages/neo-one-node-neo-settings/src/createMain.ts @@ -2,6 +2,8 @@ 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', @@ -49,6 +51,7 @@ export const createMain = ({ const commonSettings = common({ privateNet, consensusAddress, + messageMagic: mainNetMessageMagic, }); return { @@ -57,29 +60,13 @@ export const createMain = ({ generationAmount: commonSettings.generationAmount, millisecondsPerBlock: millisecondsPerBlock === undefined ? commonSettings.millisecondsPerBlock : millisecondsPerBlock, - // maxTransactionsPerBlock: commonSettings.maxTransactionsPerBlock, standbyCommittee, committeeMembersCount: standbyCommittee.length, memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, validatorsCount: standbyValidators.length, - // 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: 5195086, + 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 74abc883f0..b070a16931 100644 --- a/packages/neo-one-node-neo-settings/src/createTest.ts +++ b/packages/neo-one-node-neo-settings/src/createTest.ts @@ -2,6 +2,8 @@ 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[] = [ '023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d', '03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2', @@ -32,6 +34,7 @@ export const createTest = ({ const commonSettings = common({ privateNet, consensusAddress, + messageMagic: testNetMessageMagic, }); return { @@ -44,7 +47,7 @@ export const createTest = ({ committeeMembersCount: standbyCommittee.length, memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, validatorsCount: standbyValidators.length, - messageMagic: 1951352142, + messageMagic: testNetMessageMagic, addressVersion: clientCommon.NEO_ADDRESS_VERSION, privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, standbyValidators, 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 14309d498c..b09b4155f1 100644 --- a/packages/neo-one-node-neo-settings/src/serde.ts +++ b/packages/neo-one-node-neo-settings/src/serde.ts @@ -21,18 +21,13 @@ export const serializeSettings = (settings: Settings) => { genesisBlock: genesisBlock.serializeWire().toString('hex'), decrementInterval, generationAmount, - // fees: _.fromPairs( - // Object.entries(fees).map(([key, fee]) => [key, fee === undefined ? JSON.stringify(undefined) : fee.toString(10)]), - // ), privateKeyVersion, standbyValidators: standbyValidators.map((validator) => common.ecPointToString(validator)), standbyCommittee: standbyCommittee.map((validator) => common.ecPointToString(validator)), committeeMembersCount, validatorsCount, - // registerValidatorFee: registerValidatorFee.toString(10), messageMagic, addressVersion, - // vm, millisecondsPerBlock, memoryPoolMaxTransactions, }; @@ -55,16 +50,12 @@ export const deserializeSettings = (settings: any): Settings => { memoryPoolMaxTransactions, } = settings; - const context = { messageMagic }; + const context = { messageMagic, validatorsCount }; return { genesisBlock: Block.deserializeWire({ context, buffer: Buffer.from(genesisBlock, 'hex') }), 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, @@ -72,7 +63,6 @@ export const deserializeSettings = (settings: any): Settings => { standbyCommittee: standbyCommittee.map((validator: string) => common.stringToECPoint(validator)), committeeMembersCount, validatorsCount, - // vm, millisecondsPerBlock, memoryPoolMaxTransactions, }; diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index a2de014697..43d5f16961 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -896,6 +896,7 @@ export class Node implements INode { 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 }); diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 0ecf9ce92d..4856f66009 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -9,6 +9,7 @@ import { toVMStateJSON, TransactionJSON, TransactionReceiptJSON, + utils as commonUtils, VerboseTransactionJSON, VerifyResultModel, } from '@neo-one/client-common'; @@ -16,11 +17,13 @@ import { createChild, nodeLogger } from '@neo-one/logger'; import { Block, Blockchain, + CallReceipt, getEndpointConfig, NativeContainer, Nep5Transfer, Nep5TransferKey, Node, + Signer, Signers, StackItem, stackItemToJSON, @@ -92,6 +95,7 @@ const RPC_METHODS: { readonly [key: string]: string } = { invokefunction: 'invokefunction', invokescript: 'invokescript', getunclaimedgas: 'getunclaimedgas', + testtransaction: 'testtransaction', // Utilities listplugins: 'listplugins', @@ -120,6 +124,8 @@ const RPC_METHODS: { readonly [key: string]: string } = { getsettings: 'getsettings', // NEO•ONE + getfeeperbyte: 'getfeeperbyte', + getverificationcost: 'getverificationcost', relaytransaction: 'relaytransaction', getallstorage: 'getallstorage', gettransactionreceipt: 'gettransactionreceipt', @@ -295,26 +301,25 @@ export const createHandler = ({ } }; - const getInvokeResult = (script: Buffer, signers?: Signers): CallReceiptJSON => { - const result = blockchain.invokeScript(script, signers); + const getInvokeResult = (script: Buffer, receipt: CallReceipt): CallReceiptJSON => { + const { stack: stackIn, state, notifications, gasConsumed } = receipt; try { - const stack = result.stack.map((item: StackItem) => stackItemToJSON(item, undefined)); - + const stack = stackIn.map((item: StackItem) => stackItemToJSON(item, undefined)); return { script: script.toString('hex'), - state: toVMStateJSON(result.state), + state: toVMStateJSON(state), stack, - gasconsumed: common.fixed8FromDecimal(result.gasConsumed.toString()).toString(), - notifications: result.notifications.map((n) => n.serializeJSON()), + gasconsumed: gasConsumed.toString(), + notifications: notifications.map((n) => n.serializeJSON()), }; } catch { return { script: script.toString('hex'), - state: toVMStateJSON(result.state), + state: toVMStateJSON(state), stack: 'error: recursive reference', - gasconsumed: common.fixed8FromDecimal(result.gasConsumed.toString()).toString(), - notifications: result.notifications.map((n) => n.serializeJSON()), + gasconsumed: gasConsumed.toString(), + notifications: notifications.map((n) => n.serializeJSON()), }; } }; @@ -546,8 +551,19 @@ export const createHandler = ({ [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(script, signers); + return getInvokeResult(transaction.script, result); }, [RPC_METHODS.getunclaimedgas]: async (args) => { const address = args[0]; @@ -864,6 +880,20 @@ export const createHandler = ({ 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(); diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index 73e914b6d2..48fa3755a1 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,3 +1,4 @@ +import { common } from '@neo-one/client-common'; import { ApplicationLog, BinaryReader, diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 2b3bfa09bc..dac056a8b1 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -186,9 +186,9 @@ private dynamic _getContainer() return this.engine.ScriptContainer; } - private long _getGasConsumed() + private string _getGasConsumed() { - return this.engine != null ? this.engine.GasConsumed : 0; + return this.engine != null ? this.engine.GasConsumed.ToString() : "0"; } private dynamic[] _getNotifications() diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 3dc3d50aa2..8fe0efb52c 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -1,6 +1,7 @@ using System; using System.IO; using Neo; +using Neo.IO; using Neo.Ledger; using Neo.Network.P2P.Payloads; using Neo.Persistence; @@ -44,6 +45,8 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) block.Deserialize(reader); } + var tmp = block.Hash.ToString(); + return this._snapshotBlocksAdd(this.selectSnapshot(args.snapshot), blockHash, block); case SnapshotMethod.snapshot_transactions_add: diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index f1e7982d1d..bbd9513fff 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -124,7 +124,7 @@ private bool _dispose() private dynamic _test() { - return this._getConfig(); + return ApplicationEngine.Neo_Crypto_CheckMultisigWithECDsaSecp256r1.Hash.ToString(); } private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index d81a27334a..284ce6f2db 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -14,7 +14,7 @@ - --> + diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index d2eb50f1fb..fad29e8cd7 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,4 +1,4 @@ -import { common, TriggerType, VMState } from '@neo-one/client-common'; +import { TriggerType, VMState } from '@neo-one/client-common'; import { CallFlags, SerializableContainer, serializeScriptContainer, SnapshotName } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; @@ -10,7 +10,7 @@ export interface CreateOptions { readonly trigger: TriggerType; readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; - readonly gas: number; + readonly gas: BN; readonly testMode: boolean; } @@ -34,15 +34,15 @@ export class ApplicationEngine { } public get gasConsumed() { - return common - .fixed8ToDecimal( - new BN( - this.dispatch({ - method: 'getgasconsumed', - }), - ), - ) - .toNumber(); + try { + return new BN( + this.dispatch({ + method: 'getgasconsumed', + }), + ); + } catch { + return new BN(-1); + } } public get state() { @@ -77,7 +77,7 @@ export class ApplicationEngine { args: { trigger, container: container ? serializeScriptContainer(container) : undefined, - gas: common.fixed8FromDecimal(gas.toString()).toString(), + gas: gas.toString(), snapshot, testMode, }, diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index 993888df5e..e426b3b672 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -1,7 +1,7 @@ -import { ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; +import { common, ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; -import { blockchainSettingsToProtocolSettings } from '../utils'; describe('Dispatcher Tests', () => { const dispatcher = new Dispatcher(); @@ -10,30 +10,36 @@ describe('Dispatcher Tests', () => { }); test('withApplicationEngine -- NOP Script', () => { - const state = dispatcher.withApplicationEngine( + const result = dispatcher.withApplicationEngine( { trigger: TriggerType.Application, testMode: true, - gas: 0, + gas: common.ONE_HUNDRED_FIXED8, }, (engine) => { expect(engine.state).toEqual(VMState.BREAK); const script = new ScriptBuilder(); - script.emitOp('NOP'); + script.emitOp('PUSHNULL'); engine.loadScript(script.build()); - return engine.execute(); + engine.execute(); + + return { + gasconsumed: engine.gasConsumed, + state: engine.state, + stack: engine.resultStack, + }; }, ); - expect(state).toEqual(VMState.HALT); + 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(0); + expect(postEngine.gasConsumed).toEqual(new BN(0)); expect(postEngine.state).toEqual(VMState.BREAK); expect(() => postEngine.execute()).toThrow(); }); @@ -96,4 +102,8 @@ describe('Dispatcher Tests', () => { test('Dispatcher returns config without initializing config', () => { expect(dispatcher.getConfig()).toBeDefined(); }); + + test.only('test command', () => { + console.log(dispatcher.test()); + }); }); diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index b35cd832c2..f48a270745 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,6 +1,6 @@ import { common, crypto, JSONHelper } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { Nep5BalanceKey, StorageKey, StreamOptions, utils } from '@neo-one/node-core'; +import { Nep5BalanceKey, StorageKey, StreamOptions, TrimmedBlock, utils } from '@neo-one/node-core'; import { KeyBuilder, NativeContainer, NEOAccountState } 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'; @@ -16,7 +16,13 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re new Promise((resolve, reject) => { db.createReadStream(options) .on('data', (data: any) => { - console.log(data.key.toString('hex')); + console.log(data.key); + console.log( + TrimmedBlock.deserializeWire({ + context: { messageMagic: 7630401, validatorsCount: 1 }, + buffer: data.value, + }).serializeJSON({ addressVersion: common.NEO_ADDRESS_VERSION }), + ); }) .on('error', reject) .on('close', resolve) @@ -24,20 +30,22 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re }); describe('Blockchain storage works', () => { - test('Blockchain can persist and retrieve blocks', async () => { + test.only('Blockchain can persist and retrieve blocks', async () => { // const blockchainSettings = createTest(); const levelDBPath = '/Users/danielbyrne/Desktop/consensus-node-data'; const db = LevelUp(RocksDB(levelDBPath)); const storage = levelupStorage({ db, - context: { messageMagic: 7630401 }, + context: { messageMagic: 7630401, validatorsCount: 1 }, }); - const allStorage = await storage.nep5Balances.all$.pipe(toArray()).toPromise(); - console.log(allStorage); + await rawReadStreamPromise(db, { gte: Buffer.from([0x01]), lte: Buffer.from([0x02]) }); - await rawReadStreamPromise(db, { gte: Buffer.from([0x00]), lte: Buffer.from([0xff]) }); + // const blocks = await storage.blocks.all$.pipe(toArray()).toPromise(); + + // blocks.forEach((block) => console.log(block.hashHex)); + // await rawReadStreamPromise(db, { gte: Buffer.from([0x00]), lte: Buffer.from([0xff]) }); // const dispatcher = new Dispatcher({ // levelDBPath, // protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), @@ -61,7 +69,7 @@ describe('Blockchain storage works', () => { // const lte = Buffer.concat([scriptHash, new BN(Date.now(), 'le').toBuffer()]); }); - test.only('', () => { + test('', () => { const validators = [ '023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d', '03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2', @@ -80,7 +88,7 @@ describe('Blockchain storage works', () => { ); console.log(common.uInt160ToHex(testHash)); console.log(common.uInt160ToHex(anotherHash)); - console.log(crypto.scriptHashToAddress({ addressVersion: 23, scriptHash: testHash })); - console.log(crypto.scriptHashToAddress({ addressVersion: 23, scriptHash: anotherHash })); + console.log(crypto.scriptHashToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, scriptHash: testHash })); + console.log(crypto.scriptHashToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, scriptHash: anotherHash })); }); }); diff --git a/packages/neo-one-node/src/__tests__/consensus.test.ts b/packages/neo-one-node/src/__tests__/consensus.test.ts index 96f3dc8870..3b45b2a4b0 100644 --- a/packages/neo-one-node/src/__tests__/consensus.test.ts +++ b/packages/neo-one-node/src/__tests__/consensus.test.ts @@ -1,4 +1,4 @@ -import { common, crypto } from '@neo-one/client-common'; +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'; @@ -19,7 +19,7 @@ const config = { }, blockchain: { genesisBlock: Block.deserializeWire({ - context: { messageMagic: 7630401 }, + context: { messageMagic: 7630401, validatorsCount: 1 }, buffer: Buffer.from( '000000000000000000000000000000000000000000000000000000000000000000000000a2f039e5cb15af6ab9eecfcb383ddac95c9ddc7f5c09d96c88dd26003a793a81759cf1e17501000000000000d83cd15a5036b5399bb7e6b91db9365a77ddb2510100011102001dac2b7c000000000000000000000000000000000000000000000000000000000001ca61e52e881d41374e640f819cd118cc153b21a700000541123e7fe801000111', 'hex', @@ -28,7 +28,7 @@ const config = { decrementInterval: 2000000, generationAmount: [8, 7, 6], messageMagic: 7630401, - addressVersion: 23, + addressVersion: common.NEO_ADDRESS_VERSION, privateKeyVersion: 128, standbyValidators: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => common.stringToECPoint(p), diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index e67baae043..768578f212 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -74,7 +74,7 @@ export const startFullNode = async ({ const storage = levelupStorage({ db: LevelUp(rocks), - context: { messageMagic: blockchainSettings.messageMagic }, + context: { messageMagic: blockchainSettings.messageMagic, validatorsCount: blockchainSettings.validatorsCount }, }); disposable = composeDisposable(async () => storage.close(), disposable); From 5c16eeafd8d9633a298d72c812485926155bfb32 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 8 Dec 2020 11:34:53 -0800 Subject: [PATCH 132/141] feat(cli): fixup cli start network command (#2241) --- .../@neo-one/cli/fixup-cli_2020-12-08-19-02.json | 11 +++++++++++ .../client-core/fixup-cli_2020-12-08-19-02.json | 11 +++++++++++ packages/neo-one-cli/src/cmd/start/index.ts | 3 ++- packages/neo-one-cli/src/cmd/start/network.ts | 2 +- packages/neo-one-cli/src/cmd/stop/index.ts | 3 ++- .../__tests__/user/LocalUserAccountProvider.test.ts | 2 +- 6 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 common/changes/@neo-one/cli/fixup-cli_2020-12-08-19-02.json create mode 100644 common/changes/@neo-one/client-core/fixup-cli_2020-12-08-19-02.json 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..5c571c74d7 --- /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": "minor" + } + ], + "packageName": "@neo-one/cli", + "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/packages/neo-one-cli/src/cmd/start/index.ts b/packages/neo-one-cli/src/cmd/start/index.ts index 041c4ef2ed..293bc3a217 100644 --- a/packages/neo-one-cli/src/cmd/start/index.ts +++ b/packages/neo-one-cli/src/cmd/start/index.ts @@ -4,4 +4,5 @@ import * as network from './network'; export const command = 'start'; export const describe = 'Starts NEO•ONE services.'; -export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); +// 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/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 75efc7a4d9..48b344200c 100644 --- a/packages/neo-one-cli/src/cmd/stop/index.ts +++ b/packages/neo-one-cli/src/cmd/stop/index.ts @@ -4,4 +4,5 @@ import * as network from './network'; export const command = 'stop'; export const describe = 'Stops NEO•ONE services.'; -export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); +// TODO: neotracker command added back +export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network); /*.command(neotracker)*/ 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 index 42093ec2cf..abf8b8e04e 100644 --- a/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -14,7 +14,7 @@ describe.skip('Test LocalUserAccountProvider transfer methods -- local network', ), }, network: { - rpcURL: 'http://localhost:8081/rpc', + rpcURL: 'http://localhost:9040/rpc', name: 'local', }, }; From ff1ea0aa52c5a7b83ba6450893b0ef3a7b0ebaba Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 8 Dec 2020 12:55:29 -0800 Subject: [PATCH 133/141] release(3.0.1): changelog (#2243) --- .../3.0.1-changelog_2020-12-08-19-30.json | 11 ++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../cli/elliptic_2020-08-03-18-22.json | 11 ---- .../cli/fixup-cli_2020-12-08-19-02.json | 2 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 6 +- .../elliptic_2020-08-03-18-22.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 6 +- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../3.0.0preview3.1_2020-10-20-22-57.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../3.0.1-changelog_2020-12-08-19-30.json | 11 ++++ .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 6 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 6 +- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../fix-web_2020-07-27-19-51.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 4 +- .../node/fix-web_2020-07-27-19-51.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../3.0.0preview3-alpha_2020-10-19-23-46.json | 11 ---- .../fix-web_2020-07-27-19-51.json | 11 ---- ... => 3.0.1-changelog_2020-12-08-19-30.json} | 6 +- .../neo-one-cli-common-node/CHANGELOG.json | 18 +++++ packages/neo-one-cli-common-node/CHANGELOG.md | 7 +- packages/neo-one-cli-common-node/package.json | 8 +-- packages/neo-one-cli-common/CHANGELOG.json | 26 ++++++++ packages/neo-one-cli-common/CHANGELOG.md | 9 ++- packages/neo-one-cli-common/package.json | 10 +-- packages/neo-one-cli/CHANGELOG.json | 65 +++++++++++++++++++ packages/neo-one-cli/CHANGELOG.md | 9 ++- packages/neo-one-cli/package.json | 36 +++++----- packages/neo-one-client-common/CHANGELOG.json | 25 +++++++ packages/neo-one-client-common/CHANGELOG.md | 14 +++- packages/neo-one-client-common/package.json | 4 +- packages/neo-one-client-core/CHANGELOG.json | 28 ++++++++ packages/neo-one-client-core/CHANGELOG.md | 13 +++- packages/neo-one-client-core/package.json | 8 +-- .../neo-one-client-full-common/CHANGELOG.json | 20 ++++++ .../neo-one-client-full-common/CHANGELOG.md | 9 ++- .../neo-one-client-full-common/package.json | 6 +- .../neo-one-client-full-core/CHANGELOG.json | 37 +++++++++++ .../neo-one-client-full-core/CHANGELOG.md | 13 +++- .../neo-one-client-full-core/package.json | 14 ++-- packages/neo-one-client-full/CHANGELOG.json | 15 +++++ packages/neo-one-client-full/CHANGELOG.md | 7 +- packages/neo-one-client-full/package.json | 6 +- packages/neo-one-client-switch/CHANGELOG.json | 23 +++++++ packages/neo-one-client-switch/CHANGELOG.md | 9 ++- packages/neo-one-client-switch/package.json | 8 +-- packages/neo-one-client/CHANGELOG.json | 20 ++++++ packages/neo-one-client/CHANGELOG.md | 9 ++- packages/neo-one-client/package.json | 6 +- .../package.json | 8 +-- .../neo-one-developer-tools/CHANGELOG.json | 17 +++++ packages/neo-one-developer-tools/CHANGELOG.md | 9 ++- packages/neo-one-developer-tools/package.json | 4 +- packages/neo-one-editor-server/package.json | 4 +- packages/neo-one-editor/package.json | 10 +-- packages/neo-one-http-context/CHANGELOG.json | 15 +++++ packages/neo-one-http-context/CHANGELOG.md | 7 +- packages/neo-one-http-context/package.json | 6 +- packages/neo-one-local-browser/package.json | 12 ++-- packages/neo-one-node-bin/CHANGELOG.json | 32 +++++++++ packages/neo-one-node-bin/CHANGELOG.md | 9 ++- packages/neo-one-node-bin/package.json | 14 ++-- .../neo-one-node-blockchain/CHANGELOG.json | 32 +++++++++ packages/neo-one-node-blockchain/CHANGELOG.md | 9 ++- packages/neo-one-node-blockchain/package.json | 14 ++-- packages/neo-one-node-browser/package.json | 20 +++--- .../neo-one-node-consensus/CHANGELOG.json | 18 +++++ packages/neo-one-node-consensus/CHANGELOG.md | 7 +- packages/neo-one-node-consensus/package.json | 8 +-- packages/neo-one-node-core/CHANGELOG.json | 28 ++++++++ packages/neo-one-node-core/CHANGELOG.md | 13 +++- packages/neo-one-node-core/package.json | 8 +-- packages/neo-one-node-http-rpc/CHANGELOG.json | 32 +++++++++ packages/neo-one-node-http-rpc/CHANGELOG.md | 9 ++- packages/neo-one-node-http-rpc/package.json | 14 ++-- packages/neo-one-node-native/CHANGELOG.json | 31 +++++++++ packages/neo-one-node-native/CHANGELOG.md | 11 ++++ packages/neo-one-node-native/package.json | 10 +-- .../neo-one-node-neo-settings/CHANGELOG.json | 23 +++++++ .../neo-one-node-neo-settings/CHANGELOG.md | 9 ++- .../neo-one-node-neo-settings/package.json | 8 +-- packages/neo-one-node-network/CHANGELOG.json | 23 +++++++ packages/neo-one-node-network/CHANGELOG.md | 9 ++- packages/neo-one-node-network/package.json | 8 +-- packages/neo-one-node-offline/CHANGELOG.json | 20 ++++++ packages/neo-one-node-offline/CHANGELOG.md | 9 ++- packages/neo-one-node-offline/package.json | 6 +- packages/neo-one-node-protocol/CHANGELOG.json | 29 +++++++++ packages/neo-one-node-protocol/CHANGELOG.md | 9 ++- packages/neo-one-node-protocol/package.json | 12 ++-- .../neo-one-node-rpc-handler/CHANGELOG.json | 31 +++++++++ .../neo-one-node-rpc-handler/CHANGELOG.md | 13 +++- .../neo-one-node-rpc-handler/package.json | 10 +-- .../neo-one-node-storage-cache/CHANGELOG.json | 26 ++++++++ .../neo-one-node-storage-cache/CHANGELOG.md | 9 ++- .../neo-one-node-storage-cache/package.json | 10 +-- .../CHANGELOG.json | 23 +++++++ .../neo-one-node-storage-common/CHANGELOG.md | 9 ++- .../neo-one-node-storage-common/package.json | 8 +-- .../CHANGELOG.json | 31 +++++++++ .../neo-one-node-storage-levelup/CHANGELOG.md | 13 +++- .../neo-one-node-storage-levelup/package.json | 10 +-- packages/neo-one-node-tools/package.json | 2 +- packages/neo-one-node-vm/CHANGELOG.json | 23 +++++++ packages/neo-one-node-vm/CHANGELOG.md | 9 ++- packages/neo-one-node-vm/package.json | 8 +-- packages/neo-one-node/CHANGELOG.json | 58 +++++++++++++++++ packages/neo-one-node/CHANGELOG.md | 13 +++- packages/neo-one-node/package.json | 28 ++++---- packages/neo-one-react-common/CHANGELOG.json | 12 ++++ packages/neo-one-react-common/CHANGELOG.md | 9 ++- packages/neo-one-react-common/package.json | 2 +- .../CHANGELOG.json | 21 ++++++ .../CHANGELOG.md | 7 +- .../package.json | 10 +-- .../CHANGELOG.json | 15 +++++ .../CHANGELOG.md | 7 +- .../package.json | 6 +- .../CHANGELOG.json | 55 ++++++++++++++++ .../CHANGELOG.md | 13 +++- .../package.json | 26 ++++---- .../neo-one-smart-contract-lib/CHANGELOG.json | 15 +++++ .../neo-one-smart-contract-lib/CHANGELOG.md | 7 +- .../neo-one-smart-contract-lib/package.json | 6 +- .../package.json | 6 +- .../CHANGELOG.json | 27 ++++++++ .../CHANGELOG.md | 7 +- .../package.json | 14 ++-- .../CHANGELOG.json | 33 ++++++++++ .../neo-one-smart-contract-test/CHANGELOG.md | 7 +- .../neo-one-smart-contract-test/package.json | 18 ++--- .../CHANGELOG.json | 15 +++++ .../CHANGELOG.md | 7 +- .../package.json | 6 +- .../CHANGELOG.json | 15 +++++ .../CHANGELOG.md | 7 +- .../package.json | 6 +- packages/neo-one-utils-node/CHANGELOG.json | 12 ++++ packages/neo-one-utils-node/CHANGELOG.md | 7 +- packages/neo-one-utils-node/package.json | 4 +- packages/neo-one-utils/CHANGELOG.json | 12 ++++ packages/neo-one-utils/CHANGELOG.md | 9 ++- packages/neo-one-utils/package.json | 2 +- packages/neo-one-website/package.json | 4 +- rush.json | 16 ++--- 166 files changed, 1619 insertions(+), 547 deletions(-) create mode 100644 common/changes/@neo-one/cli-common-node/3.0.1-changelog_2020-12-08-19-30.json delete mode 100644 common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/cli/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (64%) delete mode 100644 common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json delete mode 100644 common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/client-common/{3.0.0preview3.1_2020-10-20-22-57.json => 3.0.1-changelog_2020-12-08-19-30.json} (68%) delete mode 100644 common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json delete mode 100644 common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/client-core/{3.0.0preview3.1_2020-10-20-22-57.json => 3.0.1-changelog_2020-12-08-19-30.json} (67%) rename common/changes/@neo-one/client-full-common/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (68%) delete mode 100644 common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json delete mode 100644 common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-bin/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (66%) rename common/changes/@neo-one/node-blockchain/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (68%) create mode 100644 common/changes/@neo-one/node-consensus/3.0.1-changelog_2020-12-08-19-30.json delete mode 100644 common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-core/{3.0.0preview3.1_2020-10-20-22-57.json => 3.0.1-changelog_2020-12-08-19-30.json} (67%) delete mode 100644 common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-native/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (66%) rename common/changes/@neo-one/node-neo-settings/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (68%) delete mode 100644 common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-protocol/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (67%) delete mode 100644 common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-rpc-handler/{3.0.0preview3.1_2020-10-20-22-57.json => 3.0.1-changelog_2020-12-08-19-30.json} (69%) delete mode 100644 common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json rename common/changes/@neo-one/node-storage-common/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (69%) rename common/changes/@neo-one/node-storage-levelup/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (69%) delete mode 100644 common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json rename common/changes/@neo-one/node-vm/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (65%) rename common/changes/@neo-one/node/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (64%) delete mode 100644 common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json delete mode 100644 common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json delete mode 100644 common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json rename common/changes/@neo-one/utils/{3.0.0preview3-alpha_2020-10-19-23-46.json => 3.0.1-changelog_2020-12-08-19-30.json} (64%) create mode 100644 packages/neo-one-node-native/CHANGELOG.json create mode 100644 packages/neo-one-node-native/CHANGELOG.md 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-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 2d8f90515b..0000000000 --- a/common/changes/@neo-one/cli-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/cli-common" - } - ], - "packageName": "@neo-one/cli-common", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json similarity index 64% rename from common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json index 18df0fccc1..f04035daec 100644 --- a/common/changes/@neo-one/cli/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/cli" } ], diff --git a/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json b/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json deleted file mode 100644 index 2acd363556..0000000000 --- a/common/changes/@neo-one/cli/elliptic_2020-08-03-18-22.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/cli", - "comment": "", - "type": "none" - } - ], - "packageName": "@neo-one/cli", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file 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 index 5c571c74d7..e7394a5859 100644 --- 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 @@ -3,7 +3,7 @@ { "packageName": "@neo-one/cli", "comment": "fixup cli start network command", - "type": "minor" + "type": "patch" } ], "packageName": "@neo-one/cli", diff --git a/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index c2f6bb622d..0000000000 --- a/common/changes/@neo-one/client-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/client-common" - } - ], - "packageName": "@neo-one/client-common", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json similarity index 68% rename from common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json rename to common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json index 12372b9373..c46baf2239 100644 --- a/common/changes/@neo-one/client-common/3.0.0preview3.1_2020-10-20-22-57.json +++ b/common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json @@ -1,11 +1,11 @@ { "changes": [ { - "comment": "3.0.0preview3.1 release bump", - "type": "none", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/client-common" } ], "packageName": "@neo-one/client-common", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json b/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json deleted file mode 100644 index 3e1e6fc863..0000000000 --- a/common/changes/@neo-one/client-common/elliptic_2020-08-03-18-22.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/client-common", - "comment": "Update elliptic dependency.", - "type": "none" - } - ], - "packageName": "@neo-one/client-common", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 9b0da08e53..0000000000 --- a/common/changes/@neo-one/client-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/client-core" - } - ], - "packageName": "@neo-one/client-core", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json similarity index 67% rename from common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json rename to common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json index 9b1bf543e3..65f3e8b35e 100644 --- a/common/changes/@neo-one/client-core/3.0.0preview3.1_2020-10-20-22-57.json +++ b/common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json @@ -1,11 +1,11 @@ { "changes": [ { - "comment": "3.0.0preview3.1 release bump", - "type": "none", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/client-core" } ], "packageName": "@neo-one/client-core", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json similarity index 68% rename from common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json index ac26794e9f..225d4cb966 100644 --- a/common/changes/@neo-one/client-full-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/client-full-common" } ], diff --git a/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index a6f2a351d3..0000000000 --- a/common/changes/@neo-one/client-full-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/client-full-core" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json deleted file mode 100644 index b363b4b869..0000000000 --- a/common/changes/@neo-one/client-full-core/3.0.0preview3.1_2020-10-20-22-57.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3.1 release bump", - "type": "none", - "packageName": "@neo-one/client-full-core" - } - ], - "packageName": "@neo-one/client-full-core", - "email": "danwbyrne@gmail.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 95fe1a9177..0000000000 --- a/common/changes/@neo-one/client-switch/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/client-switch" - } - ], - "packageName": "@neo-one/client-switch", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index a796439bd3..0000000000 --- a/common/changes/@neo-one/client/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/client" - } - ], - "packageName": "@neo-one/client", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 5ac7682875..0000000000 --- a/common/changes/@neo-one/developer-tools/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/developer-tools" - } - ], - "packageName": "@neo-one/developer-tools", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json similarity index 66% rename from common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json index bca9be4f55..3976e7b1c9 100644 --- a/common/changes/@neo-one/node-bin/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-bin" } ], diff --git a/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json similarity index 68% rename from common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json index f8f8a8b1db..d848a3d8a8 100644 --- a/common/changes/@neo-one/node-blockchain/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-blockchain" } ], 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.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index ccfca538d1..0000000000 --- a/common/changes/@neo-one/node-core/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-core" - } - ], - "packageName": "@neo-one/node-core", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json similarity index 67% rename from common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json rename to common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json index 0a10c39dec..0f4d9c1844 100644 --- a/common/changes/@neo-one/node-core/3.0.0preview3.1_2020-10-20-22-57.json +++ b/common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json @@ -1,11 +1,11 @@ { "changes": [ { - "comment": "3.0.0preview3.1 release bump", - "type": "none", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-core" } ], "packageName": "@neo-one/node-core", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 843b4f162e..0000000000 --- a/common/changes/@neo-one/node-http-rpc/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-http-rpc" - } - ], - "packageName": "@neo-one/node-http-rpc", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json similarity index 66% rename from common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json index a7b1a3d633..d2b8a5fd9c 100644 --- a/common/changes/@neo-one/node-native/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-native" } ], diff --git a/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json similarity index 68% rename from common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json index f148396487..4db5e8d399 100644 --- a/common/changes/@neo-one/node-neo-settings/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-neo-settings" } ], diff --git a/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 72dff974e4..0000000000 --- a/common/changes/@neo-one/node-network/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-network" - } - ], - "packageName": "@neo-one/node-network", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 6e8e0e4b29..0000000000 --- a/common/changes/@neo-one/node-offline/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-offline" - } - ], - "packageName": "@neo-one/node-offline", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json similarity index 67% rename from common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json index 2c12c953aa..8d063adbc5 100644 --- a/common/changes/@neo-one/node-protocol/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-protocol" } ], diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index e93a335e39..0000000000 --- a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-rpc-handler" - } - ], - "packageName": "@neo-one/node-rpc-handler", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json b/common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json similarity index 69% rename from common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json rename to common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json index 538549b5f8..8eb60e9f59 100644 --- a/common/changes/@neo-one/node-rpc-handler/3.0.0preview3.1_2020-10-20-22-57.json +++ b/common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json @@ -1,11 +1,11 @@ { "changes": [ { - "comment": "3.0.0preview3.1 release bump", - "type": "none", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-rpc-handler" } ], "packageName": "@neo-one/node-rpc-handler", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index bd7b475179..0000000000 --- a/common/changes/@neo-one/node-storage-cache/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/node-storage-cache" - } - ], - "packageName": "@neo-one/node-storage-cache", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json similarity index 69% rename from common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json index 7b2e8e32ac..64746b3dbd 100644 --- a/common/changes/@neo-one/node-storage-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-storage-common" } ], diff --git a/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json similarity index 69% rename from common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json index 69c7ca49eb..802f0d534c 100644 --- a/common/changes/@neo-one/node-storage-levelup/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-storage-levelup" } ], diff --git a/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json deleted file mode 100644 index fde9afd602..0000000000 --- a/common/changes/@neo-one/node-storage-levelup/fix-web_2020-07-27-19-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node-storage-levelup", - "comment": "Pin level-js and levelup deps.", - "type": "none" - } - ], - "packageName": "@neo-one/node-storage-levelup", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json similarity index 65% rename from common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json index a8732fb7e4..954f9aa83c 100644 --- a/common/changes/@neo-one/node-vm/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node-vm" } ], diff --git a/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json similarity index 64% rename from common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json index 7407b3c9c0..a3470bc3ca 100644 --- a/common/changes/@neo-one/node/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/node" } ], diff --git a/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json deleted file mode 100644 index 6918e5a7dc..0000000000 --- a/common/changes/@neo-one/node/fix-web_2020-07-27-19-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/node", - "comment": "Pin level-js and levelup deps.", - "type": "none" - } - ], - "packageName": "@neo-one/node", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index 8409d7a390..0000000000 --- a/common/changes/@neo-one/react-common/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/react-common" - } - ], - "packageName": "@neo-one/react-common", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json deleted file mode 100644 index f98a624869..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/3.0.0preview3-alpha_2020-10-19-23-46.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", - "packageName": "@neo-one/smart-contract-compiler" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "danwbyrne@gmail.com" -} diff --git a/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json b/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json deleted file mode 100644 index 205bcd5440..0000000000 --- a/common/changes/@neo-one/smart-contract-compiler/fix-web_2020-07-27-19-51.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "packageName": "@neo-one/smart-contract-compiler", - "comment": "Pin level-js and levelup deps.", - "type": "none" - } - ], - "packageName": "@neo-one/smart-contract-compiler", - "email": "spencercorwin@icloud.com" -} \ No newline at end of file diff --git a/common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json b/common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json similarity index 64% rename from common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json rename to common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json index 807f19689b..5f9532114b 100644 --- a/common/changes/@neo-one/utils/3.0.0preview3-alpha_2020-10-19-23-46.json +++ b/common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json @@ -1,11 +1,11 @@ { "changes": [ { - "comment": "3.0.0preview3-alpha release bump", - "type": "major", + "comment": "3.0.1-preview3 release", + "type": "patch", "packageName": "@neo-one/utils" } ], "packageName": "@neo-one/utils", "email": "danwbyrne@gmail.com" -} \ No newline at end of file +} diff --git a/packages/neo-one-cli-common-node/CHANGELOG.json b/packages/neo-one-cli-common-node/CHANGELOG.json index f4a2eb3612..c65f105afc 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.json +++ b/packages/neo-one-cli-common-node/CHANGELOG.json @@ -1,6 +1,24 @@ { "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", diff --git a/packages/neo-one-cli-common-node/CHANGELOG.md b/packages/neo-one-cli-common-node/CHANGELOG.md index dd035a72d5..cbf1f0e2b8 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.md +++ b/packages/neo-one-cli-common-node/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/cli-common-node -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index c95c10e08c..4cd60fcba0 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common-node", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE code common to the node cli and other node packages in NEO•ONE.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full-core": "^2.7.0", + "@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", diff --git a/packages/neo-one-cli-common/CHANGELOG.json b/packages/neo-one-cli-common/CHANGELOG.json index ee473ee175..afc9e6edab 100644 --- a/packages/neo-one-cli-common/CHANGELOG.json +++ b/packages/neo-one-cli-common/CHANGELOG.json @@ -1,6 +1,32 @@ { "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", diff --git a/packages/neo-one-cli-common/CHANGELOG.md b/packages/neo-one-cli-common/CHANGELOG.md index 3cb9f8e49c..fe75aec702 100644 --- a/packages/neo-one-cli-common/CHANGELOG.md +++ b/packages/neo-one-cli-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/cli-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index 79a7256f43..46da699832 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli-common", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE code common to the cli and browser.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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" }, diff --git a/packages/neo-one-cli/CHANGELOG.json b/packages/neo-one-cli/CHANGELOG.json index 1f4b6b4a73..0e34535228 100644 --- a/packages/neo-one-cli/CHANGELOG.json +++ b/packages/neo-one-cli/CHANGELOG.json @@ -1,6 +1,71 @@ { "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", diff --git a/packages/neo-one-cli/CHANGELOG.md b/packages/neo-one-cli/CHANGELOG.md index 05feedaf4e..f1e8c1855d 100644 --- a/packages/neo-one-cli/CHANGELOG.md +++ b/packages/neo-one-cli/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/cli -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 643393d7b9..b7ff994012 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/cli", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE CLI for developing NEO dapps.", "main": "./dist/cjs/index", "scripts": { @@ -17,24 +17,24 @@ "dependencies": { "@babel/core": "^7.6.2", "@babel/register": "^7.5.5", - "@neo-one/cli-common": "^2.7.0", - "@neo-one/cli-common-node": "^2.7.0", - "@neo-one/client": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full": "^2.7.0", - "@neo-one/client-full-core": "^2.7.0", - "@neo-one/client-switch": "^2.7.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": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/smart-contract-codegen": "^2.7.0", - "@neo-one/smart-contract-compiler": "^2.7.0", - "@neo-one/smart-contract-compiler-node": "^2.7.0", - "@neo-one/utils": "^2.6.1", - "@neo-one/utils-node": "^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", @@ -59,7 +59,7 @@ "@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.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", diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json index 5c68b04f29..200472c2f3 100644 --- a/packages/neo-one-client-common/CHANGELOG.json +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -1,6 +1,31 @@ { "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", diff --git a/packages/neo-one-client-common/CHANGELOG.md b/packages/neo-one-client-common/CHANGELOG.md index 8aebd95bce..7cdfe5c92c 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log - @neo-one/client-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- 3.0.0preview3.1 release bump +- Update elliptic dependency. ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index be4907cf99..6329fda88a 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-common", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json index c97f87c156..e5d4d413db 100644 --- a/packages/neo-one-client-core/CHANGELOG.json +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -1,6 +1,34 @@ { "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", diff --git a/packages/neo-one-client-core/CHANGELOG.md b/packages/neo-one-client-core/CHANGELOG.md index f34b59aa2d..55bd47430c 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-core -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- 3.0.0preview3.1 release bump ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 5f583cd998..75bff8eda1 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-core", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE client core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-switch": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-client-full-common/CHANGELOG.json b/packages/neo-one-client-full-common/CHANGELOG.json index 1b8b23026e..212de9756b 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.json +++ b/packages/neo-one-client-full-common/CHANGELOG.json @@ -1,6 +1,26 @@ { "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", diff --git a/packages/neo-one-client-full-common/CHANGELOG.md b/packages/neo-one-client-full-common/CHANGELOG.md index 0b279b5715..982199a9fe 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.md +++ b/packages/neo-one-client-full-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-full-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index 33e46caf6e..37fac0d413 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-common", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE full client common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/client-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", "tslib": "^1.10.0" }, "devDependencies": { diff --git a/packages/neo-one-client-full-core/CHANGELOG.json b/packages/neo-one-client-full-core/CHANGELOG.json index 715e6acfc4..5722894006 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.json +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -1,6 +1,43 @@ { "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", diff --git a/packages/neo-one-client-full-core/CHANGELOG.md b/packages/neo-one-client-full-core/CHANGELOG.md index a74e2ebe51..89eab324dc 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/client-full-core -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- 3.0.0preview3.1 release bump ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index e5e75b860e..ca4978153b 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full-core", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE client-full core types implementation.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,18 +13,18 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full-common": "^2.7.0", - "@neo-one/client-switch": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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/build-tools": "^1.0.0", - "@neo-one/node-core": "^2.7.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", diff --git a/packages/neo-one-client-full/CHANGELOG.json b/packages/neo-one-client-full/CHANGELOG.json index e25c9a47cb..aa1f63554f 100644 --- a/packages/neo-one-client-full/CHANGELOG.json +++ b/packages/neo-one-client-full/CHANGELOG.json @@ -1,6 +1,21 @@ { "name": "@neo-one/client-full", "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/client-full_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client\" 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/client-full_v2.7.0", diff --git a/packages/neo-one-client-full/CHANGELOG.md b/packages/neo-one-client-full/CHANGELOG.md index 103c77cff7..82aa1ab2aa 100644 --- a/packages/neo-one-client-full/CHANGELOG.md +++ b/packages/neo-one-client-full/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/client-full -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-full/package.json b/packages/neo-one-client-full/package.json index c3960e8c34..b85adea31e 100644 --- a/packages/neo-one-client-full/package.json +++ b/packages/neo-one-client-full/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-full", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE client extended API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client": "^2.7.0", - "@neo-one/client-full-core": "^2.7.0" + "@neo-one/client": "^3.0.0", + "@neo-one/client-full-core": "^3.0.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.json b/packages/neo-one-client-switch/CHANGELOG.json index 466358e062..7a17e2fc90 100644 --- a/packages/neo-one-client-switch/CHANGELOG.json +++ b/packages/neo-one-client-switch/CHANGELOG.json @@ -1,6 +1,29 @@ { "name": "@neo-one/client-switch", "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client-switch_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/client-switch_v2.7.0", diff --git a/packages/neo-one-client-switch/CHANGELOG.md b/packages/neo-one-client-switch/CHANGELOG.md index 851a600459..3a44087efc 100644 --- a/packages/neo-one-client-switch/CHANGELOG.md +++ b/packages/neo-one-client-switch/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client-switch -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client-switch/package.json b/packages/neo-one-client-switch/package.json index 3f65613a74..f272a5ba65 100644 --- a/packages/neo-one-client-switch/package.json +++ b/packages/neo-one-client-switch/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client-switch", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE client library for browser/node differences.", "main": "./dist/cjs/index", "browser": "./dist/cjs/index.browser", @@ -16,9 +16,9 @@ "dependencies": { "@babel/code-frame": "^7.0.0", "@ledgerhq/hw-transport-u2f": "^4.68.2", - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "regenerator-runtime": "^0.13.3", "source-map": "^0.7.3", diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json index 1f7005af43..e2bfb1b529 100644 --- a/packages/neo-one-client/CHANGELOG.json +++ b/packages/neo-one-client/CHANGELOG.json @@ -1,6 +1,26 @@ { "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", diff --git a/packages/neo-one-client/CHANGELOG.md b/packages/neo-one-client/CHANGELOG.md index f7abd88aa4..1227bdad9a 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/client -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index bbe5bf9c60..0c26a80eb4 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/client", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE client API.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0" + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0" }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index a277225e8a..e5ce7e3f8c 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -15,11 +15,11 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@emotion/styled-base": "^10.0.24", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", "@neo-one/react": "^2.7.0", - "@neo-one/react-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-developer-tools/CHANGELOG.json b/packages/neo-one-developer-tools/CHANGELOG.json index 2b67dc2942..ca20cc2c53 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.json +++ b/packages/neo-one-developer-tools/CHANGELOG.json @@ -1,6 +1,23 @@ { "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", diff --git a/packages/neo-one-developer-tools/CHANGELOG.md b/packages/neo-one-developer-tools/CHANGELOG.md index fac8a5c0a5..352545583e 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.md +++ b/packages/neo-one-developer-tools/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/developer-tools -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index 62dca2390d..e032ddef7e 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/developer-tools", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE developer tools.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.7.0", + "@neo-one/client-core": "^3.0.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index 701ef50ff6..7af9c9de40 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -13,8 +13,8 @@ "dependencies": { "@neo-one/http": "^2.7.0", "@neo-one/logger": "^2.6.1", - "@neo-one/utils": "^2.6.1", - "@neo-one/utils-node": "^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", diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index d2765f9ae8..0e012d2e31 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -28,17 +28,17 @@ "@emotion/core": "^10.0.22", "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", - "@neo-one/client": "^2.7.0", - "@neo-one/client-switch": "^2.7.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.7.0", - "@neo-one/react-common": "^2.7.0", - "@neo-one/smart-contract-compiler": "^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.6.1", + "@neo-one/utils": "^3.0.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", diff --git a/packages/neo-one-http-context/CHANGELOG.json b/packages/neo-one-http-context/CHANGELOG.json index e834c20fdd..741eda5874 100644 --- a/packages/neo-one-http-context/CHANGELOG.json +++ b/packages/neo-one-http-context/CHANGELOG.json @@ -1,6 +1,21 @@ { "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", diff --git a/packages/neo-one-http-context/CHANGELOG.md b/packages/neo-one-http-context/CHANGELOG.md index 4e2f43b3d0..e62a1a7c74 100644 --- a/packages/neo-one-http-context/CHANGELOG.md +++ b/packages/neo-one-http-context/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/http-context -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index b774857a78..9f9e9b4189 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/http-context", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE http context utilities.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.7.0", + "@neo-one/client-switch": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index e0a826e4a3..3171dfa628 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -11,13 +11,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.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.7.0", - "@neo-one/smart-contract-compiler": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-node-bin/CHANGELOG.json b/packages/neo-one-node-bin/CHANGELOG.json index c3de6c92cc..fc8d0be370 100644 --- a/packages/neo-one-node-bin/CHANGELOG.json +++ b/packages/neo-one-node-bin/CHANGELOG.json @@ -1,6 +1,38 @@ { "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", diff --git a/packages/neo-one-node-bin/CHANGELOG.md b/packages/neo-one-node-bin/CHANGELOG.md index 1a76124953..98639eaaa4 100644 --- a/packages/neo-one-node-bin/CHANGELOG.md +++ b/packages/neo-one-node-bin/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-bin -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index b8784f9c1a..d28097d4f5 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-bin", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE NEO executable full node.", "bin": { "neo-one-node": "bin/neo-one-node.js" @@ -15,10 +15,10 @@ "sideEffects": false, "dependencies": { "@neo-one/logger": "^2.6.1", - "@neo-one/node": "^2.7.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/utils": "^2.6.1", - "@neo-one/utils-node": "^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", @@ -31,8 +31,8 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.7.0", - "@neo-one/client-common": "^2.7.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", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.json b/packages/neo-one-node-blockchain/CHANGELOG.json index 84bb3a7e2b..368d7163d6 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.json +++ b/packages/neo-one-node-blockchain/CHANGELOG.json @@ -1,6 +1,38 @@ { "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", diff --git a/packages/neo-one-node-blockchain/CHANGELOG.md b/packages/neo-one-node-blockchain/CHANGELOG.md index acad3ef8e0..98e648e675 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.md +++ b/packages/neo-one-node-blockchain/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-blockchain -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index efdf2d487c..1f54a93d5e 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-blockchain", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE Blockchain implementation", "main": "./dist/cjs/index", "scripts": { @@ -12,10 +12,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", @@ -24,9 +24,9 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/node-storage-levelup": "^2.7.0", - "@neo-one/node-vm": "^2.7.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/levelup": "^3.1.1", diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index 549b344e7e..04510b3bd3 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -11,16 +11,16 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/node-blockchain": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/node-protocol": "^2.7.0", - "@neo-one/node-rpc-handler": "^2.7.0", - "@neo-one/node-storage-levelup": "^2.7.0", - "@neo-one/node-vm": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-node-consensus/CHANGELOG.json b/packages/neo-one-node-consensus/CHANGELOG.json index c644b10c40..c86d42784f 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.json +++ b/packages/neo-one-node-consensus/CHANGELOG.json @@ -1,6 +1,24 @@ { "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", diff --git a/packages/neo-one-node-consensus/CHANGELOG.md b/packages/neo-one-node-consensus/CHANGELOG.md index 0c000d060b..4e3046d94e 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.md +++ b/packages/neo-one-node-consensus/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/node-consensus -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index 4c53fcdab9..a9767e417d 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-consensus", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE NEO consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", + "@neo-one/client-common": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^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", diff --git a/packages/neo-one-node-core/CHANGELOG.json b/packages/neo-one-node-core/CHANGELOG.json index b9dec57a36..5cdbe08a31 100644 --- a/packages/neo-one-node-core/CHANGELOG.json +++ b/packages/neo-one-node-core/CHANGELOG.json @@ -1,6 +1,34 @@ { "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", diff --git a/packages/neo-one-node-core/CHANGELOG.md b/packages/neo-one-node-core/CHANGELOG.md index 8f815f0a56..e2881f5fbc 100644 --- a/packages/neo-one-node-core/CHANGELOG.md +++ b/packages/neo-one-node-core/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-core -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- 3.0.0preview3.1 release bump ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index ffeec9585a..f1878d634a 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-core", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE core types for node packages", "main": "./dist/cjs/index", "scripts": { @@ -12,9 +12,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-full-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.json b/packages/neo-one-node-http-rpc/CHANGELOG.json index c7261429f6..958158738b 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.json +++ b/packages/neo-one-node-http-rpc/CHANGELOG.json @@ -1,6 +1,38 @@ { "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", diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.md b/packages/neo-one-node-http-rpc/CHANGELOG.md index a71c6c5092..4f7cc7f853 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.md +++ b/packages/neo-one-node-http-rpc/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-http-rpc -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index e80fdfe9e0..2dcee2bfc5 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE RPC server.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,14 +13,14 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common-node": "^2.7.0", + "@neo-one/cli-common-node": "^2.7.1", "@neo-one/http": "^2.7.0", - "@neo-one/http-context": "^2.7.0", + "@neo-one/http-context": "^2.7.1", "@neo-one/logger": "^2.6.1", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-native": "^2.7.0", - "@neo-one/node-rpc-handler": "^2.7.0", - "@neo-one/utils": "^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", 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/package.json b/packages/neo-one-node-native/package.json index de8f60b8f2..fbc3fdf564 100644 --- a/packages/neo-one-node-native/package.json +++ b/packages/neo-one-node-native/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-native", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE Node Native Contract Implementations", "main": "./dist/cjs/index", "scripts": { @@ -12,10 +12,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-full-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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" diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.json b/packages/neo-one-node-neo-settings/CHANGELOG.json index 18269f6f05..277ecd676f 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.json +++ b/packages/neo-one-node-neo-settings/CHANGELOG.json @@ -1,6 +1,29 @@ { "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", diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.md b/packages/neo-one-node-neo-settings/CHANGELOG.md index 104eb1c1a1..572682fba2 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.md +++ b/packages/neo-one-node-neo-settings/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-neo-settings -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index e3ef1d36cd..0f1b97475b 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE standard MainNet and TestNet blockchain settings.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-node-network/CHANGELOG.json b/packages/neo-one-node-network/CHANGELOG.json index 9bc3b4374c..d5435109c7 100644 --- a/packages/neo-one-node-network/CHANGELOG.json +++ b/packages/neo-one-node-network/CHANGELOG.json @@ -1,6 +1,29 @@ { "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", diff --git a/packages/neo-one-node-network/CHANGELOG.md b/packages/neo-one-node-network/CHANGELOG.md index b2542a9c39..5c24038ba9 100644 --- a/packages/neo-one-node-network/CHANGELOG.md +++ b/packages/neo-one-node-network/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-network -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index 5d19bf8a0d..cbf7ad62a0 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-network", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE NEO network protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.7.0", + "@neo-one/client-switch": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-offline/CHANGELOG.json b/packages/neo-one-node-offline/CHANGELOG.json index 0cec9a019f..1bf9c3594e 100644 --- a/packages/neo-one-node-offline/CHANGELOG.json +++ b/packages/neo-one-node-offline/CHANGELOG.json @@ -1,6 +1,26 @@ { "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", diff --git a/packages/neo-one-node-offline/CHANGELOG.md b/packages/neo-one-node-offline/CHANGELOG.md index 1044457d3d..21af05173f 100644 --- a/packages/neo-one-node-offline/CHANGELOG.md +++ b/packages/neo-one-node-offline/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-offline -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index 4a152882a2..a9759cf8a1 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-offline", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE utility for loading serialized blocks (chain.acc) into a node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/logger": "^2.6.1", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, diff --git a/packages/neo-one-node-protocol/CHANGELOG.json b/packages/neo-one-node-protocol/CHANGELOG.json index 118f2509d5..9374acc587 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.json +++ b/packages/neo-one-node-protocol/CHANGELOG.json @@ -1,6 +1,35 @@ { "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", diff --git a/packages/neo-one-node-protocol/CHANGELOG.md b/packages/neo-one-node-protocol/CHANGELOG.md index bd272a5702..2dde027e5d 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.md +++ b/packages/neo-one-node-protocol/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-protocol -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index 72b7497d75..3aba0a3e22 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-protocol", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE NEO node and consensus protocol.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,12 +13,12 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-switch": "^2.7.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.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^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", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.json b/packages/neo-one-node-rpc-handler/CHANGELOG.json index 9087fbdf05..5d91bd8958 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.json +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.json @@ -1,6 +1,37 @@ { "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", diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.md b/packages/neo-one-node-rpc-handler/CHANGELOG.md index c51cfca4a1..65831ee263 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.md +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-rpc-handler -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- 3.0.0preview3.1 release bump ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index 973aebb1a4..ee62e6051e 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE RPC handler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,11 +13,11 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-switch": "^2.7.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^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", diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.json b/packages/neo-one-node-storage-cache/CHANGELOG.json index 7c55a5db5f..fb79765015 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.json +++ b/packages/neo-one-node-storage-cache/CHANGELOG.json @@ -1,6 +1,32 @@ { "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", diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.md b/packages/neo-one-node-storage-cache/CHANGELOG.md index 284812cfae..37dfc33950 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.md +++ b/packages/neo-one-node-storage-cache/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-storage-cache -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index 081f0cb08b..3d14483035 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE node storage cache.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-storage-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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" diff --git a/packages/neo-one-node-storage-common/CHANGELOG.json b/packages/neo-one-node-storage-common/CHANGELOG.json index 20bf6c30b0..144f7b1963 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.json +++ b/packages/neo-one-node-storage-common/CHANGELOG.json @@ -1,6 +1,29 @@ { "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", diff --git a/packages/neo-one-node-storage-common/CHANGELOG.md b/packages/neo-one-node-storage-common/CHANGELOG.md index b4f4e7bce0..1dd588cd5a 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.md +++ b/packages/neo-one-node-storage-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-storage-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index 876e8d4fc2..ca5a96293e 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-common", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE node storage common.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,9 +13,9 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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" }, diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.json b/packages/neo-one-node-storage-levelup/CHANGELOG.json index 14a0deccdb..ab885a8262 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.json +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.json @@ -1,6 +1,37 @@ { "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", diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.md b/packages/neo-one-node-storage-levelup/CHANGELOG.md index 7fb50a0abb..958b905ebb 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.md +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node-storage-levelup -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- Pin level-js and levelup deps. ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 042d45f7ae..a4a9680d7c 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE levelup node storage.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-storage-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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", diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json index 0502bbd9e3..8b572da6b7 100644 --- a/packages/neo-one-node-tools/package.json +++ b/packages/neo-one-node-tools/package.json @@ -16,7 +16,7 @@ "dependencies": { "@google-cloud/storage": "^4.3.2", "@neo-one/logger": "^2.6.1", - "@neo-one/utils-node": "^2.6.1", + "@neo-one/utils-node": "^2.6.2", "execa": "^3.2.0", "import-local": "^3.0.2", "rc": "^1.2.8", diff --git a/packages/neo-one-node-vm/CHANGELOG.json b/packages/neo-one-node-vm/CHANGELOG.json index 2aef48e09b..6b6934b5d7 100644 --- a/packages/neo-one-node-vm/CHANGELOG.json +++ b/packages/neo-one-node-vm/CHANGELOG.json @@ -1,6 +1,29 @@ { "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", diff --git a/packages/neo-one-node-vm/CHANGELOG.md b/packages/neo-one-node-vm/CHANGELOG.md index c709b03f25..d013a3696c 100644 --- a/packages/neo-one-node-vm/CHANGELOG.md +++ b/packages/neo-one-node-vm/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/node-vm -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 000c3cfd38..1cb3e7decb 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node-vm", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE C# Wrapper for neo3 VM", "main": "./dist/cjs/index", "scripts": { @@ -14,9 +14,9 @@ "sideEffects": false, "dependencies": { "@neo-one/edge": "^15.0.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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": { diff --git a/packages/neo-one-node/CHANGELOG.json b/packages/neo-one-node/CHANGELOG.json index 1424a074d5..fe765ef4ce 100644 --- a/packages/neo-one-node/CHANGELOG.json +++ b/packages/neo-one-node/CHANGELOG.json @@ -1,6 +1,64 @@ { "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", diff --git a/packages/neo-one-node/CHANGELOG.md b/packages/neo-one-node/CHANGELOG.md index f7507af60e..85c6a6966d 100644 --- a/packages/neo-one-node/CHANGELOG.md +++ b/packages/neo-one-node/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/node -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- Pin level-js and levelup deps. ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 007622f676..ae12f3757e 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/node", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE NEO full node.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,18 +13,18 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.7.0", + "@neo-one/client-switch": "^3.0.0", "@neo-one/logger": "^2.6.1", - "@neo-one/node-blockchain": "^2.7.0", - "@neo-one/node-core": "^2.7.0", - "@neo-one/node-http-rpc": "^2.7.0", - "@neo-one/node-native": "^2.7.0", - "@neo-one/node-network": "^2.7.0", - "@neo-one/node-offline": "^2.7.0", - "@neo-one/node-protocol": "^2.7.0", - "@neo-one/node-storage-levelup": "^2.7.0", - "@neo-one/node-vm": "^2.7.0", - "@neo-one/utils": "^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", @@ -35,9 +35,9 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@neo-one/client-common": "^2.7.0", + "@neo-one/client-common": "^3.0.0", "@neo-one/build-tools": "^1.0.0", - "@neo-one/node-neo-settings": "^2.7.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", diff --git a/packages/neo-one-react-common/CHANGELOG.json b/packages/neo-one-react-common/CHANGELOG.json index 37fa0e7974..1e48868cee 100644 --- a/packages/neo-one-react-common/CHANGELOG.json +++ b/packages/neo-one-react-common/CHANGELOG.json @@ -1,6 +1,18 @@ { "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", diff --git a/packages/neo-one-react-common/CHANGELOG.md b/packages/neo-one-react-common/CHANGELOG.md index 3e449e37d5..2f15364002 100644 --- a/packages/neo-one-react-common/CHANGELOG.md +++ b/packages/neo-one-react-common/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/react-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index f8f8177d00..81766472a9 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/react-common", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE shared react.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.json b/packages/neo-one-smart-contract-codegen/CHANGELOG.json index b52370ed65..5da6e996c3 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.json +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.json @@ -1,6 +1,27 @@ { "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", diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.md b/packages/neo-one-smart-contract-codegen/CHANGELOG.md index 4a96d32425..9689b91267 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.md +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-codegen -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index e036f530f2..1cf825a8a2 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript smart contract codegen.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,10 +13,10 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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": "^2.0.1", "safe-stable-stringify": "^1.1.0", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json index 52602ae50e..72c9a7e712 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json @@ -1,6 +1,21 @@ { "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", diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md index 980e5b1a27..b00e6a3f3e 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-compiler-node -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index a8cecf9185..a283088fb3 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript smart contract compiler node host.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,8 +14,8 @@ "sideEffects": false, "dependencies": { "@neo-one/smart-contract": "^2.7.0", - "@neo-one/smart-contract-lib": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@neo-one/smart-contract-lib": "^2.7.1", + "@neo-one/utils": "^3.0.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", "tslib": "^1.10.0", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.json b/packages/neo-one-smart-contract-compiler/CHANGELOG.json index 85bfc88193..bd44764380 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.json +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.json @@ -1,6 +1,61 @@ { "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", diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.md b/packages/neo-one-smart-contract-compiler/CHANGELOG.md index 568182a5d2..ee4b473ac7 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log - @neo-one/smart-contract-compiler -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 + +### Updates + +- Pin level-js and levelup deps. ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index 0fee625313..23810372b1 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.7.0", + "version": "3.0.0", "description": "NEO•ONE TypeScript smart contract compiler.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,14 +14,14 @@ "sideEffects": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full-common": "^2.7.0", - "@neo-one/client-full-core": "^2.7.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.1", - "@neo-one/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", @@ -32,12 +32,12 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client-switch": "^2.7.0", - "@neo-one/node-blockchain": "^2.7.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/node-storage-levelup": "^2.7.0", - "@neo-one/node-vm": "^2.7.0", - "@neo-one/smart-contract-compiler-node": "^2.7.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/node-blockchain": "^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/jest": "^24.0.18", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.json b/packages/neo-one-smart-contract-lib/CHANGELOG.json index 4e796ac00b..654f7badd4 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.json +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.json @@ -1,6 +1,21 @@ { "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", diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.md b/packages/neo-one-smart-contract-lib/CHANGELOG.md index 93066340b2..7b42df5971 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.md +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-lib -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 2255d25863..96aa9fe6dd 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript common smart contracts.", "main": "./src/index.ts", "smartContract": true, @@ -13,8 +13,8 @@ "@neo-one/smart-contract": "^2.7.0" }, "devDependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", + "@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" diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 353346bac0..7c0c0ce61f 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -11,12 +11,12 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.7.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.7.0", - "@neo-one/utils": "^2.6.1", + "@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" diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.json b/packages/neo-one-smart-contract-test-common/CHANGELOG.json index ed8d8fa314..4fc36d27bd 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.json @@ -1,6 +1,33 @@ { "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", diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.md b/packages/neo-one-smart-contract-test-common/CHANGELOG.md index 2f70a5166c..bef6658bb7 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-test-common -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 162a404141..791253d03c 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript smart contract test harness common code.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,13 +13,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.7.0", - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/client-full-core": "^2.7.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": "^2.7.0", - "@neo-one/utils": "^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" }, diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.json b/packages/neo-one-smart-contract-test/CHANGELOG.json index c2d64f15e5..98343d2169 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.json +++ b/packages/neo-one-smart-contract-test/CHANGELOG.json @@ -1,6 +1,39 @@ { "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", diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.md b/packages/neo-one-smart-contract-test/CHANGELOG.md index 4a2b07e299..4857ee4bf2 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-test -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index 2207fcc5d3..96a3941e2f 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript smart contract test harness.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,13 +13,13 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.7.0", - "@neo-one/client-core": "^2.7.0", - "@neo-one/node": "^2.7.0", - "@neo-one/node-neo-settings": "^2.7.0", - "@neo-one/smart-contract-compiler-node": "^2.7.0", - "@neo-one/smart-contract-test-common": "^2.7.0", - "@neo-one/utils": "^2.6.1", + "@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" @@ -27,7 +27,7 @@ "devDependencies": { "@neo-one/build-tools": "^1.0.0", "@neo-one/smart-contract": "^2.7.0", - "@neo-one/smart-contract-lib": "^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", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json index cf43e7ff06..2ab20c4cfc 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json @@ -1,6 +1,21 @@ { "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", diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md index d9bd2e9e48..60f3563b9f 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/smart-contract-typescript-plugin -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.7.0 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index 227ee206db..71fb28cd6d 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.7.0", + "version": "2.7.1", "description": "NEO•ONE TypeScript typescript plugin.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,8 +13,8 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.7.0", - "@neo-one/smart-contract-compiler-node": "^2.7.0", + "@neo-one/smart-contract-compiler": "^3.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", "typescript": "3.9.5" }, "devDependencies": { diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.json b/packages/neo-one-typescript-concatenator/CHANGELOG.json index 05c3757201..3e1d77de50 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.json +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.json @@ -1,6 +1,21 @@ { "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", diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.md b/packages/neo-one-typescript-concatenator/CHANGELOG.md index 815648334f..b0b0f52102 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.md +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/typescript-concatenator -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.6.2 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.6.1 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index 4d51796ef4..6ff42c508a 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.6.1", + "version": "2.6.2", "description": "NEO•ONE TypeScript Concatenator", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -14,7 +14,7 @@ "sideEffects": false, "dependencies": { "@neo-one/ts-utils": "^2.6.1", - "@neo-one/utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "toposort": "^2.0.2", "tslib": "^1.10.0", @@ -22,7 +22,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/smart-contract-compiler-node": "^2.7.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", diff --git a/packages/neo-one-utils-node/CHANGELOG.json b/packages/neo-one-utils-node/CHANGELOG.json index bde3c0c2a3..104967c2aa 100644 --- a/packages/neo-one-utils-node/CHANGELOG.json +++ b/packages/neo-one-utils-node/CHANGELOG.json @@ -1,6 +1,18 @@ { "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", diff --git a/packages/neo-one-utils-node/CHANGELOG.md b/packages/neo-one-utils-node/CHANGELOG.md index d69e6fb0e9..a7de7c273f 100644 --- a/packages/neo-one-utils-node/CHANGELOG.md +++ b/packages/neo-one-utils-node/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @neo-one/utils-node -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 2.6.2 +Tue, 08 Dec 2020 19:29:01 GMT + +*Version update only* ## 2.6.1 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 365eeffc5e..e4bf3d1a9e 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils-node", - "version": "2.6.1", + "version": "2.6.2", "description": "NEO•ONE shared Nodejs utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", @@ -13,7 +13,7 @@ }, "sideEffects": false, "dependencies": { - "@neo-one/utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "@types/pino": "^5.8.9", "@types/yargs": "^13.0.3", "execa": "^3.2.0", diff --git a/packages/neo-one-utils/CHANGELOG.json b/packages/neo-one-utils/CHANGELOG.json index d548707196..900856be10 100644 --- a/packages/neo-one-utils/CHANGELOG.json +++ b/packages/neo-one-utils/CHANGELOG.json @@ -1,6 +1,18 @@ { "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", diff --git a/packages/neo-one-utils/CHANGELOG.md b/packages/neo-one-utils/CHANGELOG.md index db5fc2c59e..0735d0e4ff 100644 --- a/packages/neo-one-utils/CHANGELOG.md +++ b/packages/neo-one-utils/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @neo-one/utils -This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. +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 ## 2.6.1 Thu, 23 Jul 2020 22:11:12 GMT diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 46861e9d51..89f8736333 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,6 +1,6 @@ { "name": "@neo-one/utils", - "version": "2.6.1", + "version": "3.0.0", "description": "NEO•ONE shared utils.", "main": "./dist/cjs/index", "module": "./dist/esm/index", diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 45e73f1197..450542060b 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -21,7 +21,7 @@ "@emotion/styled-base": "^10.0.24", "@neo-one/editor": "^2.3.1", "@neo-one/react": "^2.7.0", - "@neo-one/react-common": "^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", @@ -70,7 +70,7 @@ }, "devDependencies": { "@neo-one/build-tools": "^1.0.0", - "@neo-one/client": "^2.7.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", diff --git a/rush.json b/rush.json index 5f63a97b7c..bf0bec6931 100644 --- a/rush.json +++ b/rush.json @@ -6,14 +6,8 @@ "ensureConsistentVersions": true, "suppressNodeLtsWarning": true, "approvedPackagesPolicy": { - "reviewCategories": [ - "production", - "tools", - "web" - ], - "ignoredNpmScopes": [ - "@types" - ] + "reviewCategories": ["production", "tools", "web"], + "ignoredNpmScopes": ["@types"] }, "repository": { "url": "https://github.com/neo-one-suite/neo-one.git" @@ -44,21 +38,21 @@ "packageName": "@neo-one/cli", "projectFolder": "packages/neo-one-cli", "reviewCategory": "production", - "shouldPublish": false, + "shouldPublish": true, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common", "projectFolder": "packages/neo-one-cli-common", "reviewCategory": "production", - "shouldPublish": false, + "shouldPublish": true, "versionPolicyName": "CoreReleasePolicy" }, { "packageName": "@neo-one/cli-common-node", "projectFolder": "packages/neo-one-cli-common-node", "reviewCategory": "production", - "shouldPublish": false, + "shouldPublish": true, "versionPolicyName": "CoreReleasePolicy" }, { From f10a833a022ea9549ed39a3de2aab81e3bc2f025 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Wed, 9 Dec 2020 11:51:11 -0800 Subject: [PATCH 134/141] fix(vm): fixup environment variable requirements (#2262) --- .../node-vm/vm-env-fixup_2020-12-09-19-41.json | 11 +++++++++++ packages/neo-one-node-vm/src/utils.ts | 12 +++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 common/changes/@neo-one/node-vm/vm-env-fixup_2020-12-09-19-41.json 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/packages/neo-one-node-vm/src/utils.ts b/packages/neo-one-node-vm/src/utils.ts index a1211d2d08..3521cd36cf 100644 --- a/packages/neo-one-node-vm/src/utils.ts +++ b/packages/neo-one-node-vm/src/utils.ts @@ -6,7 +6,9 @@ import { InvalidByteError, InvalidIntError, InvalidUIntError } from './errors'; import { ProtocolSettings } from './Methods'; import { DefaultMethods, DispatcherFunc } from './types'; -const APP_ROOT = path.resolve(__dirname, '..'); +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 = { @@ -19,6 +21,14 @@ 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); From b0ea044aa627b81327fdfb58de9637d3a711219e Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 15 Dec 2020 13:11:10 -0800 Subject: [PATCH 135/141] feat(misc): various fixups, VM Logging (#2263) --- .../misc-fixes_2020-12-15-20-03.json | 11 + .../misc-fixes_2020-12-15-20-03.json | 11 + .../misc-fixes_2020-12-15-20-03.json | 11 + .../misc-fixes_2020-12-15-20-03.json | 11 + .../node-vm/misc-fixes_2020-12-15-20-03.json | 11 + .../node/misc-fixes_2020-12-15-20-03.json | 11 + .../neo-one-client-common/src/models/types.ts | 4 + packages/neo-one-client-common/src/types.ts | 2 +- .../user/LocalUserAccountProvider.test.ts | 25 +- .../neo-one-client-core/src/clientUtils.ts | 7 +- .../src/provider/NEOONEDataProvider.ts | 27 +- .../src/provider/NEOONEProvider.ts | 4 +- .../src/provider/convert.ts | 2 +- .../src/user/UserAccountProviderBase.ts | 4 +- .../neo-one-node-blockchain/src/Blockchain.ts | 21 - packages/neo-one-node-blockchain/src/utils.ts | 2 + .../src/wrapExecuteScripts.ts | 21 - packages/neo-one-node-core/src/Blockchain.ts | 4 - .../src/StackItems/StackItems.ts | 2 +- packages/neo-one-node-core/src/vm.ts | 12 +- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 442 +++++++++--------- .../neo-one-node-vm/lib/Dispatcher.csproj | 2 +- packages/neo-one-node-vm/lib/ReturnHelpers.cs | 330 +++++++------ .../neo-one-node-vm/src/ApplicationEngine.ts | 8 +- .../src/Methods/EngineMethods.ts | 3 +- .../neo-one-node-vm/src/converters/index.ts | 1 + .../neo-one-node-vm/src/converters/log.ts | 18 + .../src/__tests__/blockchain.test.ts | 101 ++-- 28 files changed, 605 insertions(+), 503 deletions(-) create mode 100644 common/changes/@neo-one/client-common/misc-fixes_2020-12-15-20-03.json create mode 100644 common/changes/@neo-one/client-core/misc-fixes_2020-12-15-20-03.json create mode 100644 common/changes/@neo-one/node-blockchain/misc-fixes_2020-12-15-20-03.json create mode 100644 common/changes/@neo-one/node-core/misc-fixes_2020-12-15-20-03.json create mode 100644 common/changes/@neo-one/node-vm/misc-fixes_2020-12-15-20-03.json create mode 100644 common/changes/@neo-one/node/misc-fixes_2020-12-15-20-03.json delete mode 100644 packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts create mode 100644 packages/neo-one-node-vm/src/converters/log.ts 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/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/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-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-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/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/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 76cfb4949f..33009db8cc 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -121,6 +121,7 @@ export interface RawInvocationResultErrorJSON { readonly gasconsumed: string; readonly stack: string; readonly notifications: readonly NotificationJSON[]; + readonly logs: readonly LogJSON[]; } export interface RawInvocationResultSuccessJSON { @@ -480,6 +481,9 @@ export interface NotificationJSON { readonly state: readonly StackItemJSON[] | string; } +export interface LogJSON { + readonly message: string; +} export interface CallReceiptJSON { readonly script: string; readonly state: keyof typeof VMState; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index cca6cb2d57..2bc19ac154 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -2246,7 +2246,7 @@ export interface RawIntegerStackItem extends RawStackItemBase { export interface RawByteStringStackItem extends RawStackItemBase { readonly type: 'ByteString'; - readonly value: Buffer; + readonly value: string; } export interface RawBufferStackItem extends RawStackItemBase { 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 index abf8b8e04e..2427ad19e9 100644 --- a/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -1,7 +1,7 @@ -import { common, crypto } from '@neo-one/client-common'; +import { common, crypto, ScriptBuilder } from '@neo-one/client-common'; import { constants } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; -import { NEOONEProvider } from '../../provider'; +import { NEOONEProvider, NEOONEDataProvider } from '../../provider'; import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../../user'; const secondaryKeyString = '04c1784140445016cf0f8cc86dd10ad8764e1a89c563c500e21ac19a5d905ab3'; @@ -139,3 +139,24 @@ describe.skip('Test LocalUserAccountProvider transfer methods -- staging network expect(stackReturn.value).toEqual(true); }); }); + +describe('contract info / usage testing', () => { + const knownContractHashString = '0x79597a92440ce385fe1b0f4d9d2a92ca8608a575'; + const knownContractHash = common.stringToUInt160(knownContractHashString); + + const providerOptions = { + network: 'test', + rpcURL: 'http://localhost:8081/rpc', + }; + const provider = new NEOONEProvider([providerOptions]); + + test('use `call` to get name of NEO contract', async () => { + const result = await provider.call('test', common.nativeScriptHashes.NEO, 'name', []); + const value = result.stack[0]; + if (typeof value === 'string') { + throw new Error(value); + } + + expect(value.value).toEqual('NEO'); + }); +}); diff --git a/packages/neo-one-client-core/src/clientUtils.ts b/packages/neo-one-client-core/src/clientUtils.ts index 290f671a12..a06aebd9f0 100644 --- a/packages/neo-one-client-core/src/clientUtils.ts +++ b/packages/neo-one-client-core/src/clientUtils.ts @@ -6,6 +6,7 @@ import { NetworkType, ScriptBuilder, ScriptBuilderParam, + UInt160Hex, } from '@neo-one/client-common'; import sp from 'synchronized-promise'; import { LocalKeyStore } from './user'; @@ -24,16 +25,16 @@ 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(); }; diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 81b50813f1..88424500e1 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -56,6 +56,7 @@ import { 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'; @@ -125,8 +126,8 @@ export class NEOONEDataProvider implements DeveloperProvider { return this.convertApplicationLogData(applicationLogData); } - public async testInvoke(transaction: FeelessTransactionModel): Promise { - const receipt = await this.mutableClient.testInvokeRaw(transaction.script.toString('hex')); + public async testInvoke(script: Buffer): Promise { + const receipt = await this.mutableClient.testInvokeRaw(script.toString('hex')); return convertCallReceipt(receipt); } @@ -210,27 +211,17 @@ export class NEOONEDataProvider implements DeveloperProvider { } public async call( - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, - validUntilBlock?: number, ): Promise { - const countPromise = validUntilBlock ? Promise.resolve(0) : this.mutableClient.getBlockCount(); - const [count, { messagemagic: messageMagic }] = await Promise.all([ - countPromise, - this.mutableClient.getNetworkSettings(), - ]); - const testTransaction = new FeelessTransactionModel({ - script: clientUtils.getInvokeMethodScript({ - address: contract, - method, - params, - }), - validUntilBlock: validUntilBlock ? validUntilBlock : count + 240, - messageMagic, + const script = clientUtils.getInvokeMethodScript({ + scriptHash: contract, + method, + params, }); - return this.testInvoke(testTransaction); + return this.testInvoke(script); } public async runConsensusNow(): Promise { diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index 634e78fce9..bfeb50b0f9 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -76,8 +76,8 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).getApplicationLogData(hash); } - public async testInvoke(network: NetworkType, transaction: FeelessTransactionModel): Promise { - return this.getProvider(network).testInvoke(transaction); + public async testInvoke(network: NetworkType, script: Buffer): Promise { + return this.getProvider(network).testInvoke(script); } public async getFeePerByte(network: NetworkType): Promise { diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index c0ca0d1d99..4bb0584655 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -42,7 +42,7 @@ export function convertStackItem(item: StackItemJSON): RawStackItem { case 'Buffer': return { type: 'Buffer', value: Buffer.from(item.value, 'hex') }; case 'ByteString': - return { type: 'ByteString', value: Buffer.from(item.value, 'hex') }; + return { type: 'ByteString', value: item.value }; case 'Array': return { type: 'Array', value: item.value.map(convertStackItem) }; case 'Map': diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index b017d6a7f2..87d32481df 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -120,7 +120,7 @@ export interface Provider { options?: GetOptions, ) => Promise; readonly getApplicationLogData: (network: NetworkType, hash: Hash256String) => Promise; - readonly testInvoke: (network: NetworkType, transaction: FeelessTransactionModel) => Promise; + readonly testInvoke: (network: NetworkType, script: Buffer) => Promise; readonly testTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; readonly call: ( network: NetworkType, @@ -206,7 +206,7 @@ export abstract class UserAccountProviderBase { } public async claim(options?: TransactionOptions): Promise { - const { from, attributes, networkFee } = this.getTransactionOptions(options); + const { from, attributes, maxNetworkFee, maxSystemFee, validBlockCount } = this.getTransactionOptions(options); return this.capture(async () => this.executeClaim(from, attributes, networkFee), { name: 'neo_claim', diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index f63e6bb7dd..92a8d54b98 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -52,7 +52,6 @@ import { HeaderIndexCache } from './HeaderIndexCache'; import { PersistingBlockchain } from './PersistingBlockchain'; import { utils } from './utils'; import { verifyWitnesses } from './verify'; -import { wrapExecuteScripts } from './wrapExecuteScripts'; const logger = createChild(nodeLogger, { service: 'blockchain' }); @@ -510,26 +509,6 @@ export class Blockchain { }); } - public invokeTransaction( - transaction: TTransaction, - gas: BN, - ): CallReceipt { - return this.vm.withApplicationEngine( - { - trigger: TriggerType.Application, - gas, - // container: transaction, - snapshot: 'main', - testMode: true, - }, - (engine) => { - engine.loadScript(transaction.script); - - return wrapExecuteScripts(engine); - }, - ); - } - private runEngineWrapper({ script, snapshot, diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index 367f4d5fa2..a789c885d2 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -36,6 +36,7 @@ const getApplicationExecuted = (engine: ApplicationEngine, container?: Verifiabl gasConsumed: engine.gasConsumed, stack: engine.resultStack, notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), + logs: engine.logs, }); const getCallReceipt = (engine: ApplicationEngine, container?: Verifiable) => ({ @@ -43,6 +44,7 @@ const getCallReceipt = (engine: ApplicationEngine, container?: Verifiable) => ({ 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) => { 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 cef4ad0b28..0000000000 --- a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { VMState } from '@neo-one/client-common'; -import { ApplicationEngine, CallReceipt } from '@neo-one/node-core'; - -export const wrapExecuteScripts = (applicationEngine: ApplicationEngine): CallReceipt => { - const result = applicationEngine.execute(); - if (result === VMState.HALT) { - return { - state: result, - gasConsumed: applicationEngine.gasConsumed, - stack: applicationEngine.resultStack, - notifications: applicationEngine.notifications, - }; - } - - return { - state: result, - gasConsumed: applicationEngine.gasConsumed, - stack: applicationEngine.resultStack, - notifications: [], - }; -}; diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 01abe6edbd..cc3ff5fefb 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -55,10 +55,6 @@ export interface Blockchain extends BlockchainStorage { readonly getFeePerByte: () => Promise; readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; - readonly invokeTransaction: ( - transaction: TTransaction, - gas: BN, - ) => CallReceipt; readonly testTransaction: (transaction: Transaction) => CallReceipt; readonly getVerificationCost: ( contractHash: UInt160, diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index d48b695462..150920e257 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -157,7 +157,7 @@ export const stackItemToJSON = (item: StackItem, context?: Set): Stac case StackItemType.ByteString: const byteString = assertByteStringStackItem(item); - return { type: 'ByteString', value: JSONHelper.writeBase64Buffer(byteString.getBuffer()) }; + return { type: 'ByteString', value: byteString.getBuffer().toString('ascii') }; case StackItemType.Integer: const integer = assertIntegerStackItem(item); diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 2eb91a39db..17b83962e0 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,4 +1,4 @@ -import { TriggerType, UInt256, VMState } from '@neo-one/client-common'; +import { TriggerType, UInt256, VMState, Log, UInt160 } from '@neo-one/client-common'; import { BN } from 'bn.js'; import { Block } from './Block'; import { CallFlags } from './CallFlags'; @@ -7,11 +7,19 @@ import { SerializableContainer } from './Serializable'; import { StackItem } from './StackItems'; import { Transaction } from './transaction'; +export interface VMLog { + readonly containerHash?: UInt256; + readonly callingScriptHash: UInt160; + readonly message: string; + readonly position: number; +} + export interface CallReceipt { readonly state: VMState; readonly gasConsumed: BN; readonly stack: readonly StackItem[]; readonly notifications: readonly Notification[]; + readonly logs: readonly VMLog[]; } export type SnapshotName = 'main' | 'clone'; @@ -40,6 +48,7 @@ export interface ApplicationEngine { readonly resultStack: readonly StackItem[]; readonly state: VMState; readonly notifications: readonly StackItem[]; + readonly logs: readonly VMLog[]; readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; readonly execute: () => VMState; readonly setInstructionPointer: (position: number) => boolean; @@ -69,6 +78,7 @@ export interface ApplicationExecuted { readonly gasConsumed: BN; readonly stack: readonly StackItem[]; readonly notifications: readonly Notification[]; + readonly logs: readonly VMLog[]; } export interface VM { diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index dac056a8b1..030f70bc37 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -10,254 +10,270 @@ namespace NEOONE { - partial class Dispatcher + partial class Dispatcher + { + + private enum ContainerType { + Block, + Transaction, + Signers, + ConsensusPayload, + } - private enum ContainerType - { - Block, - Transaction, - Signers, - ConsensusPayload, - } + private IVerifiable deserializeContainer(dynamic args) + { + byte[] serializedContainer = (byte[])args.buffer; + string typeIn = (string)args.type; + IVerifiable container; - 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; - } + 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"); } - - private enum EngineMethod + using (MemoryStream ms = new MemoryStream(serializedContainer)) + using (BinaryReader reader = new BinaryReader(ms)) { - create, - execute, - loadscript, - setinstructionpointer, - getvmstate, - getresultstack, - gettrigger, - getgasconsumed, - getnotifications, - dispose_engine, + container.Deserialize(reader); } - private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) - { - switch (method) - { - case EngineMethod.create: - TriggerType trigger = (TriggerType)args.trigger; - long gas = long.Parse((string)args.gas); - bool testMode = (bool)args.testMode; - IVerifiable container = null; - if (args.container != null) - { - container = deserializeContainer(args.container); - } - return this._create(trigger, container, this.selectSnapshot(args.snapshot, false), gas, testMode); - - case EngineMethod.execute: - return this._execute(); - - case EngineMethod.loadscript: - Script script = new Script((byte[])args.script); - CallFlags flag = (CallFlags)((byte)args.flag); - return this._loadScript(script, flag); - - case EngineMethod.setinstructionpointer: - int position = (int)args.position; - return this._setInstructionPointer(position); - - 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.dispose_engine: - this.disposeEngine(); - - return true; - - default: - throw new InvalidOperationException(); - } - } + return container; + } - private void disposeEngine() - { - if (this.engine != null) - { - this.engine.Dispose(); - this.engine = null; - } - } + throw new ArgumentException($"{typeIn} is not a valid container type"); + } - private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas, bool testMode = false) - { - this.disposeEngine(); - this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); + private enum EngineMethod + { + create, + execute, + loadscript, + setinstructionpointer, + getvmstate, + getresultstack, + gettrigger, + getgasconsumed, + getnotifications, + getlogs, + dispose_engine, + } - return true; - } + private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) + { + switch (method) + { + case EngineMethod.create: + TriggerType trigger = (TriggerType)args.trigger; + long gas = long.Parse((string)args.gas); + bool testMode = (bool)args.testMode; + IVerifiable container = null; + if (args.container != null) + { + container = deserializeContainer(args.container); + } + return this._create(trigger, container, this.selectSnapshot(args.snapshot, false), gas, testMode); - private VMState _execute() - { - this.isEngineInitialized(); - return this.engine.Execute(); - } + case EngineMethod.execute: + return this._execute(); - private bool _loadScript(Script script, CallFlags flag) - { - this.isEngineInitialized(); - this.engine.LoadScript(script, flag); - return true; - } + case EngineMethod.loadscript: + Script script = new Script((byte[])args.script); + CallFlags flag = (CallFlags)((byte)args.flag); + return this._loadScript(script, flag); - private bool _setInstructionPointer(int initialPosition) - { - this.isEngineInitialized(); - this.engine.CurrentContext.InstructionPointer = initialPosition; + case EngineMethod.setinstructionpointer: + int position = (int)args.position; + return this._setInstructionPointer(position); - return true; - } + case EngineMethod.getvmstate: + return this._getVMState(); - private VMState _getVMState() - { - return this.engine != null ? this.engine.State : VMState.BREAK; - } + case EngineMethod.getresultstack: + return this._getResultStack(); - private dynamic[] _getResultStack() - { - return this.engine != null ? this.engine.ResultStack.Select((StackItem p) => ReturnHelpers.convertStackItem(p)).ToArray() : new dynamic[0]; - } + case EngineMethod.gettrigger: + return this._getTrigger(); - private TriggerType _getTrigger() - { - this.isEngineInitialized(); - return this.engine.Trigger; - } + case EngineMethod.getgasconsumed: + return this._getGasConsumed(); - private dynamic _getContainer() - { - this.isEngineInitialized(); - return this.engine.ScriptContainer; - } + case EngineMethod.getnotifications: + return this._getNotifications(); - private string _getGasConsumed() - { - return this.engine != null ? this.engine.GasConsumed.ToString() : "0"; - } + case EngineMethod.getlogs: + return this._getLogs(); - 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(); - } + case EngineMethod.dispose_engine: + this.disposeEngine(); - private bool isEngineInitialized() - { - if (this.engine == null) - { - throw new InvalidOperationException("Can't invoke an engine method without creating the engine"); - } + return true; - return true; - } + default: + throw new InvalidOperationException(); + } } - internal class Signers : IVerifiable + private void disposeEngine() { - private Signer[] _signers; - public Witness[] Witnesses { get; set; } - public int Size { get; } + if (this.engine != null) + { + this.engine.Dispose(); + this.engine = null; + } + } - public Signers(Signer[] signers) - { - _signers = signers; - } + private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas, bool testMode = false) + { + this.disposeEngine(); + this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); - public Signers() - { + return true; + } - } + private VMState _execute() + { + this.isEngineInitialized(); + return this.engine.Execute(); + } - public void Serialize(BinaryWriter writer) - { - throw new NotImplementedException(); - } + private bool _loadScript(Script script, CallFlags flag) + { + this.isEngineInitialized(); + this.engine.LoadScript(script, flag); + return true; + } - public void Deserialize(BinaryReader reader) - { - _signers = reader.ReadSerializableArray(); - } + private bool _setInstructionPointer(int initialPosition) + { + this.isEngineInitialized(); + this.engine.CurrentContext.InstructionPointer = initialPosition; - public void DeserializeUnsigned(BinaryReader reader) - { - throw new NotImplementedException(); - } + return true; + } - public Neo.UInt160[] GetScriptHashesForVerifying(StoreView snapshot) - { - return _signers.Select(p => p.Account).ToArray(); - } + private VMState _getVMState() + { + return this.engine != null ? this.engine.State : VMState.BREAK; + } - public Signer[] GetSigners() - { - return _signers; - } + private dynamic[] _getResultStack() + { + return this.engine != null ? this.engine.ResultStack.Select((StackItem p) => ReturnHelpers.convertStackItem(p)).ToArray() : new dynamic[0]; + } - public void SerializeUnsigned(BinaryWriter writer) - { - throw new NotImplementedException(); - } + 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.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index 284ce6f2db..85c5d6c56f 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -15,7 +15,7 @@ - + diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index dfe3ca28e5..4e26a05a73 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -3,165 +3,189 @@ 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 ReturnHelpers + { + public class PrimitiveReturn { - 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 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 KeyValueReturn(PrimitiveReturn key, dynamic value) - { - this.key = key; - this.value = value; - } - } + 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 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 ProtocolSettingsReturn + 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) => { - 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 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; - } - } + 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 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; + } } + } } diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index fad29e8cd7..38296b05c1 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -2,7 +2,7 @@ import { TriggerType, VMState } from '@neo-one/client-common'; import { CallFlags, SerializableContainer, serializeScriptContainer, SnapshotName } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { parseStackItems } from './converters'; +import { parseStackItems, convertLog } from './converters'; import { EngineMethods } from './Methods'; import { DispatcherFunc } from './types'; @@ -71,6 +71,12 @@ export class ApplicationEngine { ); } + public get logs() { + return this.dispatch({ + method: 'getlogs', + }).map(convertLog); + } + public create({ trigger, container, gas, snapshot, testMode }: CreateOptions) { return this.dispatch({ method: 'create', diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 86da4e3e5d..79fd4e3b75 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,6 +1,6 @@ import { TriggerType, VMState } from '@neo-one/client-common'; import { CallFlags, SerializedScriptContainer, SnapshotName } from '@neo-one/node-core'; -import { StackItemReturn } from '../converters'; +import { StackItemReturn, LogReturn } from '../converters'; import { DefaultMethods, DispatchMethod } from '../types'; interface CreateEngineArgs { @@ -20,6 +20,7 @@ export interface EngineMethods extends DefaultMethods { readonly getvmstate: DispatchMethod; readonly getresultstack: DispatchMethod; readonly getnotifications: DispatchMethod; + readonly getlogs: DispatchMethod; // methods readonly execute: DispatchMethod; readonly setinstructionpointer: DispatchMethod; diff --git a/packages/neo-one-node-vm/src/converters/index.ts b/packages/neo-one-node-vm/src/converters/index.ts index 432b3f15ce..7ffd048320 100644 --- a/packages/neo-one-node-vm/src/converters/index.ts +++ b/packages/neo-one-node-vm/src/converters/index.ts @@ -1,2 +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/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index f48a270745..85e0f83b90 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,6 +1,14 @@ -import { common, crypto, JSONHelper } from '@neo-one/client-common'; +import { common, crypto, JSONHelper, ScriptBuilder } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { Nep5BalanceKey, StorageKey, StreamOptions, TrimmedBlock, utils } from '@neo-one/node-core'; +import { + Nep5BalanceKey, + StorageKey, + StreamOptions, + TrimmedBlock, + utils, + ContractState, + VMLog, +} from '@neo-one/node-core'; import { KeyBuilder, NativeContainer, NEOAccountState } 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'; @@ -16,12 +24,16 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re new Promise((resolve, reject) => { db.createReadStream(options) .on('data', (data: any) => { - console.log(data.key); + console.log(common.uInt160ToString(data.key.slice(1))); console.log( - TrimmedBlock.deserializeWire({ - context: { messageMagic: 7630401, validatorsCount: 1 }, - buffer: data.value, - }).serializeJSON({ addressVersion: common.NEO_ADDRESS_VERSION }), + JSON.stringify( + ContractState.deserializeWire({ + context: { messageMagic: 1951352142, validatorsCount: 1 }, + buffer: data.value, + }).serializeJSON(), + undefined, + 2, + ), ); }) .on('error', reject) @@ -29,66 +41,41 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re .on('end', resolve); }); -describe('Blockchain storage works', () => { - test.only('Blockchain can persist and retrieve blocks', async () => { - // const blockchainSettings = createTest(); - const levelDBPath = '/Users/danielbyrne/Desktop/consensus-node-data'; +describe('Blockchain invocation / storage tests', () => { + test.only('dispatcher can retrieve logs after invocation', async () => { + const blockchainSettings = createTest(); + const levelDBPath = '/Users/danielbyrne/Desktop/node-data'; const db = LevelUp(RocksDB(levelDBPath)); const storage = levelupStorage({ db, - context: { messageMagic: 7630401, validatorsCount: 1 }, + context: { + messageMagic: blockchainSettings.messageMagic, + validatorsCount: blockchainSettings.validatorsCount, + }, }); - await rawReadStreamPromise(db, { gte: Buffer.from([0x01]), lte: Buffer.from([0x02]) }); - - // const blocks = await storage.blocks.all$.pipe(toArray()).toPromise(); - - // blocks.forEach((block) => console.log(block.hashHex)); - // await rawReadStreamPromise(db, { gte: Buffer.from([0x00]), lte: Buffer.from([0xff]) }); - // const dispatcher = new Dispatcher({ - // levelDBPath, - // protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), - // }); - - // const native = new NativeContainer(blockchainSettings); - - // const blockchain = await Blockchain.create({ - // settings: blockchainSettings, - // storage, - // vm: dispatcher, - // native, - // }); + const dispatcher = new Dispatcher({ + levelDBPath, + protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), + }); - // const sc = '0xf813c2cc8e18bbe4b3b87f8ef9105b50bb93918e'; - // const scriptHash = common.stringToUInt160(sc).reverse(); + const native = new NativeContainer(blockchainSettings); - // const timeIn = Buffer.from('830ce2c273010000', 'hex'); + const blockchain = await Blockchain.create({ + settings: blockchainSettings, + storage, + vm: dispatcher, + native, + }); - // const gte = Buffer.concat([scriptHash, timeIn]); - // const lte = Buffer.concat([scriptHash, new BN(Date.now(), 'le').toBuffer()]); - }); + const builder = new ScriptBuilder(); + builder.emitSysCall('System.Runtime.Log', 'Hello world!'); + const script = builder.build(); - test('', () => { - const validators = [ - '023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d', - '03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2', - '02ba2c70f5996f357a43198705859fae2cfea13e1172962800772b3d588a9d4abd', - '03408dcd416396f64783ac587ea1e1593c57d9fea880c8a6a1920e92a259477806', - '02a7834be9b32e2981d157cb5bbd3acb42cfd11ea5c3b10224d7a44e98c5910f1b', - '0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01', - '030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba', - ].map(common.stringToECPoint); + const result = blockchain.invokeScript(script); - const testHash = crypto.toScriptHash( - crypto.createMultiSignatureVerificationScript(validators.length - (validators.length - 1) / 3, validators), - ); - const anotherHash = crypto.toScriptHash( - crypto.createMultiSignatureVerificationScript(validators.length / 2 + 1, validators), - ); - console.log(common.uInt160ToHex(testHash)); - console.log(common.uInt160ToHex(anotherHash)); - console.log(crypto.scriptHashToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, scriptHash: testHash })); - console.log(crypto.scriptHashToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, scriptHash: anotherHash })); + expect(result.logs.length).toEqual(1); + expect(result.logs[0].message).toEqual('Hello world!'); }); }); From 762dc1beba488de155dafa709b7cd9ada945299f Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 15 Dec 2020 13:25:11 -0800 Subject: [PATCH 136/141] fix(node): fixup byteStringStackItem toJSON return value (#2264) --- packages/neo-one-client-core/src/provider/convert.ts | 2 +- packages/neo-one-node-core/src/StackItems/StackItems.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index 4bb0584655..c4e4351195 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -42,7 +42,7 @@ export function convertStackItem(item: StackItemJSON): RawStackItem { case 'Buffer': return { type: 'Buffer', value: Buffer.from(item.value, 'hex') }; case 'ByteString': - return { type: 'ByteString', value: item.value }; + return { type: 'ByteString', value: Buffer.from(item.value, 'base64').toString('ascii') }; case 'Array': return { type: 'Array', value: item.value.map(convertStackItem) }; case 'Map': diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts index 150920e257..982e81e1aa 100644 --- a/packages/neo-one-node-core/src/StackItems/StackItems.ts +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -157,7 +157,7 @@ export const stackItemToJSON = (item: StackItem, context?: Set): Stac case StackItemType.ByteString: const byteString = assertByteStringStackItem(item); - return { type: 'ByteString', value: byteString.getBuffer().toString('ascii') }; + return { type: 'ByteString', value: byteString.getBuffer().toString('base64') }; case StackItemType.Integer: const integer = assertIntegerStackItem(item); From 5215156135196caec62d9686d6d0538312186633 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Mon, 28 Dec 2020 15:06:43 -0800 Subject: [PATCH 137/141] feat(test): fixup 'createNode' in @neo-one/smart-contract-test (#2266) --- packages/neo-one-build-tools/types/unit.d.ts | 6 + .../neo-one-client-common/src/models/types.ts | 1 + packages/neo-one-client-common/src/types.ts | 1 + packages/neo-one-client-core/src/Client.ts | 4 +- .../user/LocalUserAccountProvider.test.ts | 62 ++- packages/neo-one-client-core/src/args.ts | 27 +- .../src/provider/NEOONEDataProvider.ts | 1 + .../src/provider/NEOONEProvider.ts | 5 +- .../src/user/LocalUserAccountProvider.ts | 47 +-- .../src/user/UserAccountProviderBase.ts | 27 +- .../neo-one-node-blockchain/src/Blockchain.ts | 21 +- packages/neo-one-node-core/src/Storage.ts | 2 +- packages/neo-one-node-core/src/vm.ts | 1 + .../src/createHandler.ts | 1 + .../neo-one-node-storage-levelup/src/index.ts | 1 + .../src/levelUpStorage.ts | 12 +- .../lib/Dispatcher.Snapshot.cs | 399 +++++++++--------- .../lib/Dispatcher.TestHelper.cs | 57 +++ packages/neo-one-node-vm/lib/Dispatcher.cs | 384 ++++++++--------- .../neo-one-node-vm/lib/SnapshotHelpers.cs | 90 ++-- .../lib/Storage/RocksDB/Options.cs | 36 +- .../lib/Storage/RocksDB/RocksDBStore.cs | 22 +- .../lib/Storage/RocksDB/Settings.cs | 14 +- .../lib/Storage/RocksDB/Snapshot.cs | 108 ++--- .../lib/Storage/RocksDB/Store.cs | 128 +++--- packages/neo-one-node-vm/src/Dispatcher.ts | 26 +- .../src/Methods/TestMethods.ts | 15 + packages/neo-one-node-vm/src/Methods/index.ts | 1 + packages/neo-one-node/package.json | 4 +- packages/neo-one-node/src/__data__/data.ts | 16 +- .../src/__tests__/blockchain.test.ts | 70 ++- packages/neo-one-node/src/startFullNode.ts | 30 +- .../package.json | 1 + .../src/__data__/helpers/executeScript.ts | 15 +- .../src/__data__/helpers/extractors.ts | 28 +- .../src/__data__/helpers/startNode.ts | 33 +- .../src/__data__/tokenUtils.ts | 5 +- .../src/__tests__/createNode.test.ts | 68 +++ .../src/createNode.ts | 5 +- .../neo-one-smart-contract-test/src/index.ts | 1 + 40 files changed, 1028 insertions(+), 747 deletions(-) create mode 100644 packages/neo-one-build-tools/types/unit.d.ts create mode 100644 packages/neo-one-node-vm/lib/Dispatcher.TestHelper.cs create mode 100644 packages/neo-one-node-vm/src/Methods/TestMethods.ts create mode 100644 packages/neo-one-smart-contract-test/src/__tests__/createNode.test.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-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 33009db8cc..4d751a5af8 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -457,6 +457,7 @@ export interface TrimmedBlockJSON extends BlockBaseJSON { } export interface NetworkSettingsJSON { + readonly blockcount: number; readonly decrementinterval: number; readonly generationamount: readonly number[]; readonly privatekeyversion: number; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 2bc19ac154..0693bc9b73 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -2437,6 +2437,7 @@ export type ParamJSON = * Constant settings used to initialize the client APIs. */ export interface NetworkSettings { + readonly blockCount: number; readonly decrementInterval: number; readonly generationAmount: readonly number[]; readonly privateKeyVersion: number; diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index 65e9e82c0e..d83b65228f 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -645,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/__tests__/user/LocalUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts index 2427ad19e9..02e5949361 100644 --- a/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -1,7 +1,7 @@ -import { common, crypto, ScriptBuilder } from '@neo-one/client-common'; +import { common, crypto } from '@neo-one/client-common'; import { constants } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; -import { NEOONEProvider, NEOONEDataProvider } from '../../provider'; +import { NEOONEProvider } from '../../provider'; import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../../user'; const secondaryKeyString = '04c1784140445016cf0f8cc86dd10ad8764e1a89c563c500e21ac19a5d905ab3'; @@ -138,25 +138,71 @@ describe.skip('Test LocalUserAccountProvider transfer methods -- staging network 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('contract info / usage testing', () => { +describe.skip('contract info / usage testing', () => { const knownContractHashString = '0x79597a92440ce385fe1b0f4d9d2a92ca8608a575'; - const knownContractHash = common.stringToUInt160(knownContractHashString); const providerOptions = { network: 'test', - rpcURL: 'http://localhost:8081/rpc', + rpcURL: 'https://staging.neotracker.io/rpc', }; const provider = new NEOONEProvider([providerOptions]); - test('use `call` to get name of NEO contract', async () => { - const result = await provider.call('test', common.nativeScriptHashes.NEO, 'name', []); + 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('NEO'); + expect(value.value).toEqual('S3 Plus'); }); }); diff --git a/packages/neo-one-client-core/src/args.ts b/packages/neo-one-client-core/src/args.ts index 8c8d3cd1a5..d5288b2750 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -112,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); @@ -798,7 +814,6 @@ export const assertContractManifest = (name: string, value?: unknown): ContractM } return { - hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160Hex), groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => assertContractGroup('ContractManifest.groups', group), ), @@ -950,7 +965,7 @@ export const assertTransfer = (name: string, value?: unknown): Transfer => { return { amount: assertProperty(value, 'Transfer', 'amount', assertBigNumber), - asset: assertProperty(value, 'Transfer', 'asset', assertAddress), + asset: assertProperty(value, 'Transfer', 'asset', tryGetUInt160Hex), to: assertProperty(value, 'Transfer', 'to', assertAddress), }; }; @@ -1009,8 +1024,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), }; }; @@ -1034,13 +1049,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/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 88424500e1..350b66f225 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -481,6 +481,7 @@ export class NEOONEDataProvider implements DeveloperProvider { private convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { return { + blockCount: settings.blockcount, decrementInterval: settings.decrementinterval, generationAmount: settings.generationamount, privateKeyVersion: settings.privatekeyversion, diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index bfeb50b0f9..b2bd704da6 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -15,6 +15,7 @@ import { Transaction, TransactionModel, TransactionReceipt, + UInt160Hex, } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BehaviorSubject, Observable } from 'rxjs'; @@ -86,7 +87,7 @@ export class NEOONEProvider implements Provider { public async getVerificationCost( network: NetworkType, - hash: AddressString, + hash: UInt160Hex, transaction: TransactionModel, ): Promise<{ readonly fee: BigNumber; @@ -101,7 +102,7 @@ export class NEOONEProvider implements Provider { public async call( network: NetworkType, - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, ): Promise { diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 4a83a7e078..495cfd1938 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -403,10 +403,7 @@ export class LocalUserAccountProvider { sb.emitAppCall( @@ -426,7 +423,7 @@ export class LocalUserAccountProvider { - const toAccount = this.getUserAccount(from); - const unclaimedAmount = await this.provider.getUnclaimed(from.network, from.address); - const toHash = crypto.toScriptHash(crypto.createSignatureRedeemScript(common.stringToECPoint(toAccount.publicKey))); - const script = new ScriptBuilder() - .emitAppCall(common.nativeHashes.GAS, 'transfer', [ - addressToScriptHash(from.address), - common.nativeHashes.GAS, - unclaimedAmount.toString(), - ]) - .build(); - - const [{ gas }, { count, messageMagic }] = await Promise.all([ - this.getSystemFee({ from, attributes, script }), - this.getCountAndMagic(from), - ]); + const transfer: Transfer = { + to: from.address, + asset: common.nativeScriptHashes.NEO, + amount: new BigNumber(0), + }; - const transaction = new TransactionModel({ - systemFee: utils.bigNumberToBN(gas, 8), // TODO: check this. check decimals - networkFee: utils.bigNumberToBN(networkFee, 8), // TODO: check decimals - script, - attributes: this.convertAttributes(attributes), - messageMagic, - validUntilBlock: count + 240, - }); - - return this.sendTransaction({ - from, - transaction, - onConfirm: async ({ receipt }) => receipt, - networkFee, - }); + return this.executeTransfer([transfer], from, attributes, maxNetworkFee, maxSystemFee, validBlockCount); } // TODO: see invokeScript and invokeFunction in neo-modules diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 87d32481df..f2fe69dba3 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -6,7 +6,6 @@ import { AttributeModel, Block, common, - FeelessTransactionModel, ForwardValue, GetOptions, Hash256String, @@ -21,8 +20,6 @@ import { RawInvocationData, RawInvokeReceipt, ScriptBuilderParam, - Signer, - SignerModel, SourceMaps, Transaction, TransactionModel, @@ -30,16 +27,15 @@ import { TransactionReceipt, TransactionResult, Transfer, - UInt160, UserAccount, UserAccountID, utils, Witness, WitnessModel, + UInt160Hex, } from '@neo-one/client-common'; import { Labels, utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; -import { BN } from 'bn.js'; import debug from 'debug'; import { Observable } from 'rxjs'; import { clientUtils } from '../clientUtils'; @@ -124,7 +120,7 @@ export interface Provider { readonly testTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; readonly call: ( network: NetworkType, - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, ) => Promise; @@ -136,7 +132,7 @@ export interface Provider { readonly getAccount: (network: NetworkType, address: AddressString) => Promise; readonly getVerificationCost: ( network: NetworkType, - hash: AddressString, + hash: UInt160Hex, transaction: TransactionModel, ) => Promise<{ readonly fee: BigNumber; @@ -208,7 +204,7 @@ export abstract class UserAccountProviderBase { 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', }); } @@ -658,7 +654,9 @@ export abstract class UserAccountProviderBase { protected abstract async executeClaim( from: UserAccountID, attributes: readonly Attribute[], - networkFee: BigNumber, + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number, ): Promise; protected async invokeRaw({ @@ -725,17 +723,6 @@ export abstract class UserAccountProviderBase { ); } - protected async getCountAndMagic( - network: NetworkType, - ): Promise<{ readonly count: number; readonly messageMagic: number }> { - const [count, { messageMagic }] = await Promise.all([ - this.provider.getBlockCount(network), - this.provider.getNetworkSettings(network), - ]); - - return { count, messageMagic }; - } - private getScriptAndInvokeMethodOptions( invokeMethodOptionsOrScript: InvokeMethodOptions | Buffer, ): { readonly script: Buffer; readonly invokeMethodOptions: InvokeMethodOptions | undefined } { diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 92a8d54b98..c0cba7b63e 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -61,6 +61,7 @@ export interface CreateBlockchainOptions { readonly storage: Storage; readonly native: NativeContainer; readonly vm: VM; + readonly onPersist?: () => void | Promise; } export interface BlockchainOptions extends CreateBlockchainOptions { @@ -119,7 +120,13 @@ export const recoverHeaderIndex = async (storage: Storage) => { }); }; export class Blockchain { - public static async create({ settings, storage, native, vm }: CreateBlockchainOptions): Promise { + 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); @@ -137,6 +144,7 @@ export class Blockchain { native, vm, currentBlock, + onPersist, }); } @@ -146,6 +154,7 @@ export class Blockchain { storage, native, vm, + onPersist, }); await blockchain.persistBlock({ block: settings.genesisBlock }); @@ -164,6 +173,7 @@ export class Blockchain { private readonly storage: Storage; 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, @@ -190,6 +200,7 @@ export class Blockchain { validatorsCount: this.settings.validatorsCount, }; this.mutableCurrentBlock = options.currentBlock; + this.onPersist = options.onPersist === undefined ? this.vm.updateSnapshots : options.onPersist; this.start(); } @@ -288,9 +299,9 @@ export class Blockchain { return this.storage.contractID; } - public get consensusState() { - return this.storage.consensusState; - } + // public get consensusState() { + // return this.storage.consensusState; + // } public get serializeJSONContext() { return { @@ -784,7 +795,7 @@ export class Blockchain { const applicationLogUpdates = this.updateApplicationLogs({ applicationsExecuted, block }); await this.storage.commit(applicationLogUpdates); - this.vm.updateSnapshots(); + await this.onPersist(); } private createPersistingBlockchain(): PersistingBlockchain { diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 859a8fd005..2cefae8ca9 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -132,7 +132,7 @@ export interface BlockchainStorage { readonly nep5TransfersSent: ReadFindStorage; readonly nep5TransfersReceived: ReadFindStorage; readonly applicationLogs: ReadStorage; - readonly consensusState: ReadMetadataStorage; + // readonly consensusState: ReadMetadataStorage; readonly transactions: ReadStorage; readonly contracts: ReadStorage; readonly storages: ReadFindStorage; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 17b83962e0..1ed80d7449 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -91,4 +91,5 @@ export interface VM { readonly withSnapshots: ( func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, ) => T; + readonly updateStore: (storage: ReadonlyArray<{ key: Buffer; value: Buffer }>) => void; } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 4856f66009..35324bebd5 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -867,6 +867,7 @@ export const createHandler = ({ } = blockchain.settings; return { + blockcount: blockchain.currentBlockIndex + 1, decrementinterval: decrementInterval, generationamount: generationAmount, privatekeyversion: privateKeyVersion, 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 48fa3755a1..3d14a4f9a0 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,9 +1,7 @@ -import { common } from '@neo-one/client-common'; import { ApplicationLog, BinaryReader, BlockKey, - ConsensusContext, ContractIDState, ContractState, DeserializeWireContext, @@ -195,11 +193,11 @@ export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage deserializeValue: (buffer) => ContractIDState.deserializeWire({ context, buffer }), }), - consensusState: read.createReadMetadataStorage({ - db, - key: keys.consensusStateKey, - deserializeValue: (buffer) => ConsensusContext.deserializeWire({ context, buffer }), - }), + // consensusState: read.createReadMetadataStorage({ + // db, + // key: keys.consensusStateKey, + // deserializeValue: (buffer) => ConsensusContext.deserializeWire({ context, buffer }), + // }), async close(): Promise { await db.close(); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 8fe0efb52c..77c9d5f0ff 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -1,7 +1,6 @@ using System; using System.IO; using Neo; -using Neo.IO; using Neo.Ledger; using Neo.Network.P2P.Payloads; using Neo.Persistence; @@ -10,209 +9,209 @@ namespace NEOONE { - partial class Dispatcher + 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); + } + + var tmp = block.Hash.ToString(); + + 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); - private StoreView snapshot; - private StoreView clonedSnapshot; + return this._snapshotChangeHeaderHashIndex(this.selectSnapshot(args.snapshot), hIndex, headerChangeHash); - 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, - } + 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(); - 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); - } - - var tmp = block.Hash.ToString(); - - 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; - } + 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 index bbd9513fff..1c8b40de6d 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -8,219 +8,225 @@ namespace NEOONE { - public partial class Dispatcher + 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 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 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(); + private bool _init(string path, IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.path = path; + this.resetSnapshots(); - this.init = true; - } + this.init = true; + } - return this.init; - } + return this.init; + } - private bool _init(IConfiguration config) - { - if (!this.init) - { - Neo.ProtocolSettings.Initialize(config); - this.resetSnapshots(); + private bool _init(IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.resetSnapshots(); - this.init = true; - } + this.init = true; + } - return this.init; - } + return this.init; + } - private bool _init(string path) - { - if (!this.init) - { - this.path = path; - this.resetSnapshots(); + private bool _init(string path) + { + if (!this.init) + { + this.path = path; + this.resetSnapshots(); - this.init = true; - } + this.init = true; + } - return this.init; - } + return this.init; + } - private bool _init() - { - if (!this.init) - { - this.resetSnapshots(); + private bool _init() + { + if (!this.init) + { + this.resetSnapshots(); - this.init = true; - } + this.init = true; + } - return this.init; - } + 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 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 ApplicationEngine.Neo_Crypto_CheckMultisigWithECDsaSecp256r1.Hash.ToString(); - } + private dynamic _test() + { + return ApplicationEngine.Neo_Crypto_CheckMultisigWithECDsaSecp256r1.Hash.ToString(); + } - private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() - { - return new NEOONE.ReturnHelpers.ProtocolSettingsReturn(Neo.ProtocolSettings.Default); - } + 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); - } - - throw new ArgumentException($"{method} is not a valid dispatch method"); - } + 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(); + private bool hasArgs(dynamic input) + { + Type inputType = input.GetType(); - if (inputType == typeof(ExpandoObject)) - { - return ((IDictionary)input).ContainsKey("args"); - } + if (inputType == typeof(ExpandoObject)) + { + return ((IDictionary)input).ContainsKey("args"); + } - return inputType.GetProperty("args") != null; - } + return inputType.GetProperty("args") != null; + } - private IConfiguration parseConfig(dynamic input) + 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) { - 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(); + 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/SnapshotHelpers.cs b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs index c5e22cec22..79cfe7c76c 100644 --- a/packages/neo-one-node-vm/lib/SnapshotHelpers.cs +++ b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs @@ -4,55 +4,55 @@ namespace NEOONE { - interface CommitStore + interface CommitStore + { + void Commit(); + } + + public class ChangeSet + { + public List set = new List(); + public ChangeSet(StoreView snapshot) { - void Commit(); + 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.Contracts.GetChangeSet()) + { + set.Add(new Change("contract", 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 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.Contracts.GetChangeSet()) - { - set.Add(new Change("contract", 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 class Change + { + public string type; + public string itemType; + public byte[] key; + public byte[] value; + public Change(string itemType, dynamic 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; - } + 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 index af079a460c..f155db653a 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs @@ -2,24 +2,24 @@ 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 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; - } + 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 index 115645b310..0edca66d1f 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs @@ -3,19 +3,19 @@ namespace NEOONE.Storage { - public class RocksDBStore - { - private string path; + public class RocksDBStore + { + private string path; - public RocksDBStore(string path) - { - this.path = path; - } + public RocksDBStore(string path) + { + this.path = path; + } - public IStore GetStore() - { - return new Store(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 index 0d5c7e3607..e904e3cc2a 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs @@ -1,12 +1,12 @@ namespace NEOONE.Storage.RocksDB { - class Settings - { - public string Path { get; } + class Settings + { + public string Path { get; } - public Settings(string path) - { - this.Path = path; - } + 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 index bb5c50821a..007ca64de5 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -6,70 +6,70 @@ 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; + 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(); + 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); - } + options = new ReadOptions(); + options.SetFillCache(false); + options.SetSnapshot(snapshot); + } - public void Commit() - { - throw new InvalidOperationException(); - } + public void Commit() + { + throw new InvalidOperationException(); + } - public void Delete(byte table, byte[] key) - { - 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 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(); + 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); + 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(), it.Value()); - else - for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) - yield return (it.Key(), it.Value()); - } + if (direction == SeekDirection.Forward) + for (it.Seek(fullKey); it.Valid() && it.Key()[0] == table; it.Next()) + yield return (it.Key(), it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) + yield return (it.Key(), 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 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); - // Console.WriteLine($"trying to get from rocksdb store, key: {BitConverter.ToString(fullKey)}"); - return db.Get(fullKey ?? Array.Empty(), store.defaultFamily, options); - } + public byte[] TryGet(byte table, byte[] key) + { + byte[] fullKey = key == null ? new byte[] { table } : store.getFullKey(table, key); + // Console.WriteLine($"trying to get from rocksdb store, key: {BitConverter.ToString(fullKey)}"); + return db.Get(fullKey ?? Array.Empty(), store.defaultFamily, options); + } - public void Dispose() - { - snapshot.Dispose(); - } + 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 index 338e95a50a..b6eb31f2d8 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs @@ -8,82 +8,82 @@ namespace NEOONE.Storage.RocksDB { - internal class Store : IStore + internal class Store : IStore + { + private readonly RocksDb db; + public readonly ColumnFamilyHandle defaultFamily; + public Store(string path) { - 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(); - } + var families = new ColumnFamilies(); + db = RocksDb.OpenReadOnly(Options.Default, Path.GetFullPath(path), families, false); + defaultFamily = db.GetDefaultColumnFamily(); + } - public void Dispose() - { - db.Dispose(); - } + public void Dispose() + { + db.Dispose(); + } - /// - /// Get family - /// - /// Table - /// Return column family - [MethodImpl(MethodImplOptions.AggressiveInlining)] + /// + /// Get family + /// + /// Table + /// Return column family + [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ISnapshot GetSnapshot() - { - return new Snapshot(this, db); - } + 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 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(); + 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.Next()) - yield return (it.Key(), it.Value()); - else - for (it.SeekForPrev(fullKey); it.Valid(); it.Prev()) - yield return (it.Key(), it.Value()); - } + byte[] fullKey = getFullKey(table, keyOrPrefix); + using var it = db.NewIterator(defaultFamily, Options.ReadDefault); + if (direction == SeekDirection.Forward) + for (it.Seek(fullKey); it.Valid(); it.Next()) + yield return (it.Key(), it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid(); it.Prev()) + yield return (it.Key(), 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 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 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 Delete(byte table, byte[] key) + { + throw new InvalidOperationException(); + } - public void Put(byte table, byte[] key, byte[] value) - { - 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(); - } + public void PutSync(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException(); } + } } diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts index 4e00288372..96c3f1af91 100644 --- a/packages/neo-one-node-vm/src/Dispatcher.ts +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -1,11 +1,18 @@ import * as nodePath from 'path'; import { ApplicationEngine, CreateOptions } from './ApplicationEngine'; -import { BaseMethods, EngineMethods, ProtocolSettings, ProtocolSettingsReturn, SnapshotMethods } from './Methods'; +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 {} +export interface DispatcherMethods extends BaseMethods, SnapshotMethods, EngineMethods, TestMethods {} const engineAssemblyOptions = { assemblyFile: nodePath.join(constants.CSHARP_APP_ROOT, 'Dispatcher.dll'), @@ -87,6 +94,21 @@ export class Dispatcher { }); } + 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({ 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/index.ts b/packages/neo-one-node-vm/src/Methods/index.ts index acbca381c9..09f6a76c85 100644 --- a/packages/neo-one-node-vm/src/Methods/index.ts +++ b/packages/neo-one-node-vm/src/Methods/index.ts @@ -1,3 +1,4 @@ export * from './BaseMethods'; export * from './EngineMethods'; export * from './SnapshotMethods'; +export * from './TestMethods'; diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index ae12f3757e..ec080fa20b 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -42,8 +42,10 @@ "@types/jest": "^24.0.18", "@types/leveldown": "^4.0.0", "@types/levelup": "^3.1.1", + "@types/memdown": "^3.0.0", "@types/rocksdb": "3.0.0", "bn.js": "^5.0.0", - "gulp": "~4.0.2" + "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 index e06fbf2bfb..6ab55b78de 100644 --- a/packages/neo-one-node/src/__data__/data.ts +++ b/packages/neo-one-node/src/__data__/data.ts @@ -3,7 +3,7 @@ import { Block, ConsensusData, Signer, Transaction, Witness } from '@neo-one/nod import { BN } from 'bn.js'; import { debugBlockJSON, genesisJSON, secondBlockJSON, thirdBlockJSON } from './jsonBlocks'; -const convertBlock = (json: BlockJSON) => +const convertBlock = (json: BlockJSON, messageMagic: number) => new Block({ version: json.version, previousHash: JSONHelper.readUInt256(json.previousblockhash), @@ -43,6 +43,7 @@ const convertBlock = (json: BlockJSON) => scopes: (signer.scopes as any) === 'FeeOnly' ? WitnessScopeModel.None : toWitnessScope(signer.scopes), }), ), + messageMagic, }), ), consensusData: json.consensusdata @@ -51,11 +52,12 @@ const convertBlock = (json: BlockJSON) => nonce: new BN(json.consensusdata.nonce, 16), }) : undefined, + messageMagic, }); -export const data = { - genesisBlock: convertBlock(genesisJSON as any), - secondBlock: convertBlock(secondBlockJSON as any), - thirdBlock: convertBlock(thirdBlockJSON as any), - debugBlock: convertBlock(debugBlockJSON as any), -}; +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/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index 85e0f83b90..ad2e704c56 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,24 +1,14 @@ -import { common, crypto, JSONHelper, ScriptBuilder } from '@neo-one/client-common'; +import { common, ScriptBuilder } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { - Nep5BalanceKey, - StorageKey, - StreamOptions, - TrimmedBlock, - utils, - ContractState, - VMLog, -} from '@neo-one/node-core'; -import { KeyBuilder, NativeContainer, NEOAccountState } from '@neo-one/node-native'; +import { ContractState } 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 { utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; import LevelUp from 'levelup'; import RocksDB from 'rocksdb'; -import { filter, map, toArray } from 'rxjs/operators'; -import { data } from '../__data__'; +import Memdown from 'memdown'; +import { getData } from '../__data__'; const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; readonly lte: Buffer }) => new Promise((resolve, reject) => { @@ -41,8 +31,8 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re .on('end', resolve); }); -describe('Blockchain invocation / storage tests', () => { - test.only('dispatcher can retrieve logs after invocation', async () => { +describe.skip('Blockchain invocation / storage tests', () => { + test('dispatcher can retrieve logs after invocation', async () => { const blockchainSettings = createTest(); const levelDBPath = '/Users/danielbyrne/Desktop/node-data'; const db = LevelUp(RocksDB(levelDBPath)); @@ -79,3 +69,49 @@ describe('Blockchain invocation / storage tests', () => { expect(result.logs[0].message).toEqual('Hello world!'); }); }); + +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 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, + }); + + const changes = await 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)); + }); + + dispatcher.updateStore(changes); + + await blockchain.persistBlock({ block: blockData.secondBlock }); + + expect(blockchain.currentBlockIndex).toEqual(1); + }); +}); diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index 768578f212..4c5c506317 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -6,13 +6,15 @@ 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 { 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 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'; @@ -38,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, @@ -52,17 +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 (!isMemoryStore) { + await fs.ensureDir(dataPath); + } if (telemetry !== undefined && telemetry.logging !== undefined && telemetry.logging.level !== undefined) { setGlobalLogLevel(telemetry.logging.level); } - const rocks = customLeveldown === undefined ? RocksDB(dataPath) : customLeveldown; + const level = customLeveldown === undefined ? RocksDB(dataPath) : customLeveldown; disposable = composeDisposable(disposable, async () => { await new Promise((resolve, reject) => { - rocks.close((err) => { + level.close((err) => { if (err) { reject(err); } else { @@ -72,8 +87,10 @@ export const startFullNode = async ({ }); }); + const db = LevelUp(level); + const storage = levelupStorage({ - db: LevelUp(rocks), + db, context: { messageMagic: blockchainSettings.messageMagic, validatorsCount: blockchainSettings.validatorsCount }, }); @@ -82,7 +99,7 @@ export const startFullNode = async ({ const native = new NativeContainer(blockchainSettings); const vm = new Dispatcher({ - levelDBPath: dataPath, + levelDBPath: isMemoryStore ? undefined : dataPath, protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); @@ -93,6 +110,7 @@ export const startFullNode = async ({ storage, native, vm, + onPersist: isMemoryStore ? getUpdateVMMemoryStore(vm, db) : undefined, }); disposable = composeDisposable(async () => blockchain.stop(), disposable); diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index 23810372b1..9c06c4f709 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -34,6 +34,7 @@ "@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", 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 dc1e38a478..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,17 +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'; @@ -21,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'; @@ -57,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; @@ -70,7 +70,7 @@ export interface TestNode { export interface Options { readonly script: Buffer; - readonly abi: ABI; + readonly abi: ContractABI; readonly diagnostics: ReadonlyArray; readonly ignoreWarnings?: boolean; } @@ -140,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 { @@ -156,7 +156,7 @@ export const startNode = async (outerOptions: StartNodeOptions = {}): Promise { @@ -207,7 +203,7 @@ export const startNode = async (outerOptions: StartNodeOptions = {}): Promise +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-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'; From 1d9c3dc2a0d4a30a8875b412705b708145de186b Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 29 Dec 2020 15:27:49 -0800 Subject: [PATCH 138/141] feat(sc): Update SC / Compiler changes to match preview4 changes (#2277) need this in for next PR work --- .../neo-one-client-common/src/models/types.ts | 6 +- .../neo-one-client-common/src/models/vm.ts | 4 + packages/neo-one-client-common/src/prices.ts | 16 +- packages/neo-one-client-common/src/types.ts | 78 +------ .../src/__data__/factory.ts | 10 +- .../src/__data__/verifyDataProvider.ts | 4 - packages/neo-one-client-core/src/args.ts | 14 -- packages/neo-one-client-core/src/nep5.ts | 7 - .../src/provider/NEOONEDataProvider.ts | 7 - .../src/user/LocalUserAccountProvider.ts | 1 + .../src/__data__/models.ts | 5 +- .../models/ContractFeaturesModel.test.ts | 46 ---- .../ContractFeaturesModel.test.ts.snap | 9 - .../ContractManifestModel.test.ts.snap | 4 - .../src/models/ContractStateModel.ts | 4 - .../models/manifest/ContractFeaturesModel.ts | 48 ----- .../models/manifest/ContractManifestModel.ts | 18 -- .../manifest/ContractMethodDescriptorModel.ts | 4 + .../src/user/LocalUserAccountProvider.ts | 6 +- packages/neo-one-client/src/index.ts | 1 - packages/neo-one-node-core/src/Prices.ts | 202 ------------------ packages/neo-one-node-core/src/index.ts | 1 - .../src/manifest/ContractManifest.ts | 5 - .../src/manifest/ContractMethodDescriptor.ts | 2 + .../src/compile/sb/BaseScriptBuilder.ts | 6 +- .../src/compile/types.ts | 3 +- 26 files changed, 33 insertions(+), 478 deletions(-) delete mode 100644 packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts delete mode 100644 packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap delete mode 100644 packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts delete mode 100644 packages/neo-one-node-core/src/Prices.ts diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 4d751a5af8..05fdfe479a 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -347,6 +347,7 @@ export interface ContractMethodDescriptorJSON { readonly parameters: readonly ContractParameterDefinitionJSON[]; readonly offset: number; readonly returntype: ContractParameterTypeJSON; + readonly safe: boolean; } export interface ContractEventDescriptorJSON { @@ -377,11 +378,6 @@ export interface ContractManifestJSON { readonly groups: readonly ContractGroupJSON[]; readonly permissions: readonly ContractPermissionJSON[]; readonly trusts: WildcardContainerJSON; - readonly safemethods: WildcardContainerJSON; - readonly features: { - readonly storage: boolean; - readonly payable: boolean; - }; readonly supportedstandards: readonly string[]; readonly extra?: JSONObject; } diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 9ea9278aa7..91fb9263eb 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -277,6 +277,10 @@ export enum SysCall { '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; diff --git a/packages/neo-one-client-common/src/prices.ts b/packages/neo-one-client-common/src/prices.ts index 3f92cefa78..4c4c94f3c7 100644 --- a/packages/neo-one-client-common/src/prices.ts +++ b/packages/neo-one-client-common/src/prices.ts @@ -81,7 +81,7 @@ const opCodePrices: Record = { [Op.REVERSE4]: new BigNumber(60), [Op.REVERSEN]: new BigNumber(400), [Op.INITSSLOT]: new BigNumber(400), - [Op.INITSLOT]: new BigNumber(800), + [Op.INITSLOT]: new BigNumber(1600), [Op.LDSFLD0]: new BigNumber(60), [Op.LDSFLD1]: new BigNumber(60), [Op.LDSFLD2]: new BigNumber(60), @@ -140,8 +140,8 @@ const opCodePrices: Record = { [Op.AND]: new BigNumber(200), [Op.OR]: new BigNumber(200), [Op.XOR]: new BigNumber(200), - [Op.EQUAL]: new BigNumber(200), - [Op.NOTEQUAL]: 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), @@ -167,8 +167,8 @@ const opCodePrices: Record = { [Op.MIN]: new BigNumber(200), [Op.MAX]: new BigNumber(200), [Op.WITHIN]: new BigNumber(200), - [Op.PACK]: new BigNumber(7000), - [Op.UNPACK]: new BigNumber(7000), + [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), @@ -178,11 +178,11 @@ const opCodePrices: Record = { [Op.SIZE]: new BigNumber(150), [Op.HASKEY]: new BigNumber(270000), [Op.KEYS]: new BigNumber(500), - [Op.VALUES]: new BigNumber(7000), + [Op.VALUES]: new BigNumber(270000), [Op.PICKITEM]: new BigNumber(270000), - [Op.APPEND]: new BigNumber(15000), + [Op.APPEND]: new BigNumber(270000), [Op.SETITEM]: new BigNumber(270000), - [Op.REVERSEITEMS]: new BigNumber(500), + [Op.REVERSEITEMS]: new BigNumber(270000), [Op.REMOVE]: new BigNumber(500), [Op.CLEARITEMS]: new BigNumber(400), [Op.ISNULL]: new BigNumber(60), diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 0693bc9b73..0d5f787018 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1321,6 +1321,10 @@ export interface ContractMethodDescriptorClient { * TODO: describe */ readonly returnType: ABIReturn; + /** + * flags this as a safe method callable by any source. + */ + readonly safe: boolean; /** * TODO: fill out description here */ @@ -1467,28 +1471,6 @@ export interface ContractGroup { readonly signature: BufferString; } -/** - * Flag which determines which features are available to a contract. - */ -export enum ContractFeatures { - /** - * Contract does not use any available features. - */ - NoProperty = 0x00, - /** - * Contract modifies blockchain storage. - */ - HasStorage = 0x01, - /** - * Contract can receive native assets. - */ - Payable = 0x04, - /** - * Contract modifies blockchain storage and can receive native assets. - */ - HasStoragePayable = 0x05, -} - export type WildcardContainer = readonly T[] | Wildcard; /** @@ -1514,8 +1496,8 @@ export interface ContractPermission { } /** - * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, - * it will be limited by its declared list of features and permissions. `ContractManifestClient` + * 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 { @@ -1527,13 +1509,6 @@ export interface ContractManifestClient { * Set of mutually trusted contracts. */ readonly groups: readonly ContractGroup[]; - /** - * The features field describes what features are available for the contract. - */ - readonly features: { - readonly storage: boolean; - readonly payable: boolean; - }; /** * The Neo Enhancement Proposals (NEPs) and other standards that this smart contract supports. */ @@ -1552,46 +1527,21 @@ export interface ContractManifestClient { * The trusts field is an array containing a set of contract hashes or group of public keys. */ readonly trusts: WildcardContainer; - /** - * The safeMethods field is an array containing a set of safe methods. - */ - readonly safeMethods: WildcardContainer; /** * Custom user-defined JSON object. */ readonly extra?: JSONObject; - /** - * True if the `Contract` modified blockchain storage. - */ - readonly hasStorage: boolean; - /** - * True if the `Contract` can receive native assets. - */ - readonly payable: boolean; } /** - * A manifest explicitly declares the features and permissions a Contract will use. Once deployed, - * it will be limited by its declared list of features and permissions. + * 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 features field describes what features are available for the contract. - */ - readonly features: { - /** - * True if the `Contract` modified blockchain storage. - */ - readonly storage: boolean; - /** - * True if the `Contract` can receive assets. - */ - readonly payable: boolean; - }; /** * The Neo Enhancement Proposals (NEPs) and other standards that this smart contract supports. */ @@ -1609,22 +1559,10 @@ export interface ContractManifest { * The trusts field is an array containing a set of contract hashes or group of public keys. */ readonly trusts: WildcardContainer; - /** - * The safeMethods field is an array containing a set of safe methods. - */ - readonly safeMethods: WildcardContainer; /** * Custom user-defined JSON object. */ readonly extra?: JSONObject; - /** - * True if the `Contract` modified blockchain storage. - */ - readonly hasStorage: boolean; - /** - * True if the `Contract` can receive assets. - */ - readonly payable: boolean; } declare const OpaqueTagSymbol: unique symbol; diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index 31624a78a3..c4c77fdf70 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -93,7 +93,7 @@ const createContractABIJSON = (options: Partial = {}): Contract }); const createManifestJSON = (options: Partial = {}): ContractManifestJSON => { - const { abi, features, ...optionsIn } = options; + const { abi, ...optionsIn } = options; return { hash: keys[0].scriptHashString, @@ -102,12 +102,6 @@ const createManifestJSON = (options: Partial = {}): Contra groups: [], // TODO permissions: [], // TODO trusts: '*', - safeMethods: '*', - features: { - storage: true, - payable: true, - ...features, - }, supportedStandards: [], // TODO ...optionsIn, }; @@ -120,8 +114,6 @@ const createContractJSON = (options: Partial = {}): ContractJSON = id: 0, script: data.buffers.b, manifest: createManifestJSON(manifest), - hasStorage: true, - payable: true, ...optionsIn, }; }; diff --git a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts index b14f47a22e..5e805e8de9 100644 --- a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts +++ b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts @@ -96,8 +96,6 @@ const verifyManifest = (manifest: ContractManifest, manifestJSON: ContractManife expect(manifest.hash).toEqual(scriptHashToAddress(manifestJSON.hash)); // TODO: hashHex expect(manifest.trusts).toEqual(manifestJSON.trusts); - expect(manifest.safeMethods).toEqual(manifestJSON.safeMethods); - expect(manifest.features).toEqual(manifestJSON.features); expect(manifest.supportedStandards).toEqual(manifestJSON.supportedStandards); expect(manifest.extra).toEqual(manifestJSON.extra); verifyAbi(manifest.abi, manifestJSON.abi); @@ -114,8 +112,6 @@ const verifyManifest = (manifest: ContractManifest, manifestJSON: ContractManife const verifyContract = (contract: Contract, contractJSON: ContractJSON, returnType = 'Buffer') => { expect(contract.id).toEqual(contractJSON.id); expect(contract.script).toEqual(contractJSON.script); - expect(contract.hasStorage).toEqual(contractJSON.hasStorage); - expect(contract.payable).toEqual(contractJSON.payable); verifyManifest(contract.manifest, contractJSON.manifest); }; diff --git a/packages/neo-one-client-core/src/args.ts b/packages/neo-one-client-core/src/args.ts index d5288b2750..80e64786cd 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -789,10 +789,6 @@ export const assertContractManifestClient = (name: string, value?: unknown): Con groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => assertContractGroup('ContractManifest.groups', group), ), - features: { - storage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), - payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), - }, supportedStandards: assertProperty(value, 'ContractManifest', 'supportedStandards', assertArray).map((std) => assertString('ContractManifest.supportedStandards', std), ), @@ -801,10 +797,7 @@ export const assertContractManifestClient = (name: string, value?: unknown): Con assertContractPermission('ContractManifest.permissions', permission), ), trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), - safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), - hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), - payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), }; }; @@ -817,10 +810,6 @@ export const assertContractManifest = (name: string, value?: unknown): ContractM groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => assertContractGroup('ContractManifest.groups', group), ), - features: { - storage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), - payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), - }, supportedStandards: assertProperty(value, 'ContractManifest', 'supportedStandards', assertArray).map((std) => assertString('ContractManifest.supportedStandards', std), ), @@ -829,10 +818,7 @@ export const assertContractManifest = (name: string, value?: unknown): ContractM assertContractPermission('ContractManifest.permissions', permission), ), trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), - safeMethods: assertWildcardContainerProperty(value, 'ContractManifest', 'safeMethods', assertString), extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), - hasStorage: assertProperty(value, 'ContractManifest', 'hasStorage', assertBoolean), - payable: assertProperty(value, 'ContractManifest', 'payable', assertBoolean), }; }; diff --git a/packages/neo-one-client-core/src/nep5.ts b/packages/neo-one-client-core/src/nep5.ts index fa54822a9f..1c7d428e0f 100644 --- a/packages/neo-one-client-core/src/nep5.ts +++ b/packages/neo-one-client-core/src/nep5.ts @@ -140,17 +140,10 @@ export const abi = (decimals: number): ContractABIClient => ({ export const manifest = (decimals: number): ContractManifestClient => ({ hash: common.uInt160ToString(blankHash), groups: [], - features: { - storage: true, - payable: true, - }, supportedStandards: [], abi: abi(decimals), permissions: [], trusts: '*', - safeMethods: '*', - hasStorage: true, - payable: true, }); export const getDecimals = async ( diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 350b66f225..c0ed5281b4 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -373,18 +373,11 @@ export class NEOONEDataProvider implements DeveloperProvider { private convertContractManifest(manifest: ContractManifestJSON): ContractManifest { return { groups: manifest.groups.map(this.convertContractGroup), - features: { - storage: manifest.features.storage, - payable: manifest.features.payable, - }, supportedStandards: manifest.supportedstandards, abi: this.convertContractABI(manifest.abi), permissions: manifest.permissions.map(this.convertContractPermission), trusts: manifest.trusts, - safeMethods: manifest.safemethods, extra: manifest.extra, - hasStorage: manifest.features.storage, - payable: manifest.features.payable, }; } diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 495cfd1938..f2e2a6dcce 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -412,6 +412,7 @@ export class LocalUserAccountProvider new ContractManifestModel({ groups, features, supportedStandards, abi, permissions, trusts, safeMethods }); +) => new ContractManifestModel({ groups, supportedStandards, abi, permissions, trusts }); export const contractModel = ( id = 1, diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts deleted file mode 100644 index 1fd5c61650..0000000000 --- a/packages/neo-one-client-full-common/src/__tests__/models/ContractFeaturesModel.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { assertContractFeature, getContractProperties, HasPayable, HasStorage } from '../../models'; - -describe('ContractFeaturesModel', () => { - test('isContractFeatures', () => { - expect(assertContractFeature(0)).toEqual(0); - expect(assertContractFeature(1)).toEqual(1); - expect(assertContractFeature(4)).toEqual(4); - expect(assertContractFeature(5)).toEqual(5); - - const assertThrowNeg1 = () => assertContractFeature(-1); - expect(assertThrowNeg1).toThrowErrorMatchingSnapshot(); - const assertThrow2 = () => assertContractFeature(2); - expect(assertThrow2).toThrowErrorMatchingSnapshot(); - const assertThrow3 = () => assertContractFeature(3); - expect(assertThrow3).toThrowErrorMatchingSnapshot(); - const assertThrow6 = () => assertContractFeature(6); - expect(assertThrow6).toThrowErrorMatchingSnapshot(); - }); - - test('getContractProperties', () => { - expect(getContractProperties({ hasStorage: false, payable: false })).toEqual(0); - expect(getContractProperties({ hasStorage: false, payable: true })).toEqual(4); - expect(getContractProperties({ hasStorage: true, payable: false })).toEqual(1); - expect(getContractProperties({ hasStorage: true, payable: true })).toEqual(5); - }); - - test('HasStorage', () => { - expect(HasStorage.has(0)).toEqual(false); - expect(HasStorage.has(1)).toEqual(true); - expect(HasStorage.has(2)).toEqual(false); - expect(HasStorage.has(3)).toEqual(false); - expect(HasStorage.has(4)).toEqual(false); - expect(HasStorage.has(5)).toEqual(true); - expect(HasStorage.has(6)).toEqual(false); - }); - - test('HasPayable', () => { - expect(HasPayable.has(0)).toEqual(false); - expect(HasPayable.has(1)).toEqual(false); - expect(HasPayable.has(2)).toEqual(false); - expect(HasPayable.has(3)).toEqual(false); - expect(HasPayable.has(4)).toEqual(true); - expect(HasPayable.has(5)).toEqual(true); - expect(HasPayable.has(6)).toEqual(false); - }); -}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap deleted file mode 100644 index 34676b5689..0000000000 --- a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractFeaturesModel.test.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ContractFeaturesModel isContractFeatures 1`] = `"Expected contract feature, found: -1"`; - -exports[`ContractFeaturesModel isContractFeatures 2`] = `"Expected contract feature, found: 2"`; - -exports[`ContractFeaturesModel isContractFeatures 3`] = `"Expected contract feature, found: 3"`; - -exports[`ContractFeaturesModel isContractFeatures 4`] = `"Expected contract feature, found: 6"`; 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 index 4a417d4526..84602f7915 100644 --- 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 @@ -30,10 +30,6 @@ Object { ], }, "extra": undefined, - "features": Object { - "payable": true, - "storage": true, - }, "groups": Array [ Object { "publicKey": "0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70", diff --git a/packages/neo-one-client-full-common/src/models/ContractStateModel.ts b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts index 7b2a75726c..ee418e1f6d 100644 --- a/packages/neo-one-client-full-common/src/models/ContractStateModel.ts +++ b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts @@ -12,16 +12,12 @@ export class ContractStateModel) { this.id = id; this.script = script; this.manifest = manifest; - this.hasStorage = manifest.hasStorage; - this.payable = manifest.payable; } public serializeWireBase(writer: BinaryWriter): void { diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts deleted file mode 100644 index fca7fd9d26..0000000000 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractFeaturesModel.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { InvalidContractFeatureError } from '../../errors'; - -export enum ContractFeaturesModel { - NoProperty = 0x00, - HasStorage = 0x01, - Payable = 0x04, - HasStoragePayable = 0x05, -} - -// tslint:disable-next-line variable-name -export const HasStorage = new Set([ContractFeaturesModel.HasStorage, ContractFeaturesModel.HasStoragePayable]); - -// tslint:disable-next-line variable-name -export const HasPayable = new Set([ContractFeaturesModel.Payable, ContractFeaturesModel.HasStoragePayable]); - -const isContractFeature = (value: number): value is ContractFeaturesModel => - // tslint:disable-next-line strict-type-predicates - ContractFeaturesModel[value] !== undefined; - -export const assertContractFeature = (value: number): ContractFeaturesModel => { - if (isContractFeature(value)) { - return value; - } - - throw new InvalidContractFeatureError(value); -}; - -export const getContractProperties = ({ - hasStorage, - payable, -}: { - readonly hasStorage: boolean; - readonly payable: boolean; -}): ContractFeaturesModel => { - if (hasStorage && payable) { - return ContractFeaturesModel.HasStoragePayable; - } - - if (hasStorage) { - return ContractFeaturesModel.HasStorage; - } - - if (payable) { - return ContractFeaturesModel.Payable; - } - - return ContractFeaturesModel.NoProperty; -}; 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 index 9f2a0fd509..ce1ca62f5d 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -14,7 +14,6 @@ import { } from '@neo-one/client-common'; import { JSONObject } from '@neo-one/utils'; import { ContractABIModel } from './ContractABIModel'; -import { ContractFeaturesModel, HasPayable, HasStorage } from './ContractFeaturesModel'; import { ContractGroupModel } from './ContractGroupModel'; import { ContractPermissionModel } from './ContractPermissionModel'; @@ -24,12 +23,10 @@ export interface ContractManifestModelAdd< TContractPermission extends ContractPermissionModel = ContractPermissionModel > { readonly groups: readonly TContractGroup[]; - readonly features: ContractFeaturesModel; readonly supportedStandards: readonly string[]; readonly abi: TContractABI; readonly permissions: readonly TContractPermission[]; readonly trusts: WildcardContainer; - readonly safeMethods: WildcardContainer; readonly extra?: JSONObject; } @@ -40,38 +37,28 @@ export class ContractManifestModel< > implements SerializableWire, SerializableJSON { public static readonly maxLength = common.MAX_MANIFEST_LENGTH; public readonly groups: readonly TContractGroup[]; - public readonly features: ContractFeaturesModel; public readonly supportedStandards: readonly string[]; public readonly abi: TContractABI; public readonly permissions: readonly TContractPermission[]; public readonly trusts: WildcardContainer; - public readonly safeMethods: WildcardContainer; public readonly extra: JSONObject | undefined; - public readonly hasStorage: boolean; - public readonly payable: boolean; 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, - features, supportedStandards, abi, permissions, trusts, - safeMethods, extra, }: ContractManifestModelAdd) { this.groups = groups; - this.features = features; this.supportedStandards = supportedStandards; this.abi = abi; this.permissions = permissions; this.trusts = trusts; - this.safeMethods = safeMethods; - this.hasStorage = HasStorage.has(features); - this.payable = HasPayable.has(features); this.extra = extra; } @@ -86,15 +73,10 @@ export class ContractManifestModel< public serializeJSON(): ContractManifestJSON { return { groups: this.groups.map((group) => group.serializeJSON()), - features: { - storage: this.hasStorage, - payable: this.payable, - }, 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)), - safemethods: this.safeMethods, extra: this.extra, }; } 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 index dea125bc5e..78ece19fd8 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts @@ -12,6 +12,7 @@ export interface ContractMethodDescriptorModelAdd< > extends ContractEventDescriptorModelAdd { readonly returnType: ContractParameterTypeModel; readonly offset: number; + readonly safe: boolean; } export class ContractMethodDescriptorModel< @@ -21,11 +22,13 @@ export class ContractMethodDescriptorModel< 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 { @@ -33,6 +36,7 @@ export class ContractMethodDescriptorModel< ...super.serializeJSON(), offset: this.offset, returntype: toJSONContractParameterType(this.returnType), + safe: this.safe, }; } } 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 5ce24d5d62..6fd3f1b487 100644 --- a/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts @@ -106,6 +106,7 @@ const contractRegisterToContractModel = (contractIn: ContractRegister): Contract name: param.name, }), ), + safe: methodIn.safe, }), ), events: contractIn.manifest.abi.events.map( @@ -122,10 +123,6 @@ const contractRegisterToContractModel = (contractIn: ContractRegister): Contract groups: contractIn.manifest.groups.map( (group) => new ContractGroupModel({ publicKey: group.publicKey, signature: Buffer.from(group.signature, 'hex') }), ), - features: getContractProperties({ - hasStorage: contractIn.manifest.features.storage, - payable: contractIn.manifest.features.payable, - }), supportedStandards: contractIn.manifest.supportedStandards, abi, permissions: contractIn.manifest.permissions.map( @@ -136,7 +133,6 @@ const contractRegisterToContractModel = (contractIn: ContractRegister): Contract }), ), trusts: contractIn.manifest.trusts, - safeMethods: contractIn.manifest.safeMethods, extra: contractIn.manifest.extra, }); diff --git a/packages/neo-one-client/src/index.ts b/packages/neo-one-client/src/index.ts index 36ef85f618..a7eacf526d 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -39,7 +39,6 @@ export { ContractABIClient, ContractEventDescriptor, ContractEventDescriptorClient, - ContractFeatures, ContractGroup, ContractManifest, ContractManifestClient, diff --git a/packages/neo-one-node-core/src/Prices.ts b/packages/neo-one-node-core/src/Prices.ts deleted file mode 100644 index 613f1346c6..0000000000 --- a/packages/neo-one-node-core/src/Prices.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { common, Op } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { InvalidOpCodeError } from './errors'; - -export const ECDsaVerifyPrice = common.fixed8FromDecimal('.01'); - -const opCodePrices: Record = { - [Op.PUSHINT8]: new BN(30), - [Op.PUSHINT16]: new BN(30), - [Op.PUSHINT32]: new BN(30), - [Op.PUSHINT64]: new BN(30), - [Op.PUSHINT128]: new BN(120), - [Op.PUSHINT256]: new BN(120), - [Op.PUSHA]: new BN(120), - [Op.PUSHNULL]: new BN(30), - [Op.PUSHDATA1]: new BN(180), - [Op.PUSHDATA2]: new BN(13000), - [Op.PUSHDATA4]: new BN(110000), - [Op.PUSHM1]: new BN(30), - [Op.PUSH0]: new BN(30), - [Op.PUSH1]: new BN(30), - [Op.PUSH2]: new BN(30), - [Op.PUSH3]: new BN(30), - [Op.PUSH4]: new BN(30), - [Op.PUSH5]: new BN(30), - [Op.PUSH6]: new BN(30), - [Op.PUSH7]: new BN(30), - [Op.PUSH8]: new BN(30), - [Op.PUSH9]: new BN(30), - [Op.PUSH10]: new BN(30), - [Op.PUSH11]: new BN(30), - [Op.PUSH12]: new BN(30), - [Op.PUSH13]: new BN(30), - [Op.PUSH14]: new BN(30), - [Op.PUSH15]: new BN(30), - [Op.PUSH16]: new BN(30), - [Op.NOP]: new BN(30), - [Op.JMP]: new BN(70), - [Op.JMP_L]: new BN(70), - [Op.JMPIF]: new BN(70), - [Op.JMPIF_L]: new BN(70), - [Op.JMPIFNOT]: new BN(70), - [Op.JMPIFNOT_L]: new BN(70), - [Op.JMPEQ]: new BN(70), - [Op.JMPEQ_L]: new BN(70), - [Op.JMPNE]: new BN(70), - [Op.JMPNE_L]: new BN(70), - [Op.JMPGT]: new BN(70), - [Op.JMPGT_L]: new BN(70), - [Op.JMPGE]: new BN(70), - [Op.JMPGE_L]: new BN(70), - [Op.JMPLT]: new BN(70), - [Op.JMPLT_L]: new BN(70), - [Op.JMPLE]: new BN(70), - [Op.JMPLE_L]: new BN(70), - [Op.CALL]: new BN(22000), - [Op.CALL_L]: new BN(22000), - [Op.CALLA]: new BN(22000), - [Op.ABORT]: new BN(30), - [Op.ASSERT]: new BN(30), - [Op.THROW]: new BN(22000), - [Op.TRY]: new BN(100), - [Op.TRY_L]: new BN(100), - [Op.ENDTRY]: new BN(100), - [Op.ENDTRY_L]: new BN(100), - [Op.ENDFINALLY]: new BN(100), - [Op.RET]: new BN(0), - [Op.SYSCALL]: new BN(0), - [Op.DEPTH]: new BN(60), - [Op.DROP]: new BN(60), - [Op.NIP]: new BN(60), - [Op.XDROP]: new BN(400), - [Op.CLEAR]: new BN(400), - [Op.DUP]: new BN(60), - [Op.OVER]: new BN(60), - [Op.PICK]: new BN(60), - [Op.TUCK]: new BN(60), - [Op.SWAP]: new BN(60), - [Op.ROT]: new BN(60), - [Op.ROLL]: new BN(400), - [Op.REVERSE3]: new BN(60), - [Op.REVERSE4]: new BN(60), - [Op.REVERSEN]: new BN(400), - [Op.INITSSLOT]: new BN(400), - [Op.INITSLOT]: new BN(800), - [Op.LDSFLD0]: new BN(60), - [Op.LDSFLD1]: new BN(60), - [Op.LDSFLD2]: new BN(60), - [Op.LDSFLD3]: new BN(60), - [Op.LDSFLD4]: new BN(60), - [Op.LDSFLD5]: new BN(60), - [Op.LDSFLD6]: new BN(60), - [Op.LDSFLD]: new BN(60), - [Op.STSFLD0]: new BN(60), - [Op.STSFLD1]: new BN(60), - [Op.STSFLD2]: new BN(60), - [Op.STSFLD3]: new BN(60), - [Op.STSFLD4]: new BN(60), - [Op.STSFLD5]: new BN(60), - [Op.STSFLD6]: new BN(60), - [Op.STSFLD]: new BN(60), - [Op.LDLOC0]: new BN(60), - [Op.LDLOC1]: new BN(60), - [Op.LDLOC2]: new BN(60), - [Op.LDLOC3]: new BN(60), - [Op.LDLOC4]: new BN(60), - [Op.LDLOC5]: new BN(60), - [Op.LDLOC6]: new BN(60), - [Op.LDLOC]: new BN(60), - [Op.STLOC0]: new BN(60), - [Op.STLOC1]: new BN(60), - [Op.STLOC2]: new BN(60), - [Op.STLOC3]: new BN(60), - [Op.STLOC4]: new BN(60), - [Op.STLOC5]: new BN(60), - [Op.STLOC6]: new BN(60), - [Op.STLOC]: new BN(60), - [Op.LDARG0]: new BN(60), - [Op.LDARG1]: new BN(60), - [Op.LDARG2]: new BN(60), - [Op.LDARG3]: new BN(60), - [Op.LDARG4]: new BN(60), - [Op.LDARG5]: new BN(60), - [Op.LDARG6]: new BN(60), - [Op.LDARG]: new BN(60), - [Op.STARG0]: new BN(60), - [Op.STARG1]: new BN(60), - [Op.STARG2]: new BN(60), - [Op.STARG3]: new BN(60), - [Op.STARG4]: new BN(60), - [Op.STARG5]: new BN(60), - [Op.STARG6]: new BN(60), - [Op.STARG]: new BN(60), - [Op.NEWBUFFER]: new BN(80000), - [Op.MEMCPY]: new BN(80000), - [Op.CAT]: new BN(80000), - [Op.SUBSTR]: new BN(80000), - [Op.LEFT]: new BN(80000), - [Op.RIGHT]: new BN(80000), - [Op.INVERT]: new BN(100), - [Op.AND]: new BN(200), - [Op.OR]: new BN(200), - [Op.XOR]: new BN(200), - [Op.EQUAL]: new BN(200), - [Op.NOTEQUAL]: new BN(200), - [Op.SIGN]: new BN(100), - [Op.ABS]: new BN(100), - [Op.NEGATE]: new BN(100), - [Op.INC]: new BN(100), - [Op.DEC]: new BN(100), - [Op.ADD]: new BN(200), - [Op.SUB]: new BN(200), - [Op.MUL]: new BN(300), - [Op.DIV]: new BN(300), - [Op.MOD]: new BN(300), - [Op.SHL]: new BN(300), - [Op.SHR]: new BN(300), - [Op.NOT]: new BN(100), - [Op.BOOLAND]: new BN(200), - [Op.BOOLOR]: new BN(200), - [Op.NZ]: new BN(100), - [Op.NUMEQUAL]: new BN(200), - [Op.NUMNOTEQUAL]: new BN(200), - [Op.LT]: new BN(200), - [Op.LE]: new BN(200), - [Op.GT]: new BN(200), - [Op.GE]: new BN(200), - [Op.MIN]: new BN(200), - [Op.MAX]: new BN(200), - [Op.WITHIN]: new BN(200), - [Op.PACK]: new BN(7000), - [Op.UNPACK]: new BN(7000), - [Op.NEWARRAY0]: new BN(400), - [Op.NEWARRAY]: new BN(15000), - [Op.NEWARRAY_T]: new BN(15000), - [Op.NEWSTRUCT0]: new BN(400), - [Op.NEWSTRUCT]: new BN(15000), - [Op.NEWMAP]: new BN(200), - [Op.SIZE]: new BN(150), - [Op.HASKEY]: new BN(270000), - [Op.KEYS]: new BN(500), - [Op.VALUES]: new BN(7000), - [Op.PICKITEM]: new BN(270000), - [Op.APPEND]: new BN(15000), - [Op.SETITEM]: new BN(270000), - [Op.REVERSEITEMS]: new BN(500), - [Op.REMOVE]: new BN(500), - [Op.CLEARITEMS]: new BN(400), - [Op.ISNULL]: new BN(60), - [Op.ISTYPE]: new BN(60), - [Op.CONVERT]: new BN(80000), -}; - -// tslint:disable-next-line: export-name -export const getOpCodePrice = (value: Op): BN => { - const fee = opCodePrices[value]; - if (fee === undefined) { - throw new InvalidOpCodeError(value); - } - - return fee; -}; diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 33973b27d8..d14f6afea3 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -16,7 +16,6 @@ export * from './HeaderHashList'; export * from './Native'; export * from './network'; export * from './Notification'; -export * from './Prices'; export * from './payload'; export * from './Serializable'; export * from './Settings'; diff --git a/packages/neo-one-node-core/src/manifest/ContractManifest.ts b/packages/neo-one-node-core/src/manifest/ContractManifest.ts index 4718370ab2..d9159f8e3f 100644 --- a/packages/neo-one-node-core/src/manifest/ContractManifest.ts +++ b/packages/neo-one-node-core/src/manifest/ContractManifest.ts @@ -23,23 +23,18 @@ export class ContractManifest extends ContractManifestModel ContractGroup.deserializeJSON(group)); - const { payable, storage: hasStorage } = json.features; - const features = getContractProperties({ payable, hasStorage }); 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 safeMethods = utils.wildCardFromJSON(json.safemethods, (input) => input); const extra = json.extra; return new this({ groups, - features, supportedStandards, abi, permissions, trusts, - safeMethods, extra, }); } diff --git a/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts index a839d0814c..3d16c759f8 100644 --- a/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts +++ b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts @@ -8,12 +8,14 @@ export class ContractMethodDescriptor extends ContractMethodDescriptorModel 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-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts index 63a6ec1b6c..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, @@ -365,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(); 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 025fe23dd5..3bcf4f0c66 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/types.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/types.ts @@ -33,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 { From 69e28ef8d25bb75c8213bfb4ed876d00e2867b50 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 29 Dec 2020 14:59:43 -0800 Subject: [PATCH 139/141] feat(vm): remove testMode, fixup vm, various quick fixes from misc updates issue" --- packages/neo-one-client-common/src/common.ts | 2 + .../transaction/FeelessTransactionModel.ts | 2 +- .../neo-one-node-blockchain/src/Blockchain.ts | 9 +---- .../src/PersistingBlockchain.ts | 6 +-- packages/neo-one-node-blockchain/src/utils.ts | 13 +++---- .../neo-one-node-blockchain/src/verify.ts | 10 ++--- packages/neo-one-node-core/src/CallFlags.ts | 11 +++--- .../neo-one-node-core/src/ConsensusData.ts | 1 - packages/neo-one-node-core/src/constants.ts | 7 +--- packages/neo-one-node-core/src/vm.ts | 12 ++++-- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 39 ++++++++++--------- .../lib/Dispatcher.Snapshot.cs | 4 ++ .../neo-one-node-vm/lib/Dispatcher.csproj | 8 +++- packages/neo-one-node-vm/lib/ReturnHelpers.cs | 4 ++ .../neo-one-node-vm/lib/SnapshotHelpers.cs | 5 --- .../neo-one-node-vm/src/ApplicationEngine.ts | 27 +++++++------ .../src/Methods/EngineMethods.ts | 15 ++++--- .../src/__tests__/ApplicationEngine.test.ts | 7 ++-- .../src/__tests__/Dispatcher.test.ts | 7 +--- .../src/__tests__/storage.test.ts | 20 ++++++---- .../src/__tests__/syscalls.test.ts | 33 +++++++--------- .../neo-one-node-vm/src/converters/changes.ts | 5 +-- 22 files changed, 120 insertions(+), 127 deletions(-) diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 38586410c7..6a21960eb4 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -211,6 +211,7 @@ const isWildcard = (input: unknown): input is Wildcard => input === '*'; const NEGATIVE_SATOSHI_FIXED8 = new BN(-1); const TEN_FIXED8 = fixed8FromDecimal(10); +const TWENTY_FIXED_8 = fixed8FromDecimal(20); const ONE_HUNDRED_FIXED8 = fixed8FromDecimal(100); const FOUR_HUNDRED_FIXED8 = fixed8FromDecimal(400); const FIVE_HUNDRED_FIXED8 = fixed8FromDecimal(500); @@ -249,6 +250,7 @@ export const common = { MAX_UINT256, NEGATIVE_SATOSHI_FIXED8, TEN_FIXED8, + TWENTY_FIXED_8, ONE_HUNDRED_FIXED8, FOUR_HUNDRED_FIXED8, FIVE_HUNDRED_FIXED8, diff --git a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts index a96c6ad73e..84a64c3f07 100644 --- a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts @@ -38,7 +38,7 @@ export interface FeelessTransactionModelAdd< export const MAX_TRANSACTION_ATTRIBUTES = 16; export const MAX_TRANSACTION_SIZE = 102400; -export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 2102400; +export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 5760; // 24 hours export const DEFAULT_VERSION = 0; export class FeelessTransactionModel< diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index c0cba7b63e..94583430a4 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -507,7 +507,6 @@ export class Blockchain { snapshot: 'clone', container: transaction, gas: common.ONE_HUNDRED_FIXED8, - testMode: true, }); } @@ -516,7 +515,6 @@ export class Blockchain { script, snapshot: 'main', container: signers, - gas: common.TEN_FIXED8, }); } @@ -526,8 +524,7 @@ export class Blockchain { container, persistingBlock, offset = 0, - testMode = false, - gas = new BN(0), + gas = common.TEN_FIXED8, }: RunEngineOptions): CallReceipt { return this.vm.withSnapshots(({ main, clone }) => { const handler = snapshot === 'main' ? main : clone; @@ -543,11 +540,9 @@ export class Blockchain { container, snapshot, gas, - testMode, }, (engine) => { - engine.loadScript(script); - engine.setInstructionPointer(offset); + engine.loadScript({ script: script, initialPosition: offset }); engine.execute(); return utils.getCallReceipt(engine, container); diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index e32139ec54..bf419b9dff 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -37,10 +37,9 @@ export class PersistingBlockchain { trigger: TriggerType.System, snapshot: 'main', gas: utils.ZERO, - testMode: true, }, (engine) => { - engine.loadScript(this.onPersistNativeContractScript); + engine.loadScript({ script: this.onPersistNativeContractScript }); const result = engine.execute(); if (result !== VMState.HALT) { throw new PersistNativeContractsError(); @@ -89,10 +88,9 @@ export class PersistingBlockchain { container: transaction, snapshot: 'clone', gas: transaction.systemFee, - testMode: false, }, (engine) => { - engine.loadScript(transaction.script); + engine.loadScript({ script: transaction.script }); const state = engine.execute(); if (state === VMState.HALT) { clone.deleteTransaction(transaction.hash); diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index a789c885d2..b288a13172 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -60,16 +60,15 @@ const verifyContract = async (contract: ContractState, vm: VM, transaction: Tran container: transaction, snapshot: 'clone', gas: new BN(0), - testMode: true, }, (engine) => { - engine.loadScript(contract.script, CallFlags.None); - engine.setInstructionPointer(verify.offset); - if (init !== undefined) { - engine.setInstructionPointer(init.offset); - } + engine.loadScript({ + script: contract.script, + flags: CallFlags.None, + initialPosition: init ? init.offset : verify.offset, + }); - engine.loadScript(Buffer.from([]), CallFlags.None); + engine.loadScript({ script: Buffer.from([]), flags: CallFlags.None }); const result = engine.execute(); if (result === VMState.FAULT) { diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts index f460561cbc..84005df5cc 100644 --- a/packages/neo-one-node-blockchain/src/verify.ts +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -64,14 +64,10 @@ export const verifyWithApplicationEngine = ( init?: ContractMethodDescriptor, ): ExecuteScriptResult => vm.withApplicationEngine( - { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas, testMode: false }, + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas }, (engine) => { - engine.loadScript(verification, CallFlags.None); - engine.setInstructionPointer(offset); - if (init !== undefined) { - engine.setInstructionPointer(init.offset); - } - engine.loadScript(verifiable.witnesses[index].invocation, CallFlags.None); + 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) { diff --git a/packages/neo-one-node-core/src/CallFlags.ts b/packages/neo-one-node-core/src/CallFlags.ts index f372b4cc7f..47c7fd88a5 100644 --- a/packages/neo-one-node-core/src/CallFlags.ts +++ b/packages/neo-one-node-core/src/CallFlags.ts @@ -1,11 +1,10 @@ export enum CallFlags { None = 0, - AllowStates = 0b00000001, - AllowModifyStates = 0b00000010, + ReadStates = 0b00000001, + WriteStates = 0b00000010, AllowCall = 0b00000100, AllowNotify = 0b00001000, - // tslint:disable-next-line: no-bitwise - ReadOnly = AllowStates | AllowCall | AllowNotify, - // tslint:disable-next-line: no-bitwise - All = AllowStates | AllowModifyStates | AllowCall | AllowNotify, + States = ReadStates | WriteStates, + ReadOnly = ReadStates | AllowCall, + All = States | AllowCall | AllowNotify, } diff --git a/packages/neo-one-node-core/src/ConsensusData.ts b/packages/neo-one-node-core/src/ConsensusData.ts index 0f04065c41..30815dcd0b 100644 --- a/packages/neo-one-node-core/src/ConsensusData.ts +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -1,6 +1,5 @@ import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, JSONHelper, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; -import { DEFAULT_VALIDATORS_COUNT } from './constants'; import { createSerializeWire, DeserializeWireBaseOptions, diff --git a/packages/neo-one-node-core/src/constants.ts b/packages/neo-one-node-core/src/constants.ts index dc2757deb3..4a849e4c03 100644 --- a/packages/neo-one-node-core/src/constants.ts +++ b/packages/neo-one-node-core/src/constants.ts @@ -1,6 +1,3 @@ -import { BN } from 'bn.js'; - export const MAX_TRANSACTION_SIZE = 102400; -export const DEFAULT_VALIDATORS_COUNT = new BN(7); -export const WITNESS_INVOCATION_SIZE = 663; -export const WITNESS_VERIFICATION_SIZE = 361; +export const WITNESS_INVOCATION_SIZE = 1024; +export const WITNESS_VERIFICATION_SIZE = 1024; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 1ed80d7449..95bd7c9b20 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -29,7 +29,6 @@ export interface ApplicationEngineOptions { readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; readonly gas: BN; - readonly testMode: boolean; } export interface RunEngineOptions { @@ -38,10 +37,16 @@ export interface RunEngineOptions { readonly container?: SerializableContainer; readonly persistingBlock?: Block; readonly offset?: number; - readonly testMode?: boolean; readonly gas?: BN; } +export interface LoadScriptOptions { + readonly script: Buffer; + readonly flags?: CallFlags; + readonly scriptHash?: UInt160; + readonly initialPosition?: number; +} + export interface ApplicationEngine { readonly trigger: TriggerType; readonly gasConsumed: BN; @@ -49,9 +54,8 @@ export interface ApplicationEngine { readonly state: VMState; readonly notifications: readonly StackItem[]; readonly logs: readonly VMLog[]; - readonly loadScript: (script: Buffer, flag?: CallFlags) => boolean; + readonly loadScript: (options: LoadScriptOptions) => boolean; readonly execute: () => VMState; - readonly setInstructionPointer: (position: number) => boolean; } export type SnapshotPartial = 'blocks' | 'transactions'; diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index 030f70bc37..e7ade32bb0 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using Neo; using Neo.IO; using Neo.Network.P2P.Payloads; using Neo.Persistence; @@ -82,25 +83,33 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) case EngineMethod.create: TriggerType trigger = (TriggerType)args.trigger; long gas = long.Parse((string)args.gas); - bool testMode = (bool)args.testMode; IVerifiable container = null; if (args.container != null) { container = deserializeContainer(args.container); } - return this._create(trigger, container, this.selectSnapshot(args.snapshot, false), gas, testMode); + 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 flag = (CallFlags)((byte)args.flag); - return this._loadScript(script, flag); + CallFlags flags = (CallFlags)((byte)args.flags); + UInt160 scriptHash = null; + int initialPosition = 0; - case EngineMethod.setinstructionpointer: - int position = (int)args.position; - return this._setInstructionPointer(position); + if (args.scriptHash != null) + { + scriptHash = UInt160.Parse((string)args.scriptHash); + } + + if (args.initialPosition != null) + { + initialPosition = (int)args.intialPosition; + } + + return this._loadScript(script, flags, scriptHash, initialPosition); case EngineMethod.getvmstate: return this._getVMState(); @@ -139,10 +148,10 @@ private void disposeEngine() } } - private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas, bool testMode = false) + private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas) { this.disposeEngine(); - this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas, testMode); + this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas); return true; } @@ -153,18 +162,10 @@ private VMState _execute() return this.engine.Execute(); } - private bool _loadScript(Script script, CallFlags flag) + private bool _loadScript(Script script, CallFlags flags, UInt160 hash = null, int initialPosition = 0) { this.isEngineInitialized(); - this.engine.LoadScript(script, flag); - return true; - } - - private bool _setInstructionPointer(int initialPosition) - { - this.isEngineInitialized(); - this.engine.CurrentContext.InstructionPointer = initialPosition; - + this.engine.LoadScript(script, flags, hash, initialPosition); return true; } diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 77c9d5f0ff..5d07984b6b 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -6,6 +6,7 @@ using Neo.Persistence; using Neo.VM; using NEOONE.Storage; +using System.Threading; namespace NEOONE { @@ -36,7 +37,9 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) { case SnapshotMethod.snapshot_blocks_add: UInt256 blockHash = new UInt256((byte[])args.hash); + Console.WriteLine("got block hash"); byte[] blockSerialized = (byte[])args.block; + Console.WriteLine("got block serialized"); Block block = new Block(); using (MemoryStream ms = new MemoryStream(blockSerialized)) using (BinaryReader reader = new BinaryReader(ms)) @@ -45,6 +48,7 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) } var tmp = block.Hash.ToString(); + Console.WriteLine("tmp block hash calculated"); return this._snapshotBlocksAdd(this.selectSnapshot(args.snapshot), blockHash, block); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj index 85c5d6c56f..c93ca3843e 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.csproj +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -14,8 +14,12 @@ - - + + + + + + diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs index 4e26a05a73..aadc41c8ff 100644 --- a/packages/neo-one-node-vm/lib/ReturnHelpers.cs +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -174,6 +174,8 @@ public class ProtocolSettingsReturn public string[] seedList; public int millisecondsPerBlock; public int memoryPoolMaxTransactions; + public int maxTraceableBlocks; + public dynamic nativeActivations; public ProtocolSettingsReturn(ProtocolSettings value) { @@ -185,6 +187,8 @@ public ProtocolSettingsReturn(ProtocolSettings value) 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 index 79cfe7c76c..319a24f873 100644 --- a/packages/neo-one-node-vm/lib/SnapshotHelpers.cs +++ b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs @@ -23,11 +23,6 @@ public ChangeSet(StoreView snapshot) { set.Add(new Change("transaction", value)); } - - foreach (var value in snapshot.Contracts.GetChangeSet()) - { - set.Add(new Change("contract", value)); - } foreach (var value in snapshot.Storages.GetChangeSet()) { set.Add(new Change("storage", value)); diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts index 38296b05c1..532079db48 100644 --- a/packages/neo-one-node-vm/src/ApplicationEngine.ts +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -1,5 +1,11 @@ -import { TriggerType, VMState } from '@neo-one/client-common'; -import { CallFlags, SerializableContainer, serializeScriptContainer, SnapshotName } from '@neo-one/node-core'; +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'; @@ -11,7 +17,6 @@ export interface CreateOptions { readonly container?: SerializableContainer; readonly snapshot?: SnapshotName; readonly gas: BN; - readonly testMode: boolean; } interface ApplicationEngineDispatcher { @@ -77,7 +82,7 @@ export class ApplicationEngine { }).map(convertLog); } - public create({ trigger, container, gas, snapshot, testMode }: CreateOptions) { + public create({ trigger, container, gas, snapshot }: CreateOptions) { return this.dispatch({ method: 'create', args: { @@ -85,7 +90,6 @@ export class ApplicationEngine { container: container ? serializeScriptContainer(container) : undefined, gas: gas.toString(), snapshot, - testMode, }, }); } @@ -98,12 +102,14 @@ export class ApplicationEngine { ]; } - public loadScript(script: Buffer, flag = CallFlags.All) { + public loadScript({ script, flags = CallFlags.All, scriptHash, initialPosition }: LoadScriptOptions) { return this.dispatch({ method: 'loadscript', args: { script, - flag, + flags, + scriptHash: scriptHash ? common.uInt160ToHex(scriptHash) : undefined, + initialPosition, }, }); } @@ -113,11 +119,4 @@ export class ApplicationEngine { method: 'checkscript', }); } - - public setInstructionPointer(position: number) { - return this.dispatch({ - method: 'setinstructionpointer', - args: { position }, - }); - } } diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts index 79fd4e3b75..af2edfc2f9 100644 --- a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -1,5 +1,5 @@ -import { TriggerType, VMState } from '@neo-one/client-common'; -import { CallFlags, SerializedScriptContainer, SnapshotName } from '@neo-one/node-core'; +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'; @@ -8,7 +8,13 @@ interface CreateEngineArgs { readonly container?: SerializedScriptContainer; readonly gas: string; readonly snapshot?: SnapshotName; - readonly testMode: boolean; +} + +interface LoadScriptVMArgs { + readonly script: Buffer; + readonly flags: CallFlags; + readonly scriptHash?: UInt160Hex; + readonly initialPosition?: number; } export interface EngineMethods extends DefaultMethods { @@ -23,6 +29,5 @@ export interface EngineMethods extends DefaultMethods { readonly getlogs: DispatchMethod; // methods readonly execute: DispatchMethod; - readonly setinstructionpointer: DispatchMethod; - readonly loadscript: DispatchMethod; + readonly loadscript: DispatchMethod; } diff --git a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts index 0b7096f0e7..6cff71f0e3 100644 --- a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts @@ -1,4 +1,4 @@ -import { TriggerType } from '@neo-one/client-common'; +import { TriggerType, common, VMState } from '@neo-one/client-common'; import { ApplicationEngine } from '../ApplicationEngine'; import { Dispatcher } from '../Dispatcher'; @@ -11,10 +11,9 @@ describe('ApplicationEngine test', () => { const engine = new ApplicationEngine(dispatcher); engine.create({ trigger: TriggerType.Application, - gas: 0, - testMode: true, + gas: common.TWENTY_FIXED_8, }); - expect(engine.state).toEqual('BREAK'); + 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 index e426b3b672..c9c6c127b4 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -13,7 +13,6 @@ describe('Dispatcher Tests', () => { const result = dispatcher.withApplicationEngine( { trigger: TriggerType.Application, - testMode: true, gas: common.ONE_HUNDRED_FIXED8, }, (engine) => { @@ -22,7 +21,7 @@ describe('Dispatcher Tests', () => { const script = new ScriptBuilder(); script.emitOp('PUSHNULL'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); engine.execute(); @@ -102,8 +101,4 @@ describe('Dispatcher Tests', () => { test('Dispatcher returns config without initializing config', () => { expect(dispatcher.getConfig()).toBeDefined(); }); - - test.only('test command', () => { - console.log(dispatcher.test()); - }); }); diff --git a/packages/neo-one-node-vm/src/__tests__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts index 8c6b16c574..cf2e9b85fe 100644 --- a/packages/neo-one-node-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -1,4 +1,4 @@ -import { common, ScriptBuilder, TriggerType, UInt256, WitnessScopeModel } from '@neo-one/client-common'; +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'; @@ -11,7 +11,9 @@ const createGetBlockScript = (hash: UInt256) => { 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({ @@ -29,6 +31,7 @@ describe('TS <--> C# Storage Test', () => { invocation: Buffer.from([]), }), ], + messageMagic, }); const block = new Block({ @@ -43,6 +46,7 @@ describe('TS <--> C# Storage Test', () => { nextConsensus: common.ZERO_UINT160, consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), transactions: [tx], + messageMagic, }); const script = createGetBlockScript(block.hash); @@ -55,13 +59,12 @@ describe('TS <--> C# Storage Test', () => { { trigger: TriggerType.Application, snapshot: 'main', - gas: 0, - testMode: true, + gas: common.TWENTY_FIXED_8, }, (engine) => { - engine.loadScript(script); + engine.loadScript({ script }); const newState = engine.execute(); - expect(newState).toEqual('HALT'); + expect(newState).toEqual(VMState.HALT); const resultStack = engine.resultStack; const arr = assertArrayStackItem(resultStack[0]).array; @@ -89,6 +92,7 @@ describe('TS <--> C# Storage Test', () => { invocation: Buffer.from([]), }), ], + messageMagic, }); const block = new Block({ @@ -103,6 +107,7 @@ describe('TS <--> C# Storage Test', () => { nextConsensus: common.ZERO_UINT160, consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), transactions: [tx], + messageMagic, }); const script = createGetBlockScript(block.hash); @@ -115,11 +120,10 @@ describe('TS <--> C# Storage Test', () => { { trigger: TriggerType.Application, snapshot: 'main', - gas: 0, - testMode: true, + gas: common.TWENTY_FIXED_8, }, (engine) => { - engine.loadScript(script); + engine.loadScript({ script }); const newState = engine.execute(); expect(newState).toEqual('HALT'); 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 7120e9eb88..bf37a39cde 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -13,8 +13,7 @@ describe('Application Engine SysCall Tests', () => { dispatcher.reset(); engine.create({ trigger: TriggerType.Application, - gas: 0, - testMode: true, + gas: common.TWENTY_FIXED_8, }); script = new ScriptBuilder(); @@ -27,7 +26,7 @@ describe('Application Engine SysCall Tests', () => { script.emitPushString('null'); script.emitSysCall('System.Json.Deserialize'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('HALT'); @@ -40,7 +39,7 @@ describe('Application Engine SysCall Tests', () => { script.emitPushString('***'); script.emitSysCall('System.Json.Deserialize'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('FAULT'); expect(engine.resultStack.length).toEqual(0); @@ -50,7 +49,7 @@ describe('Application Engine SysCall Tests', () => { script.emitPushString('123.45'); script.emitSysCall('System.Json.Deserialize'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('FAULT'); expect(engine.resultStack.length).toEqual(0); @@ -75,7 +74,7 @@ describe('Application Engine SysCall Tests', () => { script.emitOp('SETITEM'); script.emitSysCall('System.Json.Serialize'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('HALT'); @@ -93,7 +92,7 @@ describe('Application Engine SysCall Tests', () => { script.emitSysCall('System.Storage.GetContext'); script.emitSysCall('System.Json.Serialize'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('FAULT'); expect(engine.resultStack.length).toEqual(0); @@ -103,8 +102,7 @@ describe('Application Engine SysCall Tests', () => { test('System.Callback.Invoke -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: 1, - testMode: false, + gas: common.TWENTY_FIXED_8, }); script = new ScriptBuilder(); @@ -124,7 +122,7 @@ describe('Application Engine SysCall Tests', () => { script.emitOp('SUB'); script.emitOp('RET'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('HALT'); @@ -136,8 +134,7 @@ describe('Application Engine SysCall Tests', () => { test('System.Callback.CreateFromSyscall -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: 1, - testMode: false, + gas: common.TWENTY_FIXED_8, }); script = new ScriptBuilder(); @@ -149,7 +146,7 @@ describe('Application Engine SysCall Tests', () => { script.emitSysCall('System.Callback.CreateFromSyscall'); script.emitSysCall('System.Callback.Invoke'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('HALT'); @@ -171,19 +168,19 @@ describe('Application Engine SysCall Tests', () => { nextConsensus: common.ZERO_UINT160, consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), transactions: [], + messageMagic: 1951352142, }); test('With Snapshot option -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: 0, - testMode: true, + gas: common.TWENTY_FIXED_8, snapshot: 'main', }); script.emitPushUInt256(block.hash); script.emitSysCall('System.Blockchain.GetBlock'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('HALT'); @@ -193,11 +190,11 @@ describe('Application Engine SysCall Tests', () => { }); test('Without Snapshot option -- Fault', () => { - engine.create({ trigger: TriggerType.Application, gas: 0, testMode: true }); + engine.create({ trigger: TriggerType.Application, gas: common.TWENTY_FIXED_8 }); script.emitPushUInt256(block.hash); script.emitSysCall('System.Blockchain.GetBlock'); - engine.loadScript(script.build()); + engine.loadScript({ script: script.build() }); const state = engine.execute(); expect(state).toEqual('FAULT'); }); diff --git a/packages/neo-one-node-vm/src/converters/changes.ts b/packages/neo-one-node-vm/src/converters/changes.ts index c8f6ee0571..dd91b9b252 100644 --- a/packages/neo-one-node-vm/src/converters/changes.ts +++ b/packages/neo-one-node-vm/src/converters/changes.ts @@ -1,7 +1,7 @@ // import { PutBatch, DeleteBatch } from '@neo-one/node-core'; type ChangeType = 'Added' | 'Changed' | 'Deleted'; -type ItemType = 'block' | 'transaction' | 'contract' | 'storage' | 'headerHashList'; +type ItemType = 'block' | 'transaction' | 'storage' | 'headerHashList'; export interface ChangeReturn { readonly type: ChangeType; @@ -14,7 +14,6 @@ export interface ChangeReturn { enum Prefix { Block = 0x01, Transaction = 0x02, - Contract = 0x50, Storage = 0x70, HeaderHashList = 0x80, CurrentBlock = 0xc0, @@ -30,8 +29,6 @@ const addPrefixToKey = (type: ItemType, key: Buffer) => { return addPrefix(Prefix.Block, key); case 'transaction': return addPrefix(Prefix.Transaction, key); - case 'contract': - return addPrefix(Prefix.Contract, key); case 'storage': return addPrefix(Prefix.Storage, key); case 'headerHashList': From b8a6f80656f7716c5a8318f48e86564a9449d61d Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 29 Dec 2020 12:13:18 -0800 Subject: [PATCH 140/141] feat(blockchain): implement new trigger changes / fixup old storage issue --- packages/neo-one-client-common/src/common.ts | 4 +- .../src/models/trigger.ts | 5 +- .../neo-one-client-common/src/models/vm.ts | 9 +-- .../src/user/LocalUserAccountProvider.ts | 26 ++++++- .../src/models/manifest/index.ts | 1 - .../neo-one-node-blockchain/src/Blockchain.ts | 8 +- .../src/PersistingBlockchain.ts | 78 +++++++++++++------ .../neo-one-node-blockchain/src/errors.ts | 4 + packages/neo-one-node-blockchain/src/utils.ts | 23 +++--- packages/neo-one-node-core/src/vm.ts | 1 + .../neo-one-node-neo-settings/src/common.ts | 2 +- .../neo-one-node-vm/lib/Dispatcher.Engine.cs | 2 +- .../lib/Dispatcher.Snapshot.cs | 6 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 2 +- .../lib/Storage/RocksDB/Snapshot.cs | 10 ++- .../lib/Storage/RocksDB/Store.cs | 8 +- .../src/__tests__/ApplicationEngine.test.ts | 2 +- .../src/__tests__/snapshot.test.ts | 17 ++++ .../src/__tests__/storage.test.ts | 4 +- .../src/__tests__/syscalls.test.ts | 10 +-- .../neo-one-node/src/__data__/jsonBlocks.ts | 36 ++++----- .../src/__tests__/blockchain.test.ts | 54 +++++++------ 22 files changed, 198 insertions(+), 114 deletions(-) create mode 100644 packages/neo-one-node-vm/src/__tests__/snapshot.test.ts diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 6a21960eb4..f79cffc05e 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -211,7 +211,7 @@ const isWildcard = (input: unknown): input is Wildcard => input === '*'; const NEGATIVE_SATOSHI_FIXED8 = new BN(-1); const TEN_FIXED8 = fixed8FromDecimal(10); -const TWENTY_FIXED_8 = fixed8FromDecimal(20); +const TWENTY_FIXED8 = fixed8FromDecimal(20); const ONE_HUNDRED_FIXED8 = fixed8FromDecimal(100); const FOUR_HUNDRED_FIXED8 = fixed8FromDecimal(400); const FIVE_HUNDRED_FIXED8 = fixed8FromDecimal(500); @@ -250,7 +250,7 @@ export const common = { MAX_UINT256, NEGATIVE_SATOSHI_FIXED8, TEN_FIXED8, - TWENTY_FIXED_8, + TWENTY_FIXED8, ONE_HUNDRED_FIXED8, FOUR_HUNDRED_FIXED8, FIVE_HUNDRED_FIXED8, diff --git a/packages/neo-one-client-common/src/models/trigger.ts b/packages/neo-one-client-common/src/models/trigger.ts index 0f90bf91e2..fd8a6b923f 100644 --- a/packages/neo-one-client-common/src/models/trigger.ts +++ b/packages/neo-one-client-common/src/models/trigger.ts @@ -1,9 +1,12 @@ import { InvalidFormatError } from '../common'; export enum TriggerType { + OnPersist = 0x01, + PostPersist = 0x02, Verification = 0x20, - System = 0x01, Application = 0x40, + System = OnPersist | PostPersist, + All = OnPersist | PostPersist | Verification | Application, } export type TriggerTypeJSON = keyof typeof TriggerType; diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 91fb9263eb..a318c74b94 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -224,18 +224,17 @@ export enum SysCall { 'System.Blockchain.GetTransaction' = 'System.Blockchain.GetTransaction', 'System.Blockchain.GetTransactionHeight' = 'System.Blockchain.GetTransactionHeight', 'System.Blockchain.GetTransactionFromBlock' = 'System.Blockchain.GetTransactionFromBlock', - 'System.Blockchain.GetContract' = 'System.Blockchain.GetContract', '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.Create' = 'System.Contract.Create', - 'System.Contract.Update' = 'System.Contract.Update', - 'System.Contract.Destroy' = 'System.Contract.Destroy', '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', @@ -254,8 +253,6 @@ export enum SysCall { 'System.Iterator.Concat' = 'System.Iterator.Concat', 'System.Json.Serialize' = 'System.Json.Serialize', 'System.Json.Deserialize' = 'System.Json.Deserialize', - 'Neo.Native.Deploy' = 'Neo.Native.Deploy', - 'Neo.Native.Call' = 'Neo.Native.Call', 'System.Runtime.Platform' = 'System.Runtime.Platform', 'System.Runtime.GetTrigger' = 'System.Runtime.GetTrigger', 'System.Runtime.GetTime' = 'System.Runtime.GetTime', diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index f2e2a6dcce..0ff705f71f 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -177,13 +177,27 @@ export class LocalUserAccountProvider { + 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) { @@ -533,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-full-common/src/models/manifest/index.ts b/packages/neo-one-client-full-common/src/models/manifest/index.ts index 5377d49665..fad1e417bb 100644 --- a/packages/neo-one-client-full-common/src/models/manifest/index.ts +++ b/packages/neo-one-client-full-common/src/models/manifest/index.ts @@ -1,6 +1,5 @@ export * from './ContractABIModel'; export * from './ContractEventDescriptorModel'; -export * from './ContractFeaturesModel'; export * from './ContractGroupModel'; export * from './ContractManifestModel'; export * from './ContractMethodDescriptorModel'; diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 94583430a4..8c5e447830 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -57,6 +57,7 @@ const logger = createChild(nodeLogger, { service: 'blockchain' }); export interface CreateBlockchainOptions { readonly onPersistNativeContractScript?: Buffer; + readonly postPersistNativeContractScript?: Buffer; readonly settings: BlockchainSettings; readonly storage: Storage; readonly native: NativeContainer; @@ -167,6 +168,7 @@ export class Blockchain { 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; @@ -195,12 +197,15 @@ export class Blockchain { this.vm = options.vm; this.onPersistNativeContractScript = options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); + this.postPersistNativeContractScript = + options.postPersistNativeContractScript ?? utils.getPostPersistNativeContractScript(); this.deserializeWireContext = { messageMagic: this.settings.messageMagic, validatorsCount: this.settings.validatorsCount, }; this.mutableCurrentBlock = options.currentBlock; - this.onPersist = options.onPersist === undefined ? this.vm.updateSnapshots : options.onPersist; + this.onPersist = + options.onPersist === undefined ? () => Promise.resolve(this.vm.updateSnapshots()) : options.onPersist; this.start(); } @@ -796,6 +801,7 @@ export class Blockchain { private createPersistingBlockchain(): PersistingBlockchain { return new PersistingBlockchain({ onPersistNativeContractScript: this.onPersistNativeContractScript, + postPersistNativeContractScript: this.postPersistNativeContractScript, vm: this.vm, }); } diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts index bf419b9dff..b46a031b44 100644 --- a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -1,21 +1,24 @@ // tslint:disable no-array-mutation no-object-mutation -import { TriggerType, VMState } from '@neo-one/client-common'; +import { TriggerType, VMState, common } from '@neo-one/client-common'; import { ApplicationExecuted, Block, SnapshotHandler, Transaction, VM } from '@neo-one/node-core'; -import { PersistNativeContractsError } from './errors'; -import { utils, utils as blockchainUtils } from './utils'; +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( @@ -31,33 +34,38 @@ export class PersistingBlockchain { const appsExecuted: ApplicationExecuted[] = []; main.setPersistingBlock(block); - if (block.index > 0) { - const executed = this.vm.withApplicationEngine( - { - trigger: TriggerType.System, - snapshot: 'main', - gas: utils.ZERO, - }, - (engine) => { - engine.loadScript({ script: this.onPersistNativeContractScript }); - const result = engine.execute(); - if (result !== VMState.HALT) { - throw new PersistNativeContractsError(); - } - - return blockchainUtils.getApplicationExecuted(engine); - }, - ); - - appsExecuted.push(executed); - } + 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); - return { changeBatch: main.getChangeSet(), applicationsExecuted: appsExecuted.concat(executedTransactions) }; + main.changeBlockHashIndex(block.index, block.hash); + + const postPersistExecuted = this.postPersist(); + + return { + changeBatch: main.getChangeSet(), + applicationsExecuted: appsExecuted.concat(executedTransactions).concat(postPersistExecuted), + }; }); } @@ -100,7 +108,27 @@ export class PersistingBlockchain { main.clone(); } - return blockchainUtils.getApplicationExecuted(engine, transaction); + 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/errors.ts b/packages/neo-one-node-blockchain/src/errors.ts index 2a4b1f6544..9d0f8c3884 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -28,6 +28,10 @@ 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.`, diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts index b288a13172..886f2d9daa 100644 --- a/packages/neo-one-node-blockchain/src/utils.ts +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -10,20 +10,22 @@ import { Verifiable, VM, } from '@neo-one/node-core'; -import { BN } from 'bn.js'; import { ScriptVerifyError } from './errors'; const hashListBatchSize = 2000; const getOnPersistNativeContractScript = coreUtils.lazy(() => { - const hashes = [common.nativeHashes.GAS, common.nativeHashes.NEO]; - const script = new ScriptBuilder(); - hashes.forEach((hash) => { - script.emitAppCall(hash, 'onPersist'); - script.emitOp('DROP'); - }); - - return script.build(); + 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 @@ -59,7 +61,7 @@ const verifyContract = async (contract: ContractState, vm: VM, transaction: Tran trigger: TriggerType.Verification, container: transaction, snapshot: 'clone', - gas: new BN(0), + gas: common.TWENTY_FIXED8, }, (engine) => { engine.loadScript({ @@ -104,6 +106,7 @@ export const utils = { getApplicationExecuted, getCallReceipt, getOnPersistNativeContractScript, + getPostPersistNativeContractScript, verifyContract, blockComparator, isTransaction, diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 95bd7c9b20..01755a30a8 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -96,4 +96,5 @@ export interface VM { 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-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 2a9aca577f..8f2df9e0ef 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -106,7 +106,7 @@ const getGenesisBlock = ({ consensusAddress, messageMagic }: GetGenesisBlockOpti primaryIndex: 0, nonce: new BN(2083236893), }), - transactions: [getDeployNativeContracts(messageMagic)], + transactions: [], messageMagic, }); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs index e7ade32bb0..cae8b20e56 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -106,7 +106,7 @@ private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) if (args.initialPosition != null) { - initialPosition = (int)args.intialPosition; + initialPosition = (int)args.initialPosition; } return this._loadScript(script, flags, scriptHash, initialPosition); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs index 5d07984b6b..aecb8920ad 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -7,6 +7,7 @@ using Neo.VM; using NEOONE.Storage; using System.Threading; +using Neo.IO.Caching; namespace NEOONE { @@ -37,9 +38,7 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) { case SnapshotMethod.snapshot_blocks_add: UInt256 blockHash = new UInt256((byte[])args.hash); - Console.WriteLine("got block hash"); byte[] blockSerialized = (byte[])args.block; - Console.WriteLine("got block serialized"); Block block = new Block(); using (MemoryStream ms = new MemoryStream(blockSerialized)) using (BinaryReader reader = new BinaryReader(ms)) @@ -47,9 +46,6 @@ private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) block.Deserialize(reader); } - var tmp = block.Hash.ToString(); - Console.WriteLine("tmp block hash calculated"); - return this._snapshotBlocksAdd(this.selectSnapshot(args.snapshot), blockHash, block); case SnapshotMethod.snapshot_transactions_add: diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index 1c8b40de6d..99f1b45c46 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -124,7 +124,7 @@ private bool _dispose() private dynamic _test() { - return ApplicationEngine.Neo_Crypto_CheckMultisigWithECDsaSecp256r1.Hash.ToString(); + return this.snapshot.PersistingBlock.Index.ToString(); } private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs index 007ca64de5..619249b03f 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -3,7 +3,8 @@ using RocksDbSharp; using System; using System.Collections.Generic; - +using System.IO; +using Neo; namespace NEOONE.Storage.RocksDB { internal class Snapshot : ISnapshot @@ -48,10 +49,12 @@ public void Put(byte table, byte[] key, byte[] value) if (direction == SeekDirection.Forward) for (it.Seek(fullKey); it.Valid() && it.Key()[0] == table; it.Next()) - yield return (it.Key(), it.Value()); + yield return (it.Key()[1..], it.Value()); else for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) - yield return (it.Key(), it.Value()); + { + yield return (it.Key()[1..], it.Value()); + } } public bool Contains(byte table, byte[] key) @@ -63,7 +66,6 @@ public bool Contains(byte table, byte[] key) public byte[] TryGet(byte table, byte[] key) { byte[] fullKey = key == null ? new byte[] { table } : store.getFullKey(table, key); - // Console.WriteLine($"trying to get from rocksdb store, key: {BitConverter.ToString(fullKey)}"); return db.Get(fullKey ?? Array.Empty(), store.defaultFamily, options); } diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs index b6eb31f2d8..b14d9592c0 100644 --- a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs @@ -52,11 +52,11 @@ public byte[] getFullKey(byte table, byte[] keyOrPrefix) byte[] fullKey = getFullKey(table, keyOrPrefix); using var it = db.NewIterator(defaultFamily, Options.ReadDefault); if (direction == SeekDirection.Forward) - for (it.Seek(fullKey); it.Valid(); it.Next()) - yield return (it.Key(), it.Value()); + 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.Prev()) - yield return (it.Key(), it.Value()); + 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) diff --git a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts index 6cff71f0e3..cb727cec1a 100644 --- a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts @@ -11,7 +11,7 @@ describe('ApplicationEngine test', () => { const engine = new ApplicationEngine(dispatcher); engine.create({ trigger: TriggerType.Application, - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }); expect(engine.state).toEqual(VMState.BREAK); 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__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts index cf2e9b85fe..abba6462c1 100644 --- a/packages/neo-one-node-vm/src/__tests__/storage.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -59,7 +59,7 @@ describe('TS <--> C# Storage Test', () => { { trigger: TriggerType.Application, snapshot: 'main', - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }, (engine) => { engine.loadScript({ script }); @@ -120,7 +120,7 @@ describe('TS <--> C# Storage Test', () => { { trigger: TriggerType.Application, snapshot: 'main', - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }, (engine) => { engine.loadScript({ script }); 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 bf37a39cde..644daa8e76 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -13,7 +13,7 @@ describe('Application Engine SysCall Tests', () => { dispatcher.reset(); engine.create({ trigger: TriggerType.Application, - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }); script = new ScriptBuilder(); @@ -102,7 +102,7 @@ describe('Application Engine SysCall Tests', () => { test('System.Callback.Invoke -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }); script = new ScriptBuilder(); @@ -134,7 +134,7 @@ describe('Application Engine SysCall Tests', () => { test('System.Callback.CreateFromSyscall -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, }); script = new ScriptBuilder(); @@ -174,7 +174,7 @@ describe('Application Engine SysCall Tests', () => { test('With Snapshot option -- Halt', () => { engine.create({ trigger: TriggerType.Application, - gas: common.TWENTY_FIXED_8, + gas: common.TWENTY_FIXED8, snapshot: 'main', }); script.emitPushUInt256(block.hash); @@ -190,7 +190,7 @@ describe('Application Engine SysCall Tests', () => { }); test('Without Snapshot option -- Fault', () => { - engine.create({ trigger: TriggerType.Application, gas: common.TWENTY_FIXED_8 }); + engine.create({ trigger: TriggerType.Application, gas: common.TWENTY_FIXED8 }); script.emitPushUInt256(block.hash); script.emitSysCall('System.Blockchain.GetBlock'); diff --git a/packages/neo-one-node/src/__data__/jsonBlocks.ts b/packages/neo-one-node/src/__data__/jsonBlocks.ts index 23a08e62e5..e048e1fc48 100644 --- a/packages/neo-one-node/src/__data__/jsonBlocks.ts +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -48,55 +48,55 @@ export const genesisJSON = { }; export const secondBlockJSON = { - hash: '0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5', + hash: '0x2cf3b022f8ef6b863f47746ce9a9e38e3f1762ea47f3ede3be81118c1fa1ee24', size: 700, version: 0, - previousblockhash: '0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45', - merkleroot: '0x9ff5ba403c81151c0d031b548fe6cff82ef61a01be72c38ecc81d4bc2f1ee01c', - time: 1596537327793, + previousblockhash: '0xc4d50ea6bd8e0d1422714f8edbd4eee182b9f6958b2b0795bf6f3e9f9117ee03', + merkleroot: '0x3443a50bc7b0e475ce658c9f089656b41c8bb26abf5c4ce1df88513e63b29ab8', + time: 1608609566819, index: 1, nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', witnesses: [ { invocation: - 'DED/2tpnw4uN5407xKQuwAXw+Hm9L4P51hSMfjwbEcm7pN+aFdn5+d/VxT9ifDX0KQRGlbericqr6h2gQvnJYvHqDECO9w/7PAccs3K3yqAZ4zDTpsnxxDU5EyR1PNNcBUx31lFGyHtjcxhce+YNYxcJc2zOFFk+lFmCBn+ZiF1HZrkPDEBbpwRGODeexXqSws2VQPrOg/BiCNYKmAj3vPW8HvC3ypnly/Hfy8lYF9iZiIighzUALC4QzQpxdq1IdNMSH22jDEAe/l0FF8HXc6e20zT6x0D8XvrITHsKMxxe4S5hGYwojgBDjJPcMwvJbT83AF+sorbZc7SMaCGwT1XOEg+9M0G2DEDOK/OsvMqyKgyHf/gz5QFgQxPjHKuuMoN38+OLuMRP36K4Eunv7oql3KstrgpVIqZHtETEHmxMEFIFXu5hFEa8', + '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: 1, - nonce: 'f490dfe92971e572', + primary: 6, + nonce: 'c4bea6633614241c', }, tx: [], - confirmations: 294767, - nextblockhash: '0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae', + confirmations: 44876, + nextblockhash: '0x1fc795278c20f9a50ce6b9a9a2617ce2bb94e05c9737b7e94a3124029f3a786f', }; export const thirdBlockJSON = { - hash: '0x84fa4b26af4b00095d66714a3a2ec63acdeff7ae27ca5d4f6cbe5db2691d7fae', + hash: '0x1fc795278c20f9a50ce6b9a9a2617ce2bb94e05c9737b7e94a3124029f3a786f', size: 700, version: 0, - previousblockhash: '0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5', - merkleroot: '0x905819ef1743d2f7e522dacc90a365dd7e872ebdee74f2dfcad61d5089dc9f64', - time: 1596537468402, + previousblockhash: '0x2cf3b022f8ef6b863f47746ce9a9e38e3f1762ea47f3ede3be81118c1fa1ee24', + merkleroot: '0x89378f1c6005485d124c1eae9fc82e8639fb7a5b4e167c15305edec80c81fac0', + time: 1608609583168, index: 2, nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', witnesses: [ { invocation: - 'DEC3IxKTiG/yHShrtaN2aDBWLCoiLCvaUHmir1TovNGookWVKqB6NxwJb1capeJk50HtWntpz4B/k0oDd9Y33F8xDEDikpijBQ+rl4WJCHN7DPumv8OvtBhszmDKqX3wEJyaKAUL8rLsncDbsgIwJTxPyMUDIrU8BbVIEYDAH0KvB5AfDECcu9VKxSaC5mJdWvwguqw74ZU31UIG2cn5FMGg/EPMwFQeJEW/HTZNIIJNvE8lQ5i6C7wZ5QJFRLXavqDwvO+TDEBokh+09rXIVbcmzGBqddJ+Kq9mp7UAH9XTcTtDiQaeKQ39krUyySuaUjZm54kHsi70OsAqkK+hfSIpYZ4qKLeUDEA5qVvZMvHzv9NR6ekPvKpTquy32qgY+quCJt1BSeBaOGAZ4wTVs3Guw+HvFfarRPORYy186jVzQM1tAbPR+oiQ', + '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: 1, - nonce: '3b23f5541d704aaa', + primary: 2, + nonce: 'eff262be7f3dfa91', }, tx: [], - confirmations: 311250, - nextblockhash: '0xfd4d6fdf33eaec2d574590af1c8cbfcaa9d990b4ecc1cf0e60670b951be214a2', + confirmations: 44886, + nextblockhash: '0x84ba503f0a990cdaa0f1336f375d6b382f0728a63ea4c3cf7fc958d578cef8f0', }; export const debugBlockJSON = { diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts index ad2e704c56..1600ba30a5 100644 --- a/packages/neo-one-node/src/__tests__/blockchain.test.ts +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -1,6 +1,6 @@ import { common, ScriptBuilder } from '@neo-one/client-common'; import { Blockchain } from '@neo-one/node-blockchain'; -import { ContractState } from '@neo-one/node-core'; +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'; @@ -9,6 +9,7 @@ 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) => { @@ -31,11 +32,12 @@ const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; re .on('end', resolve); }); -describe.skip('Blockchain invocation / storage tests', () => { - test('dispatcher can retrieve logs after invocation', async () => { +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, @@ -59,14 +61,13 @@ describe.skip('Blockchain invocation / storage tests', () => { native, }); - const builder = new ScriptBuilder(); - builder.emitSysCall('System.Runtime.Log', 'Hello world!'); - const script = builder.build(); + await blockchain.persistBlock({ block: blockData.secondBlock }); + + expect(blockchain.currentBlockIndex).toEqual(1); - const result = blockchain.invokeScript(script); + await blockchain.persistBlock({ block: blockData.thirdBlock }); - expect(result.logs.length).toEqual(1); - expect(result.logs[0].message).toEqual('Hello world!'); + expect(blockchain.currentBlockIndex).toEqual(2); }); }); @@ -76,6 +77,23 @@ describe('VM memory store for testing', () => { 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: { @@ -95,23 +113,15 @@ describe('VM memory store for testing', () => { storage, vm: dispatcher, native, + onPersist, }); - const changes = await 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)); - }); - - dispatcher.updateStore(changes); - await blockchain.persistBlock({ block: blockData.secondBlock }); expect(blockchain.currentBlockIndex).toEqual(1); + + await blockchain.persistBlock({ block: blockData.thirdBlock }); + + expect(blockchain.currentBlockIndex).toEqual(2); }); }); From d6dfb55bb60818ac7eb56eed6317199563061d32 Mon Sep 17 00:00:00 2001 From: Daniel Byrne Date: Tue, 5 Jan 2021 16:12:14 -0800 Subject: [PATCH 141/141] feat(node): Update all native contracts for preview4 changes --- packages/neo-one-client-common/src/crypto.ts | 10 ++ .../neo-one-client-common/src/models/types.ts | 1 + .../src/models/ContractStateModel.ts | 20 +-- .../neo-one-node-core/src/ContractState.ts | 52 +++--- .../neo-one-node-core/src/DesignationRole.ts | 4 + packages/neo-one-node-core/src/Native.ts | 39 +++- .../neo-one-node-core/src/OracleRequest.ts | 62 +++++++ packages/neo-one-node-core/src/index.ts | 2 + .../src/manifest/ContractManifest.ts | 18 +- .../src/CachedCommittee.ts | 31 ++++ .../src/DesignationContract.ts | 63 +++++++ packages/neo-one-node-native/src/GASToken.ts | 8 +- .../neo-one-node-native/src/KeyBuilder.ts | 14 ++ .../src/ManagementContract.ts | 42 +++++ packages/neo-one-node-native/src/NEOToken.ts | 169 +++++++++++------- .../src/NativeContainer.ts | 9 + .../neo-one-node-native/src/NativeContract.ts | 8 +- .../src/{Nep5.ts => Nep17.ts} | 18 +- .../neo-one-node-native/src/OracleContract.ts | 95 ++++++++++ packages/neo-one-node-native/src/Policy.ts | 35 +++- packages/neo-one-node-native/src/index.ts | 2 +- packages/neo-one-node-vm/lib/Dispatcher.cs | 2 +- .../src/__tests__/Dispatcher.test.ts | 4 + 23 files changed, 554 insertions(+), 154 deletions(-) create mode 100644 packages/neo-one-node-core/src/DesignationRole.ts create mode 100644 packages/neo-one-node-core/src/OracleRequest.ts create mode 100644 packages/neo-one-node-native/src/CachedCommittee.ts create mode 100644 packages/neo-one-node-native/src/DesignationContract.ts create mode 100644 packages/neo-one-node-native/src/ManagementContract.ts rename packages/neo-one-node-native/src/{Nep5.ts => Nep17.ts} (66%) create mode 100644 packages/neo-one-node-native/src/OracleContract.ts diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index f2cd912838..fdb684dd72 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -187,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)); @@ -891,6 +900,7 @@ export const crypto = { verify, privateKeyToPublicKey, toScriptHash, + getContractHash, toECPoint, createKeyPair, scriptHashToAddress, diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index 05fdfe479a..9d6085cf31 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -389,6 +389,7 @@ export interface ContractParameterDefinitionJSON { export interface ContractJSON { readonly id: number; + readonly updatecounter: number; readonly hash: string; readonly script: string; readonly manifest: ContractManifestJSON; diff --git a/packages/neo-one-client-full-common/src/models/ContractStateModel.ts b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts index ee418e1f6d..b2d5c6e11b 100644 --- a/packages/neo-one-client-full-common/src/models/ContractStateModel.ts +++ b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts @@ -1,28 +1,26 @@ -import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire } from '@neo-one/client-common'; 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 - implements SerializableWire { +export class ContractStateModel { public readonly id: number; + public readonly updateCounter: number; + public readonly hash: UInt160; public readonly script: Buffer; public readonly manifest: TContractManifest; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public constructor({ script, manifest, id }: ContractStateModelAdd) { + public constructor({ script, hash, manifest, id, updateCounter }: ContractStateModelAdd) { this.id = id; + this.updateCounter = updateCounter; + this.hash = hash; this.script = script; this.manifest = manifest; } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt32LE(this.id); - writer.writeVarBytesLE(this.script); - this.manifest.serializeWireBase(writer); - } } diff --git a/packages/neo-one-node-core/src/ContractState.ts b/packages/neo-one-node-core/src/ContractState.ts index d01606648e..a630a6c903 100644 --- a/packages/neo-one-node-core/src/ContractState.ts +++ b/packages/neo-one-node-core/src/ContractState.ts @@ -1,19 +1,14 @@ -import { - common, - ContractJSON, - createSerializeWire, - crypto, - IOHelper, - JSONHelper, - UInt160, -} from '@neo-one/client-common'; +import { common, ContractJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; import { ContractStateModel } from '@neo-one/client-full-common'; import { ContractManifest } from './manifest'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; -import { BinaryReader, utils } from './utils'; +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; } @@ -21,37 +16,27 @@ export interface ContractStateAdd { export type ContractKey = UInt160; export class ContractState extends ContractStateModel { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractState { - const { reader } = options; - const id = reader.readInt32LE(); - const script = reader.readVarBytesLE(); - const manifest = ContractManifest.deserializeWireBase(options); + 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 this({ + return new ContractState({ id, + updateCounter, + hash, script, manifest, }); } - public static deserializeWire(options: DeserializeWireOptions): ContractState { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - private readonly scriptHashInternal = utils.lazy(() => common.asUInt160(crypto.hash160(this.script))); private readonly sizeInternal = utils.lazy( () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfVarBytesLE(this.script) + this.manifest.size, ); - public get scriptHash() { - return this.scriptHashInternal(); - } - public get size() { return this.sizeInternal(); } @@ -59,6 +44,8 @@ export class ContractState extends ContractStateModel { public clone() { return new ContractState({ id: this.id, + updateCounter: this.updateCounter, + hash: this.hash, script: this.script, manifest: this.manifest, }); @@ -67,7 +54,8 @@ export class ContractState extends ContractStateModel { public serializeJSON(): ContractJSON { return { id: this.id, - hash: JSONHelper.writeUInt160(this.scriptHash), + 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/Native.ts b/packages/neo-one-node-core/src/Native.ts index c63820a9bd..68bc3c2ad3 100644 --- a/packages/neo-one-node-core/src/Native.ts +++ b/packages/neo-one-node-core/src/Native.ts @@ -3,6 +3,11 @@ 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; @@ -13,7 +18,7 @@ export interface NativeContract { readonly name: string; } -export interface NEP5NativeContract extends NativeContract { +export interface NEP17NativeContract extends NativeContract { readonly symbol: string; readonly decimals: number; @@ -21,14 +26,16 @@ export interface NEP5NativeContract extends NativeContract { readonly balanceOf: (storage: NativeContractStorageContext, account: UInt160) => Promise; } -export interface GASContract extends NEP5NativeContract {} +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 getBlockedAccounts: (storage: NativeContractStorageContext) => Promise; + readonly getExecFeeFactor: (storage: NativeContractStorageContext) => Promise; + readonly getStoragePrice: (storage: NativeContractStorageContext) => Promise; + readonly isBlocked: (storage: NativeContractStorageContext, account: UInt160) => Promise; } export interface Candidate { @@ -36,21 +43,43 @@ export interface Candidate { readonly votes: BN; } -export interface NEOContract extends NEP5NativeContract { +export interface NEOContract extends NEP17NativeContract { readonly totalAmount: BN; readonly effectiveVoterTurnout: number; readonly totalSupply: () => Promise; readonly getCandidates: (storage: NativeContractStorageContext) => Promise; - readonly getValidators: (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/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/index.ts b/packages/neo-one-node-core/src/index.ts index d14f6afea3..040a19d6ec 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -16,7 +16,9 @@ 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'; diff --git a/packages/neo-one-node-core/src/manifest/ContractManifest.ts b/packages/neo-one-node-core/src/manifest/ContractManifest.ts index d9159f8e3f..474a90b3c7 100644 --- a/packages/neo-one-node-core/src/manifest/ContractManifest.ts +++ b/packages/neo-one-node-core/src/manifest/ContractManifest.ts @@ -1,24 +1,14 @@ import { ContractManifestJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; -import { ContractManifestModel, getContractProperties } from '@neo-one/client-full-common'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +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 deserializeWireBase(options: DeserializeWireBaseOptions): ContractManifest { - const { reader } = options; - const json = JSON.parse(reader.readVarString(this.maxLength)); - - return this.deserializeJSON(json); - } - - public static deserializeWire(options: DeserializeWireOptions): ContractManifest { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); + public static parseBytes(bytes: Buffer) { + const reader = new BinaryReader(bytes); + return this.deserializeJSON(JSON.parse(reader.readVarString(this.maxLength))); } private static deserializeJSON(json: ContractManifestJSON) { 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 index 64ac350091..b67ec8b229 100644 --- a/packages/neo-one-node-native/src/GASToken.ts +++ b/packages/neo-one-node-native/src/GASToken.ts @@ -1,12 +1,12 @@ -import { NEP5NativeContract } from './Nep5'; +import { NEP17NativeContract } from './Nep17'; -export class GASToken extends NEP5NativeContract { +export class GASToken extends NEP17NativeContract { public static readonly decimals: number = 8; public constructor() { super({ id: -2, - name: 'GAS', - symbol: 'gas', + 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 index 03750d6348..c06eb9ebd6 100644 --- a/packages/neo-one-node-native/src/KeyBuilder.ts +++ b/packages/neo-one-node-native/src/KeyBuilder.ts @@ -1,4 +1,5 @@ import { SerializableWire, StorageKey } from '@neo-one/node-core'; +import { BN } from 'bn.js'; export class KeyBuilder { private readonly id: number; @@ -26,6 +27,19 @@ export class KeyBuilder { 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); } 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 index 426b0f1887..3c9b909c3d 100644 --- a/packages/neo-one-node-native/src/NEOToken.ts +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -4,10 +4,25 @@ import { BN } from 'bn.js'; import _ from 'lodash'; import { filter, map, toArray } from 'rxjs/operators'; import { CandidateState, NEOAccountState } from './AccountStates'; -import { GASToken } from './GASToken'; -import { NEP5NativeContract } from './Nep5'; +import { NEP17NativeContract } from './Nep17'; +import { CachedCommittee } from './CachedCommittee'; -export class NEOToken extends NEP5NativeContract { +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; @@ -16,14 +31,22 @@ export class NEOToken extends NEP5NativeContract { private readonly prefixes = { votersCount: Buffer.from([1]), candidate: Buffer.from([33]), - nextValidators: Buffer.from([14]), + 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: 'NEO', - symbol: 'neo', + name: 'NeoToken', + symbol: 'NEO', decimals: 0, }); @@ -46,74 +69,59 @@ export class NEOToken extends NEP5NativeContract { state: utils.getInteroperable(value, CandidateState.fromStackItem), })), filter((value) => value.state.registered), - // tslint:disable-next-line: no-useless-cast map(({ point, state }) => ({ publicKey: point, votes: state.votes })), toArray(), ) .toPromise(); } - public async getValidators(storage: NativeContractStorageContext): Promise { - const members = await this.getCommitteeMembers(storage); - - return members.slice(0, this.settings.validatorsCount).sort(common.ecPointCompare); - } - public async getCommittee(storage: NativeContractStorageContext): Promise { - // tslint:disable-next-line: prefer-immediate-return - const members = await this.getCommitteeMembers(storage); + const cache = await this.getCommitteeFromCache(storage); - return members.slice().sort(common.ecPointCompare); + return cache.members.map(({ publicKey }) => publicKey).sort(common.ecPointCompare); } public async getCommitteeAddress(storage: NativeContractStorageContext): Promise { - const committees = await this.getCommittee(storage); + const committee = await this.getCommittee(storage); return crypto.toScriptHash( - crypto.createMultiSignatureRedeemScript(committees.length - (committees.length - 1) / 2, committees), + 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.accountPrefix).addBuffer(account).toStorageKey()); + 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(state.balance, state.balanceHeight.toNumber(), end); - } - - public async getNextBlockValidators({ storages }: NativeContractStorageContext): Promise { - const key = this.createStorageKey(this.prefixes.nextValidators).toStorageKey(); - const storage = await storages.tryGet(key); - if (storage === undefined) { - return this.settings.standbyValidators; - } - - return utils.getSerializableArrayFromStorageItem(storage, (reader) => reader.readECPoint()); + return this.calculateBonus({ + storages, + vote: state.voteTo, + value: state.balance, + start: state.balanceHeight.toNumber(), + end, + }); } - private async getCommitteeMembers(storage: NativeContractStorageContext): Promise { - const item = await storage.storages.get(this.createStorageKey(this.prefixes.votersCount).toStorageKey()); - const votersCount = new BN(item.value, 'le').toNumber(); - const voterTurnout = votersCount / this.totalAmount.toNumber(); - if (voterTurnout < this.effectiveVoterTurnout) { - return this.settings.standbyCommittee; - } - - const candidates = await this.getCandidates(storage); - if (candidates.length < this.settings.committeeMembersCount) { - return this.settings.standbyCommittee; - } + public async getNextBlockValidators(storage: NativeContractStorageContext): Promise { + const committeeCache = await this.getCommitteeFromCache(storage); - return _.sortBy(candidates, ['votes', ({ publicKey }) => common.ecPointToHex(publicKey)]) + return _.take(committeeCache.members, this.settings.validatorsCount) .map(({ publicKey }) => publicKey) - .slice(0, this.settings.committeeMembersCount); + .sort(common.ecPointCompare); } - private calculateBonus(value: BN, start: number, end: number) { + private async calculateBonus({ storages, vote, value, start, end }: CalculateBonusOptions) { if (value.isZero() || start >= end) { return new BN(0); } @@ -122,32 +130,55 @@ export class NEOToken extends NEP5NativeContract { throw new Error('negative value not supported'); } - let amount = new BN(0); - let ustart = Math.floor(start / this.settings.decrementInterval); - if (ustart < this.settings.generationAmount.length) { - let istart = start % this.settings.decrementInterval; - let uend = Math.floor(end / this.settings.decrementInterval); - let iend = end % this.settings.decrementInterval; - if (uend >= this.settings.generationAmount.length) { - uend = this.settings.generationAmount.length; - iend = 0; - } - if (iend === 0) { - uend -= 1; - iend = this.settings.decrementInterval; - } - // tslint:disable-next-line: no-loop-statement - while (ustart < uend) { - amount = amount.addn((this.settings.decrementInterval - istart) * this.settings.generationAmount[ustart]); - ustart += 1; - istart = 0; + 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; } - amount = amount.addn((iend - istart) * this.settings.generationAmount[ustart]); } - return common - .fixedFromDecimal(amount.mul(value), GASToken.decimals) - .mul(new BN(10 ** GASToken.decimals)) - .div(this.totalAmount); + 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 index 3f17aa255e..3bc4fc14da 100644 --- a/packages/neo-one-node-native/src/NativeContainer.ts +++ b/packages/neo-one-node-native/src/NativeContainer.ts @@ -2,15 +2,24 @@ 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 index 363d4ea68d..b0b687ebbd 100644 --- a/packages/neo-one-node-native/src/NativeContract.ts +++ b/packages/neo-one-node-native/src/NativeContract.ts @@ -1,4 +1,4 @@ -import { crypto, ScriptBuilder, UInt160 } from '@neo-one/client-common'; +import { crypto, ScriptBuilder, UInt160, common } from '@neo-one/client-common'; import { KeyBuilder } from './KeyBuilder'; export interface NativeContractAdd { @@ -11,6 +11,8 @@ export abstract class NativeContract { 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; @@ -18,10 +20,10 @@ export abstract class NativeContract { const builder = new ScriptBuilder(); builder.emitPushString(this.name); - builder.emitSysCall('Neo.Native.Call'); + builder.emitSysCall('System.Contract.CallNative'); this.script = builder.build(); - this.hash = crypto.toScriptHash(this.script); + this.hash = crypto.getContractHash(common.ZERO_UINT160, this.script); } protected createStorageKey(prefix: Buffer) { diff --git a/packages/neo-one-node-native/src/Nep5.ts b/packages/neo-one-node-native/src/Nep17.ts similarity index 66% rename from packages/neo-one-node-native/src/Nep5.ts rename to packages/neo-one-node-native/src/Nep17.ts index 642c6fbcb8..c653725c41 100644 --- a/packages/neo-one-node-native/src/Nep5.ts +++ b/packages/neo-one-node-native/src/Nep17.ts @@ -3,20 +3,22 @@ import { NativeContractStorageContext } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { NativeContract, NativeContractAdd } from './NativeContract'; -export interface NEP5NativeContractAdd extends NativeContractAdd { +export interface NEP17NativeContractAdd extends NativeContractAdd { readonly symbol: string; readonly decimals: number; } -export abstract class NEP5NativeContract extends NativeContract { +export abstract class NEP17NativeContract extends NativeContract { public readonly symbol: string; public readonly decimals: number; public readonly factor: BN; - protected readonly totalSupplyPrefix = Buffer.from([11]); - protected readonly accountPrefix = Buffer.from([20]); + protected readonly basePrefixes = { + totalSupply: Buffer.from([11]), + account: Buffer.from([20]), + }; - public constructor(options: NEP5NativeContractAdd) { + public constructor(options: NEP17NativeContractAdd) { super(options); this.symbol = options.symbol; this.decimals = options.decimals; @@ -24,7 +26,7 @@ export abstract class NEP5NativeContract extends NativeContract { } public async totalSupply({ storages }: NativeContractStorageContext): Promise { - const storage = await storages.tryGet(this.createStorageKey(this.totalSupplyPrefix).toStorageKey()); + const storage = await storages.tryGet(this.createStorageKey(this.basePrefixes.totalSupply).toStorageKey()); if (storage === undefined) { return new BN(0); } @@ -33,7 +35,9 @@ export abstract class NEP5NativeContract extends NativeContract { } public async balanceOf({ storages }: NativeContractStorageContext, account: UInt160): Promise { - const storage = await storages.tryGet(this.createStorageKey(this.accountPrefix).addBuffer(account).toStorageKey()); + const storage = await storages.tryGet( + this.createStorageKey(this.basePrefixes.totalSupply).addBuffer(account).toStorageKey(), + ); if (storage === undefined) { return new BN(0); } 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 index 9951682782..6d8b8fa174 100644 --- a/packages/neo-one-node-native/src/Policy.ts +++ b/packages/neo-one-node-native/src/Policy.ts @@ -1,5 +1,5 @@ import { common, UInt160 } from '@neo-one/client-common'; -import { NativeContractStorageContext, utils } from '@neo-one/node-core'; +import { NativeContractStorageContext } from '@neo-one/node-core'; import { BN } from 'bn.js'; import { GASToken } from './GASToken'; import { NativeContract } from './NativeContract'; @@ -12,12 +12,17 @@ export class PolicyContract extends NativeContract { 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: 'Policy', + name: 'PolicyContract', }); } @@ -57,12 +62,28 @@ export class PolicyContract extends NativeContract { return new BN(item.value); } - public async getBlockedAccounts({ storages }: NativeContractStorageContext): Promise { - const item = await storages.tryGet(this.createStorageKey(this.prefixes.blockedAccounts).toStorageKey()); - if (item !== undefined) { - return utils.getSerializableArrayFromStorageItem(item, (reader) => reader.readUInt160()); + public async getExecFeeFactor({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.execFeeFactor).toStorageKey()); + if (item === undefined) { + return this.defaultExecFeeFactor; } - return []; + 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 index 5a77ae007d..0c91f79dd7 100644 --- a/packages/neo-one-node-native/src/index.ts +++ b/packages/neo-one-node-native/src/index.ts @@ -4,5 +4,5 @@ export * from './KeyBuilder'; export * from './NativeContainer'; export * from './NativeContract'; export * from './NEOToken'; -export * from './Nep5'; +export * from './Nep17'; export * from './Policy'; diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs index 99f1b45c46..2e68662c36 100644 --- a/packages/neo-one-node-vm/lib/Dispatcher.cs +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -124,7 +124,7 @@ private bool _dispose() private dynamic _test() { - return this.snapshot.PersistingBlock.Index.ToString(); + return sizeof(uint); } private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts index c9c6c127b4..39398edc01 100644 --- a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -101,4 +101,8 @@ describe('Dispatcher Tests', () => { test('Dispatcher returns config without initializing config', () => { expect(dispatcher.getConfig()).toBeDefined(); }); + + test.only('test output only', () => { + console.log(dispatcher.test()); + }); });