diff --git a/.github/workflows/flow-and-lint.yml b/.github/workflows/flow-and-lint.yml index 85b6cdfab6..c53ccaf7c8 100644 --- a/.github/workflows/flow-and-lint.yml +++ b/.github/workflows/flow-and-lint.yml @@ -1,4 +1,4 @@ -name: Flow and lint +name: Flow and Lint and TSC on: workflow_dispatch: @@ -43,4 +43,7 @@ jobs: npm run flow - name: lint run: | - npm run eslint \ No newline at end of file + npm run eslint + - name: tsc + run: | + npm run tsc \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 606f2fa02c..347135abdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,8 @@ "": { "name": "root", "devDependencies": { + "@typescript-eslint/eslint-plugin": "^8.8.0", + "@typescript-eslint/parser": "^8.8.0", "concurrently": "^7.0.0", "husky": "4.3.8", "lerna": "^4.0.0", @@ -134,6 +136,33 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1543,6 +1572,232 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", + "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/type-utils": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz", + "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", + "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", @@ -2874,9 +3129,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3053,9 +3308,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" @@ -3070,6 +3325,18 @@ "node": ">=0.8.0" } }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -3773,6 +4040,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -5559,6 +5832,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6417,9 +6696,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "node_modules/picomatch": { @@ -7868,6 +8147,18 @@ "node": ">=8" } }, + "node_modules/ts-api-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", + "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", diff --git a/package.json b/package.json index eb31e1a028..1a20efb397 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "archive:src": "func() { git rev-parse HEAD > COMMIT && git rev-parse --abbrev-ref HEAD > BRANCH && git archive --format zip --add-file COMMIT --add-file BRANCH -o $1 HEAD && rm COMMIT BRANCH; }; func" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^8.8.0", + "@typescript-eslint/parser": "^8.8.0", "concurrently": "^7.0.0", "husky": "4.3.8", "lerna": "^4.0.0", diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index 429b1bed9a..daf725a62b 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -1,6 +1,7 @@ import path from 'path'; import { fileURLToPath } from 'url'; import { isMacOS } from '../utils/utils.js'; +import * as fs from 'node:fs'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -126,3 +127,9 @@ export const Colors = Object.freeze({ }); export const balanceReplacer = '******'; + +export const getSnapshotedMemo = () => { + const dbSnapshotPath = path.resolve(dbSnapshotsDir, 'testWallet1MemoAdded.indexedDB.json'); + const data = fs.readFileSync(dbSnapshotPath, 'utf8'); + return JSON.parse(data).TxMemo[0].value.Content; +}; diff --git a/packages/e2e-tests/helpers/customChecks.js b/packages/e2e-tests/helpers/customChecks.js index 87a3dd31d3..bf838a136e 100644 --- a/packages/e2e-tests/helpers/customChecks.js +++ b/packages/e2e-tests/helpers/customChecks.js @@ -8,7 +8,7 @@ import { AssertionError } from 'chai'; const compareArrayLength = (arrayOne, arrayTwo) => { if (arrayOne.length !== arrayTwo.length) { throw new AssertionError( - `The exported txs array and displayed txs array have different length. Exported: ${exportedTxs.length}, Displayed: ${displayedTxs.length}` + `The exported txs array and displayed txs array have different length. Exported: ${arrayOne.length}, Displayed: ${arrayTwo.length}` ); } }; diff --git a/packages/e2e-tests/helpers/messages.js b/packages/e2e-tests/helpers/messages.js index 6d05279816..382bf6e9d7 100644 --- a/packages/e2e-tests/helpers/messages.js +++ b/packages/e2e-tests/helpers/messages.js @@ -7,4 +7,4 @@ export const INVALID_AMOUNT = 'Invalid amount. Please retype.'; export const RECEIVER_DOESNT_EXIST = "Receiver address, ADA Handle or domain you entered doesn't exist. Please double-check it and try again"; export const INVALID_ADDRESS = 'Please enter a valid receiver address, ADA Handle or domain'; -export const NOT_ENOUGH_BALANCE = 'Not enough balance.'; +export const NOT_ENOUGH_BALANCE = 'Not enough balance'; diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppHelper.js b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppHelper.js index 33a17b474a..28c0d8faac 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppHelper.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppHelper.js @@ -30,7 +30,7 @@ export const connectNonAuth = async ( testWalettObj, checkBalance = true ) => { - await mockedDApp.requestNonAuthAccess(); + await mockedDApp.requestAccess(); const dappConnectPage = new DAppConnectWallet(webdriver, logger); // the window focus is switched to the pop-up here const popUpAppeared = await dappConnectPage.popUpIsDisplayed(windowManager); diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js b/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js index afb2b0e609..a2e9664230 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js @@ -6,7 +6,8 @@ import { getCSLPubKeyHash, getCslValue, getDRepIDHexAndBechFromHex, - mapCborUtxos, bytesToHex, + mapCborUtxos, + bytesToHex, } from './dAppTxHelper.js'; class MockDAppWebpageError extends Error {} @@ -22,13 +23,9 @@ export class MockDAppWebpage { this.logger = logger; } - async _requestAccess(auth = false) { - this.logger.info( - `MockDApp::_requestAccess Requesting the access ${auth ? 'with' : 'without'} authentication` - ); - const scriptString = `window.accessRequestPromise = cardano.yoroi.enable(${ - auth ? '{requestIdentification: true}' : '' - })`; + async requestAccess() { + this.logger.info(`MockDApp::requestAccess Requesting the access without authentication`); + const scriptString = `window.accessRequestPromise = cardano.yoroi.enable()`; await this.driver.executeScript(scriptString); } @@ -165,14 +162,6 @@ export class MockDAppWebpage { return addressesResult; } - async requestNonAuthAccess() { - await this._requestAccess(); - } - - async requestAuthAccess() { - await this._requestAccess(true); - } - async checkAccessRequest() { this.logger.info(`MockDApp::checkAccessRequest Checking the access request`); const accessResponse = await this.driver.executeAsyncScript((...args) => { @@ -639,7 +628,7 @@ export class MockDAppWebpage { } async getSigningDataCIP95Result() { - this.logger.info(`MockDApp::getSigningDataResult Getting signing data result`); + this.logger.info(`MockDApp::getSigningDataCIP95Result Getting signing data result`); const signingResult = await this.driver.executeAsyncScript((...args) => { const callback = args[args.length - 1]; window.signDataCIP95Promise @@ -656,7 +645,7 @@ export class MockDAppWebpage { }); }); this.logger.info( - `MockDApp::getSigningDataResult Signing data result: ${JSON.stringify(signingResult, null, 2)}` + `MockDApp::getSigningDataCIP95Result Signing data result: ${JSON.stringify(signingResult, null, 2)}` ); return signingResult; } diff --git a/packages/e2e-tests/helpers/restoreWalletHelper.js b/packages/e2e-tests/helpers/restoreWalletHelper.js index fda7e59f8c..be4ffdc5e9 100644 --- a/packages/e2e-tests/helpers/restoreWalletHelper.js +++ b/packages/e2e-tests/helpers/restoreWalletHelper.js @@ -1,4 +1,5 @@ import AddNewWallet from '../pages/addNewWallet.page.js'; +import BasePage from '../pages/basepage.js'; import RestoreWalletStepOne from '../pages/newWalletPages/restoreWalletSteps/restoreWalletStepOne.page.js'; import RestoreWalletStepTwo from '../pages/newWalletPages/restoreWalletSteps/restoreWalletStepTwo.page.js'; import WalletDetails from '../pages/newWalletPages/walletDetails.page.js'; @@ -8,7 +9,14 @@ import { expect } from 'chai'; import CreateWalletStepOne from '../pages/newWalletPages/createWalletSteps/createWalletStepOne.page.js'; import CreateWalletStepTwo from '../pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js'; import CreateWalletStepThree from '../pages/newWalletPages/createWalletSteps/createWalletStepThree.page.js'; -import { walletNameShortener } from '../utils/utils.js'; +import { isChrome, walletNameShortener } from '../utils/utils.js'; +import { + extensionTabName, + serviceWorkersLink, + serviceWorkersTabName, + WindowManager, +} from './windowManager.js'; +import { quarterSecond } from './timeConstants.js'; export const restoreWallet = async (webdriver, logger, testWallet, shouldBeModalWindow = true) => { const addNewWalletPage = new AddNewWallet(webdriver, logger); @@ -98,16 +106,84 @@ export const createWallet = async (webdriver, logger, testWalletName) => { }; export const preloadDBAndStorage = async (webdriver, logger, templateName) => { + logger.info(`--------------------- preloadDBAndStorage START ---------------------`); const addWalletPage = new AddNewWallet(webdriver, logger); const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; + expect(state, 'The Add new wallet page is not displayed').to.be.true; await addWalletPage.prepareDBAndStorage(templateName); - await addWalletPage.refreshPage(); + // It is necessary to re-run the service worker after loading info into the indexedDB + if (isChrome()) { + await restartServiceWorker(webdriver, logger); + } else { + await addWalletPage.refreshPage(); + } + logger.info(`--------------------- preloadDBAndStorage END ---------------------`); }; export const waitTxPage = async (webdriver, logger) => { const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitInitialWalletLoaderIsClosed(); await transactionsPage.waitPrepareWalletBannerIsClosed(); const txPageIsDisplayed = await transactionsPage.isDisplayed(); expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; }; + +export const restartServiceWorker = async (webdriver, logger) => { + logger.info(`--------------------- restartServiceWorker START ---------------------`); + const windowManager = new WindowManager(webdriver, logger); + windowManager.init(); + await windowManager.openNewTab(serviceWorkersTabName, serviceWorkersLink); + + const basepage = new BasePage(webdriver, logger); + await basepage.sleep(quarterSecond); + + const stopBtnLocator = { + locator: '.stop', + method: 'css', + }; + const btnLocator = { + locator: '//button', + method: 'xpath', + }; + + const stopBtnElems = await basepage.findElements(stopBtnLocator); + let stopBtnElem; + if (stopBtnElems.length === 1) { + stopBtnElem = stopBtnElems[0]; + } else { + stopBtnElem = stopBtnElems[1]; + } + await stopBtnElem.click(); + + await basepage.sleep(500); + + const allBtns = await basepage.findElements(btnLocator); + const startBtn = allBtns[7]; + await startBtn.click(); + + await basepage.sleep(500); + + await windowManager.closeTabWindow(serviceWorkersTabName, extensionTabName); + await basepage.refreshPage(); + logger.info(`--------------------- restartServiceWorker END ---------------------`); +}; + +export const collectInfo = async (mochaContext, webdriver, logger) => { + logger.info(`--------------------- collectInfo START ---------------------`); + const basepage = new BasePage(webdriver, logger); + basepage.takeScreenshot(mochaContext.test.parent.title, 'preparationSteps'); + basepage.takeSnapshot(mochaContext.test.parent.title, 'preparationSteps'); + basepage.getBrowserLogs(mochaContext.test.parent.title, 'preparationSteps'); + basepage.getDriverLogs(mochaContext.test.parent.title, 'preparationSteps'); + logger.info(`--------------------- collectInfo END ---------------------`); +}; + +export const prepareWallet = async (webdriver, logger, testWalletName, mochaContext) => { + try { + await preloadDBAndStorage(webdriver, logger, testWalletName); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(mochaContext, webdriver, logger); + throw new Error(error); + } +} diff --git a/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1.indexedDB.json b/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1.indexedDB.json index 53651af958..1c2fbf9cbf 100644 --- a/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1.indexedDB.json +++ b/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1.indexedDB.json @@ -3,1560 +3,2820 @@ "AccountingTransactionOutput": [], "Address": [ { - "id": 241, + "id": 129, "value": { "AddressId": 1, - "Digest": 6.380052592693652e179, + "Digest": -1.0927551216861975e-217, "Hash": "614eb5d5c69ae2abc533d44d615ea0f76f4f32317b2afde1592f7f9a48", "IsUsed": true, "Type": 3 } }, { - "id": 243, + "id": 131, "value": { "AddressId": 2, - "Digest": 7.229922786045467e37, + "Digest": 6.22558965669748e+25, "Hash": "014eb5d5c69ae2abc533d44d615ea0f76f4f32317b2afde1592f7f9a483522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": true, "Type": 1 } }, { - "id": 247, + "id": 135, "value": { "AddressId": 3, - "Digest": -8.232144619018239e153, + "Digest": -1.3012070534294923e+252, "Hash": "617c263f54c68fa8262ba376b32d66aff6bf2b8b2a90ae89cc47ce32ee", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 249, + "id": 137, "value": { "AddressId": 4, - "Digest": -1.7536720553897433e153, + "Digest": -5.601240210858296e-306, "Hash": "017c263f54c68fa8262ba376b32d66aff6bf2b8b2a90ae89cc47ce32ee3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 253, + "id": 141, "value": { "AddressId": 5, - "Digest": 5.047504275363617e131, + "Digest": 2.5398537085015456e+150, "Hash": "6152608b31a9ec714181a4ebe82ba9581905031f565b6cb3fc653aa495", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 255, + "id": 143, "value": { "AddressId": 6, - "Digest": 6.830081758857871e-107, + "Digest": 5.032588816518284e+231, "Hash": "0152608b31a9ec714181a4ebe82ba9581905031f565b6cb3fc653aa4953522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 259, + "id": 147, "value": { "AddressId": 7, - "Digest": 4.485845990792551e-138, + "Digest": -1.155961849227329e+202, "Hash": "618b5a52656d5fb7b9f84370819be274c15c398123ccd893b59dbe0679", "IsUsed": false, "Type": 3 } }, { - "id": 261, + "id": 149, "value": { "AddressId": 8, - "Digest": 6.8122010483248995e25, + "Digest": -1.4902125107352577e-61, "Hash": "018b5a52656d5fb7b9f84370819be274c15c398123ccd893b59dbe06793522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 265, + "id": 153, "value": { "AddressId": 9, - "Digest": 2.0221789718178016e229, + "Digest": -1.6654221532540137e+306, "Hash": "61c7a86cb39d94b7ce42ad1dd5c33890bbe8d9ddf057477aae7a57515a", "IsUsed": false, "Type": 3 } }, { - "id": 267, + "id": 155, "value": { "AddressId": 10, - "Digest": 2.550450492151412e-286, + "Digest": 4.885812291761545e-170, "Hash": "01c7a86cb39d94b7ce42ad1dd5c33890bbe8d9ddf057477aae7a57515a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 271, + "id": 159, "value": { "AddressId": 11, - "Digest": -5.3934969176723165e-205, + "Digest": -6.417730721384071e-279, "Hash": "61b7223dd5917a869240f78ab1f674165afc6c4745d06508cd84b37942", "IsUsed": false, "Type": 3 } }, { - "id": 273, + "id": 161, "value": { "AddressId": 12, - "Digest": 5.101364490555232e178, + "Digest": 9.680546718147597e-54, "Hash": "01b7223dd5917a869240f78ab1f674165afc6c4745d06508cd84b379423522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 277, + "id": 165, "value": { "AddressId": 13, - "Digest": 2.844517846040889e239, + "Digest": -3363218962303.332, "Hash": "61c52266eb79f6c6599534f2370ef4a36ce678c759dee76b67eca150d3", "IsUsed": false, "Type": 3 } }, { - "id": 279, + "id": 167, "value": { "AddressId": 14, - "Digest": 1.341631616271896e55, + "Digest": 3.6796239860117903e+171, "Hash": "01c52266eb79f6c6599534f2370ef4a36ce678c759dee76b67eca150d33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 283, + "id": 171, "value": { "AddressId": 15, - "Digest": -1.1344146685195727e-199, + "Digest": 3.900493690539932e-177, "Hash": "612e07f95d6ae57bb47883d45d22d49fa16f80461599e8bccd0049ce6d", "IsUsed": false, "Type": 3 } }, { - "id": 285, + "id": 173, "value": { "AddressId": 16, - "Digest": -1.0558856033234728e-282, + "Digest": -2.567704025382946e+150, "Hash": "012e07f95d6ae57bb47883d45d22d49fa16f80461599e8bccd0049ce6d3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 289, + "id": 177, "value": { "AddressId": 17, - "Digest": 1.2938570044771769e116, + "Digest": -141512413769.94565, "Hash": "61109dca29894d4f6a58d2952d4340262831a5e46d345d9ff00b5343b0", "IsUsed": false, "Type": 3 } }, { - "id": 291, + "id": 179, "value": { "AddressId": 18, - "Digest": 9.571382260264633e-269, + "Digest": -8.348655118153582e+67, "Hash": "01109dca29894d4f6a58d2952d4340262831a5e46d345d9ff00b5343b03522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 295, + "id": 183, "value": { "AddressId": 19, - "Digest": -2.977680641696503e95, + "Digest": -7.074021496763171e-63, "Hash": "61e351ff2e3e1e97c3be9908e68667d07bc3764514400e1f5f7d91d9bd", "IsUsed": false, "Type": 3 } }, { - "id": 297, + "id": 185, "value": { "AddressId": 20, - "Digest": 3.5467558778788136e-112, + "Digest": -2.5474115260062173e+239, "Hash": "01e351ff2e3e1e97c3be9908e68667d07bc3764514400e1f5f7d91d9bd3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 301, + "id": 189, "value": { "AddressId": 21, - "Digest": 2.111949471498054e220, + "Digest": 2.5487244151624387e-204, "Hash": "61a388849bdf01e3cd840a4c66e7ce955fe9c54562fcc7a8741e826b87", "IsUsed": false, "Type": 3 } }, { - "id": 303, + "id": 191, "value": { "AddressId": 22, - "Digest": 1.7247745643819718e-37, + "Digest": -1.9328036175683993e-169, "Hash": "01a388849bdf01e3cd840a4c66e7ce955fe9c54562fcc7a8741e826b873522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 307, + "id": 195, "value": { "AddressId": 23, - "Digest": -5.40318439232988e279, + "Digest": -1.1068965009546215e+196, "Hash": "6163af202d3a1a3ed9b403049d6e2650e5b93c040620a2fddc5f9abc46", "IsUsed": false, "Type": 3 } }, { - "id": 309, + "id": 197, "value": { "AddressId": 24, - "Digest": -1.1393402895433074e86, + "Digest": 1.7384627464254719e+146, "Hash": "0163af202d3a1a3ed9b403049d6e2650e5b93c040620a2fddc5f9abc463522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 313, + "id": 201, "value": { "AddressId": 25, - "Digest": -3.786472492277643e269, + "Digest": -7.881338882291193e+194, "Hash": "617d1922897a2312107cb17d531fad83c3c3c264fa7837a35c1c4a42c5", "IsUsed": false, "Type": 3 } }, { - "id": 315, + "id": 203, "value": { "AddressId": 26, - "Digest": -1.0391515953566685e-277, + "Digest": -1.1754336108906711e+205, "Hash": "017d1922897a2312107cb17d531fad83c3c3c264fa7837a35c1c4a42c53522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 319, + "id": 207, "value": { "AddressId": 27, - "Digest": 3.6895997735203905e-50, + "Digest": 7.235219593439043e-308, "Hash": "6124f57df2c3afc4cb19ba9d33e0ad8e8a6b7072aedc332806be517cb7", "IsUsed": false, "Type": 3 } }, { - "id": 321, + "id": 209, "value": { "AddressId": 28, - "Digest": 1.045830883351703e84, + "Digest": 4.801605274266194e+202, "Hash": "0124f57df2c3afc4cb19ba9d33e0ad8e8a6b7072aedc332806be517cb73522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 325, + "id": 213, "value": { "AddressId": 29, - "Digest": -9.63785455780804e135, + "Digest": 8.179685059463519e+67, "Hash": "61f3440d5a9dac2559efe49fd44d6bf0feab120e82387f427938441449", "IsUsed": false, "Type": 3 } }, { - "id": 327, + "id": 215, "value": { "AddressId": 30, - "Digest": 1.6020837380194585e-105, + "Digest": -7.981545416259525e-72, "Hash": "01f3440d5a9dac2559efe49fd44d6bf0feab120e82387f4279384414493522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 331, + "id": 219, "value": { "AddressId": 31, - "Digest": -9.079459924596478e-54, + "Digest": -8.415365183619949e-216, "Hash": "6159a7c321146b06e4d2dee4b2b2216c77d78ad617705aaf11bb4c11d6", "IsUsed": false, "Type": 3 } }, { - "id": 333, + "id": 221, "value": { "AddressId": 32, - "Digest": 2.6874536696483203e97, + "Digest": -2.990635907994736e+144, "Hash": "0159a7c321146b06e4d2dee4b2b2216c77d78ad617705aaf11bb4c11d63522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 337, + "id": 225, "value": { "AddressId": 33, - "Digest": -1.642140329507171e108, + "Digest": -2.5207384074556977e-177, "Hash": "6103ac559eae4ddf3a052ba8e0bd392ad439546b02b1a64bbe3bf13dcd", "IsUsed": false, "Type": 3 } }, { - "id": 339, + "id": 227, "value": { "AddressId": 34, - "Digest": -1.2642643213372364e-188, + "Digest": -7.424259741315881e+147, "Hash": "0103ac559eae4ddf3a052ba8e0bd392ad439546b02b1a64bbe3bf13dcd3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 343, + "id": 231, "value": { "AddressId": 35, - "Digest": 1.0024224248301637e74, + "Digest": -1.7804130726215497e-87, "Hash": "616da6e93617a60a110d00ce7d821d910a741787628e55724bd8a8be95", "IsUsed": false, "Type": 3 } }, { - "id": 345, + "id": 233, "value": { "AddressId": 36, - "Digest": -4.105647642042466e287, + "Digest": -2.283513166864087e+112, "Hash": "016da6e93617a60a110d00ce7d821d910a741787628e55724bd8a8be953522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 349, + "id": 237, "value": { "AddressId": 37, - "Digest": 3.8994874645751513e24, + "Digest": -4.4660283720170545e-220, "Hash": "61aadec732abb4da2f4c3e813617c40813da1526d6fe622f87304b7211", "IsUsed": false, "Type": 3 } }, { - "id": 351, + "id": 239, "value": { "AddressId": 38, - "Digest": 1.0869978832987863e30, + "Digest": 8.435351453151705e-240, "Hash": "01aadec732abb4da2f4c3e813617c40813da1526d6fe622f87304b72113522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 355, + "id": 243, "value": { "AddressId": 39, - "Digest": 6.680112625201024e-157, + "Digest": -1.6112950309182244e-131, "Hash": "61d114034e10adf788262242af4cea7149f2a664cb44d4a08a65c93f73", "IsUsed": false, "Type": 3 } }, { - "id": 357, + "id": 245, "value": { "AddressId": 40, - "Digest": -9.342753509994841e-110, + "Digest": -3.0091600639203495e-307, "Hash": "01d114034e10adf788262242af4cea7149f2a664cb44d4a08a65c93f733522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 363, + "id": 251, "value": { "AddressId": 41, - "Digest": -1.738443432070536e-275, + "Digest": 2.084319479070888e+230, "Hash": "614392a2da496fcbdf4d33ce59af500fd4a3672b9098c963e51cbb2953", "IsUsed": true, "Type": 3 } }, { - "id": 365, + "id": 253, "value": { "AddressId": 42, - "Digest": 147928575774080960000, + "Digest": -7.019419085566934e-13, "Hash": "014392a2da496fcbdf4d33ce59af500fd4a3672b9098c963e51cbb29533522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": true, "Type": 1 } }, { - "id": 369, + "id": 257, "value": { "AddressId": 43, - "Digest": 2.6578588702659997e-224, + "Digest": -8.033304935425561e+215, "Hash": "6111a13c41942a9ebfc74f3ee64c6f2dfb1a2ae0021c0d008232e44806", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 371, + "id": 259, "value": { "AddressId": 44, - "Digest": -3.5312576323729524e-183, + "Digest": -4.259883805754295e-214, "Hash": "0111a13c41942a9ebfc74f3ee64c6f2dfb1a2ae0021c0d008232e448063522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 375, + "id": 263, "value": { "AddressId": 45, - "Digest": -4.5657133864069804e-282, + "Digest": 1.2824552980381717e+39, "Hash": "61216e76cd8e778650e2c62babbd2ffcbef14d59726d59decececc91f3", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 377, + "id": 265, "value": { "AddressId": 46, - "Digest": -4.677918786370773e-131, + "Digest": -3.410439804540071e-292, "Hash": "01216e76cd8e778650e2c62babbd2ffcbef14d59726d59decececc91f33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 381, + "id": 269, "value": { "AddressId": 47, - "Digest": 1.1209511401034808e210, + "Digest": 1.0671793962995673e+71, "Hash": "61da521f8226a768cf03f8c8aae1ac8cb7f47a18a18a9031f6ffa8b5cb", "IsUsed": false, "Type": 3 } }, { - "id": 383, + "id": 271, "value": { "AddressId": 48, - "Digest": -1.6056533421094645e-249, + "Digest": 7.054993870779389e-261, "Hash": "01da521f8226a768cf03f8c8aae1ac8cb7f47a18a18a9031f6ffa8b5cb3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 387, + "id": 275, "value": { "AddressId": 49, - "Digest": -1.0644984427448559e245, + "Digest": 1.6699965527924884e+258, "Hash": "619712d62dda90d97044735200e42c9467d7c3febebc3a777c6d2f415a", "IsUsed": false, "Type": 3 } }, { - "id": 389, + "id": 277, "value": { "AddressId": 50, - "Digest": -1.0841293954569818e160, + "Digest": 1.944842966127378e-202, "Hash": "019712d62dda90d97044735200e42c9467d7c3febebc3a777c6d2f415a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 393, + "id": 281, "value": { "AddressId": 51, - "Digest": -5.269376063154755e-290, + "Digest": 1.8788769731032564e-39, "Hash": "613758b8ffec90ae73a50c6b5bcf2b91a578afccb022586542adf9a353", "IsUsed": false, "Type": 3 } }, { - "id": 395, + "id": 283, "value": { "AddressId": 52, - "Digest": -1.36734901430298e-261, + "Digest": 1.6703325986788897e+179, "Hash": "013758b8ffec90ae73a50c6b5bcf2b91a578afccb022586542adf9a3533522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 399, + "id": 287, "value": { "AddressId": 53, - "Digest": -7.791922131646468e-199, + "Digest": 5.07297314665181e-22, "Hash": "61458c889cdff3e85ef206afc87434289c7648b90a8d99156eaaeb16f3", "IsUsed": false, "Type": 3 } }, { - "id": 401, + "id": 289, "value": { "AddressId": 54, - "Digest": -3.707416416635442e-103, + "Digest": -1.2075177597554205e+40, "Hash": "01458c889cdff3e85ef206afc87434289c7648b90a8d99156eaaeb16f33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 405, + "id": 293, "value": { "AddressId": 55, - "Digest": -5.58019595358433e140, + "Digest": -1.5457709086668971e+184, "Hash": "612b06586d435e35bb63b334b2f5c85ffdcc7a8dfd1bef0920da30bf76", "IsUsed": false, "Type": 3 } }, { - "id": 407, + "id": 295, "value": { "AddressId": 56, - "Digest": -1.1725614267644176e151, + "Digest": -1.3144578640757212e+267, "Hash": "012b06586d435e35bb63b334b2f5c85ffdcc7a8dfd1bef0920da30bf763522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 411, + "id": 299, "value": { "AddressId": 57, - "Digest": 3.312158740927611e174, + "Digest": 2.6036866373587587e+177, "Hash": "6106c5b72183c0846e328614d0b9655dff0e414dd1e10df299116230d2", "IsUsed": false, "Type": 3 } }, { - "id": 413, + "id": 301, "value": { "AddressId": 58, - "Digest": 4.377991456109467e-52, + "Digest": 6.140178083492142e-63, "Hash": "0106c5b72183c0846e328614d0b9655dff0e414dd1e10df299116230d23522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 417, + "id": 305, "value": { "AddressId": 59, - "Digest": 1.7184970971608928e-211, + "Digest": -0.00005407346565105635, "Hash": "612f9e5fc54d46ed8538ed89846a0d64a5b7119034ada76f8b660cd49e", "IsUsed": false, "Type": 3 } }, { - "id": 419, + "id": 307, "value": { "AddressId": 60, - "Digest": 6.752711547512455e-66, + "Digest": -5.222881962474689e-238, "Hash": "012f9e5fc54d46ed8538ed89846a0d64a5b7119034ada76f8b660cd49e3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 423, + "id": 311, "value": { "AddressId": 61, - "Digest": 5.125346459754799e72, + "Digest": -5.4786410818004425e-247, "Hash": "614c50a95703a710d6d759e993f1019d9db489c4d72e38110d412c2584", "IsUsed": false, "Type": 3 } }, { - "id": 425, + "id": 313, "value": { "AddressId": 62, - "Digest": -1.3733628237722204e202, + "Digest": 2.072011415820509e+285, "Hash": "014c50a95703a710d6d759e993f1019d9db489c4d72e38110d412c25843522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 429, + "id": 317, "value": { "AddressId": 63, - "Digest": 1.2020976238853324e193, + "Digest": 3.651042786296267e+181, "Hash": "616f77ed384190886c95494159098793d352b527726d539d11311b6f7f", "IsUsed": false, "Type": 3 } }, { - "id": 431, + "id": 319, "value": { "AddressId": 64, - "Digest": 1.4341807314529186e285, + "Digest": 3.408104063110842e-170, "Hash": "016f77ed384190886c95494159098793d352b527726d539d11311b6f7f3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 435, + "id": 323, "value": { "AddressId": 65, - "Digest": -6.099303498554604e116, + "Digest": 1.974389471332861e-254, "Hash": "61dbf8357785da739695d7f0c90d559ab432f7c96956cda11dc2c9fd12", "IsUsed": false, "Type": 3 } }, { - "id": 437, + "id": 325, "value": { "AddressId": 66, - "Digest": 4.941660234493613e151, + "Digest": -6.001545588339516e-16, "Hash": "01dbf8357785da739695d7f0c90d559ab432f7c96956cda11dc2c9fd123522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 441, + "id": 329, "value": { "AddressId": 67, - "Digest": 6.980534651334454e-30, + "Digest": 1.3640297355569604e+137, "Hash": "61d4ec8ff0df21d83c9e49c7a0645d71180de138dc4fb8a990cfb39124", "IsUsed": false, "Type": 3 } }, { - "id": 443, + "id": 331, "value": { "AddressId": 68, - "Digest": 2.886222830597155e-177, + "Digest": 1.1524154961067613e-258, "Hash": "01d4ec8ff0df21d83c9e49c7a0645d71180de138dc4fb8a990cfb391243522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 447, + "id": 335, "value": { "AddressId": 69, - "Digest": -1.6114518712146622e-302, + "Digest": -3264.2170266629537, "Hash": "611c727ca88d2805864dcfeba3f6e750f1d4edcc1ceed9615663cd87f1", "IsUsed": false, "Type": 3 } }, { - "id": 449, + "id": 337, "value": { "AddressId": 70, - "Digest": 3.512552331782294e-29, + "Digest": -5.0857829592148484e+205, "Hash": "011c727ca88d2805864dcfeba3f6e750f1d4edcc1ceed9615663cd87f13522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 453, + "id": 341, "value": { "AddressId": 71, - "Digest": -1.1592285659406763e237, + "Digest": -1.3972249714678467e-252, "Hash": "611fa5e2016d11aa10401b5a8119bf28059604756e3ffceb789e53cd46", "IsUsed": false, "Type": 3 } }, { - "id": 455, + "id": 343, "value": { "AddressId": 72, - "Digest": -2.0156773896317508e-125, + "Digest": 4.949719754547849e+229, "Hash": "011fa5e2016d11aa10401b5a8119bf28059604756e3ffceb789e53cd463522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 459, + "id": 347, "value": { "AddressId": 73, - "Digest": 2.671659381923158e-183, + "Digest": -2.7328800085746878e-92, "Hash": "61c195204b8504e697fde3d028a7007f3ae30a2646fd6863f815b6f072", "IsUsed": false, "Type": 3 } }, { - "id": 461, + "id": 349, "value": { "AddressId": 74, - "Digest": 4.509047308275815e-29, + "Digest": -4.708563369522398e-209, "Hash": "01c195204b8504e697fde3d028a7007f3ae30a2646fd6863f815b6f0723522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 465, + "id": 353, "value": { "AddressId": 75, - "Digest": 6.79767440678701e179, + "Digest": -1.3086153304072972e-197, "Hash": "61a91d990207051f26a3ac3f9685459c5fcb9f34e185cf42cbaf587766", "IsUsed": false, "Type": 3 } }, { - "id": 467, + "id": 355, "value": { "AddressId": 76, - "Digest": -1.0451045696337937e-120, + "Digest": 5.410039890136715e-78, "Hash": "01a91d990207051f26a3ac3f9685459c5fcb9f34e185cf42cbaf5877663522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 471, + "id": 359, "value": { "AddressId": 77, - "Digest": 1.808844968378034e147, + "Digest": 4.1294254569370755e-256, "Hash": "61c5e12639034f258ca99e56d3bab3e4697f2001375ba3ca04d57e1e60", "IsUsed": false, "Type": 3 } }, { - "id": 473, + "id": 361, "value": { "AddressId": 78, - "Digest": -4.281417073658419e-223, + "Digest": -7.096071748551282e-83, "Hash": "01c5e12639034f258ca99e56d3bab3e4697f2001375ba3ca04d57e1e603522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 477, + "id": 365, "value": { "AddressId": 79, - "Digest": -6.628823752517654e-222, + "Digest": -2.412908904186126e+117, "Hash": "618b00e499c4bb114f5a99942082d217fc5c401ec0652c563c4da3a2c6", "IsUsed": false, "Type": 3 } }, { - "id": 479, + "id": 367, "value": { "AddressId": 80, - "Digest": 4.010878712840313e163, + "Digest": -6.137154840126145e-84, "Hash": "018b00e499c4bb114f5a99942082d217fc5c401ec0652c563c4da3a2c63522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 485, + "id": 373, "value": { "AddressId": 81, - "Digest": -1.421832940254618e170, + "Digest": -1.4149316953363696e-69, "Hash": "e13522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 4 } }, { - "id": 491, + "id": 379, "value": { "AddressId": 82, - "Digest": -2.58136402261292e-54, + "Digest": -1.841653773306769e-134, "Hash": "61bf3c15cca319dbba8f0d66b5943172758ce91826c4496f7eb5bbec6a", "IsUsed": false, "Type": 3 } }, { - "id": 493, + "id": 381, "value": { "AddressId": 83, - "Digest": 4.535833616086006e-265, + "Digest": 8.999499462654576e+209, "Hash": "01bf3c15cca319dbba8f0d66b5943172758ce91826c4496f7eb5bbec6a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 499, + "id": 387, "value": { "AddressId": 84, - "Digest": 5.79233518607557e166, + "Digest": -5.997743117164207e+184, "Hash": "617b41aef636877a9bdae5620cfd9851e1232b377217e8e07580108a40", "IsUsed": false, "Type": 3 } }, { - "id": 501, + "id": 389, "value": { "AddressId": 85, - "Digest": -5.834929129688963e238, + "Digest": 1.000343373489932e+284, "Hash": "017b41aef636877a9bdae5620cfd9851e1232b377217e8e07580108a403522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 507, + "id": 395, "value": { "AddressId": 86, - "Digest": 9.003355886391902e108, + "Digest": -4.854210547715842e+207, "Hash": "018425aa7efc8525af7365d03e7a11fb56fb19ea1a2b06c1b575f39b5e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", "IsUsed": false, "Type": 1 } }, { - "id": 508, + "id": 396, "value": { "AddressId": 87, - "Digest": -1.537835270484703e-219, + "Digest": -4.3268969479528315e+189, "Hash": "017180020fadc5f27c3c3ae306de55c02df0333b49d780dc9c1ca5296f208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", "IsUsed": false, "Type": 1 } - } - ], - "AddressMapping": [ - { "id": 242, "value": { "AddressId": 1, "AddressMappingId": 1, "KeyDerivationId": 6 } }, - { "id": 244, "value": { "AddressId": 2, "AddressMappingId": 2, "KeyDerivationId": 6 } }, - { "id": 248, "value": { "AddressId": 3, "AddressMappingId": 3, "KeyDerivationId": 7 } }, - { "id": 250, "value": { "AddressId": 4, "AddressMappingId": 4, "KeyDerivationId": 7 } }, - { "id": 254, "value": { "AddressId": 5, "AddressMappingId": 5, "KeyDerivationId": 8 } }, - { "id": 256, "value": { "AddressId": 6, "AddressMappingId": 6, "KeyDerivationId": 8 } }, - { "id": 260, "value": { "AddressId": 7, "AddressMappingId": 7, "KeyDerivationId": 9 } }, - { "id": 262, "value": { "AddressId": 8, "AddressMappingId": 8, "KeyDerivationId": 9 } }, - { "id": 266, "value": { "AddressId": 9, "AddressMappingId": 9, "KeyDerivationId": 10 } }, - { "id": 268, "value": { "AddressId": 10, "AddressMappingId": 10, "KeyDerivationId": 10 } }, - { "id": 272, "value": { "AddressId": 11, "AddressMappingId": 11, "KeyDerivationId": 11 } }, - { "id": 274, "value": { "AddressId": 12, "AddressMappingId": 12, "KeyDerivationId": 11 } }, - { "id": 278, "value": { "AddressId": 13, "AddressMappingId": 13, "KeyDerivationId": 12 } }, - { "id": 280, "value": { "AddressId": 14, "AddressMappingId": 14, "KeyDerivationId": 12 } }, - { "id": 284, "value": { "AddressId": 15, "AddressMappingId": 15, "KeyDerivationId": 13 } }, - { "id": 286, "value": { "AddressId": 16, "AddressMappingId": 16, "KeyDerivationId": 13 } }, - { "id": 290, "value": { "AddressId": 17, "AddressMappingId": 17, "KeyDerivationId": 14 } }, - { "id": 292, "value": { "AddressId": 18, "AddressMappingId": 18, "KeyDerivationId": 14 } }, - { "id": 296, "value": { "AddressId": 19, "AddressMappingId": 19, "KeyDerivationId": 15 } }, - { "id": 298, "value": { "AddressId": 20, "AddressMappingId": 20, "KeyDerivationId": 15 } }, - { "id": 302, "value": { "AddressId": 21, "AddressMappingId": 21, "KeyDerivationId": 16 } }, - { "id": 304, "value": { "AddressId": 22, "AddressMappingId": 22, "KeyDerivationId": 16 } }, - { "id": 308, "value": { "AddressId": 23, "AddressMappingId": 23, "KeyDerivationId": 17 } }, - { "id": 310, "value": { "AddressId": 24, "AddressMappingId": 24, "KeyDerivationId": 17 } }, - { "id": 314, "value": { "AddressId": 25, "AddressMappingId": 25, "KeyDerivationId": 18 } }, - { "id": 316, "value": { "AddressId": 26, "AddressMappingId": 26, "KeyDerivationId": 18 } }, - { "id": 320, "value": { "AddressId": 27, "AddressMappingId": 27, "KeyDerivationId": 19 } }, - { "id": 322, "value": { "AddressId": 28, "AddressMappingId": 28, "KeyDerivationId": 19 } }, - { "id": 326, "value": { "AddressId": 29, "AddressMappingId": 29, "KeyDerivationId": 20 } }, - { "id": 328, "value": { "AddressId": 30, "AddressMappingId": 30, "KeyDerivationId": 20 } }, - { "id": 332, "value": { "AddressId": 31, "AddressMappingId": 31, "KeyDerivationId": 21 } }, - { "id": 334, "value": { "AddressId": 32, "AddressMappingId": 32, "KeyDerivationId": 21 } }, - { "id": 338, "value": { "AddressId": 33, "AddressMappingId": 33, "KeyDerivationId": 22 } }, - { "id": 340, "value": { "AddressId": 34, "AddressMappingId": 34, "KeyDerivationId": 22 } }, - { "id": 344, "value": { "AddressId": 35, "AddressMappingId": 35, "KeyDerivationId": 23 } }, - { "id": 346, "value": { "AddressId": 36, "AddressMappingId": 36, "KeyDerivationId": 23 } }, - { "id": 350, "value": { "AddressId": 37, "AddressMappingId": 37, "KeyDerivationId": 24 } }, - { "id": 352, "value": { "AddressId": 38, "AddressMappingId": 38, "KeyDerivationId": 24 } }, - { "id": 356, "value": { "AddressId": 39, "AddressMappingId": 39, "KeyDerivationId": 25 } }, - { "id": 358, "value": { "AddressId": 40, "AddressMappingId": 40, "KeyDerivationId": 25 } }, - { "id": 364, "value": { "AddressId": 41, "AddressMappingId": 41, "KeyDerivationId": 27 } }, - { "id": 366, "value": { "AddressId": 42, "AddressMappingId": 42, "KeyDerivationId": 27 } }, - { "id": 370, "value": { "AddressId": 43, "AddressMappingId": 43, "KeyDerivationId": 28 } }, - { "id": 372, "value": { "AddressId": 44, "AddressMappingId": 44, "KeyDerivationId": 28 } }, - { "id": 376, "value": { "AddressId": 45, "AddressMappingId": 45, "KeyDerivationId": 29 } }, - { "id": 378, "value": { "AddressId": 46, "AddressMappingId": 46, "KeyDerivationId": 29 } }, - { "id": 382, "value": { "AddressId": 47, "AddressMappingId": 47, "KeyDerivationId": 30 } }, - { "id": 384, "value": { "AddressId": 48, "AddressMappingId": 48, "KeyDerivationId": 30 } }, - { "id": 388, "value": { "AddressId": 49, "AddressMappingId": 49, "KeyDerivationId": 31 } }, - { "id": 390, "value": { "AddressId": 50, "AddressMappingId": 50, "KeyDerivationId": 31 } }, - { "id": 394, "value": { "AddressId": 51, "AddressMappingId": 51, "KeyDerivationId": 32 } }, - { "id": 396, "value": { "AddressId": 52, "AddressMappingId": 52, "KeyDerivationId": 32 } }, - { "id": 400, "value": { "AddressId": 53, "AddressMappingId": 53, "KeyDerivationId": 33 } }, - { "id": 402, "value": { "AddressId": 54, "AddressMappingId": 54, "KeyDerivationId": 33 } }, - { "id": 406, "value": { "AddressId": 55, "AddressMappingId": 55, "KeyDerivationId": 34 } }, - { "id": 408, "value": { "AddressId": 56, "AddressMappingId": 56, "KeyDerivationId": 34 } }, - { "id": 412, "value": { "AddressId": 57, "AddressMappingId": 57, "KeyDerivationId": 35 } }, - { "id": 414, "value": { "AddressId": 58, "AddressMappingId": 58, "KeyDerivationId": 35 } }, - { "id": 418, "value": { "AddressId": 59, "AddressMappingId": 59, "KeyDerivationId": 36 } }, - { "id": 420, "value": { "AddressId": 60, "AddressMappingId": 60, "KeyDerivationId": 36 } }, - { "id": 424, "value": { "AddressId": 61, "AddressMappingId": 61, "KeyDerivationId": 37 } }, - { "id": 426, "value": { "AddressId": 62, "AddressMappingId": 62, "KeyDerivationId": 37 } }, - { "id": 430, "value": { "AddressId": 63, "AddressMappingId": 63, "KeyDerivationId": 38 } }, - { "id": 432, "value": { "AddressId": 64, "AddressMappingId": 64, "KeyDerivationId": 38 } }, - { "id": 436, "value": { "AddressId": 65, "AddressMappingId": 65, "KeyDerivationId": 39 } }, - { "id": 438, "value": { "AddressId": 66, "AddressMappingId": 66, "KeyDerivationId": 39 } }, - { "id": 442, "value": { "AddressId": 67, "AddressMappingId": 67, "KeyDerivationId": 40 } }, - { "id": 444, "value": { "AddressId": 68, "AddressMappingId": 68, "KeyDerivationId": 40 } }, - { "id": 448, "value": { "AddressId": 69, "AddressMappingId": 69, "KeyDerivationId": 41 } }, - { "id": 450, "value": { "AddressId": 70, "AddressMappingId": 70, "KeyDerivationId": 41 } }, - { "id": 454, "value": { "AddressId": 71, "AddressMappingId": 71, "KeyDerivationId": 42 } }, - { "id": 456, "value": { "AddressId": 72, "AddressMappingId": 72, "KeyDerivationId": 42 } }, - { "id": 460, "value": { "AddressId": 73, "AddressMappingId": 73, "KeyDerivationId": 43 } }, - { "id": 462, "value": { "AddressId": 74, "AddressMappingId": 74, "KeyDerivationId": 43 } }, - { "id": 466, "value": { "AddressId": 75, "AddressMappingId": 75, "KeyDerivationId": 44 } }, - { "id": 468, "value": { "AddressId": 76, "AddressMappingId": 76, "KeyDerivationId": 44 } }, - { "id": 472, "value": { "AddressId": 77, "AddressMappingId": 77, "KeyDerivationId": 45 } }, - { "id": 474, "value": { "AddressId": 78, "AddressMappingId": 78, "KeyDerivationId": 45 } }, - { "id": 478, "value": { "AddressId": 79, "AddressMappingId": 79, "KeyDerivationId": 46 } }, - { "id": 480, "value": { "AddressId": 80, "AddressMappingId": 80, "KeyDerivationId": 46 } }, - { "id": 486, "value": { "AddressId": 81, "AddressMappingId": 81, "KeyDerivationId": 48 } }, - { "id": 492, "value": { "AddressId": 82, "AddressMappingId": 82, "KeyDerivationId": 49 } }, - { "id": 494, "value": { "AddressId": 83, "AddressMappingId": 83, "KeyDerivationId": 49 } }, - { "id": 500, "value": { "AddressId": 84, "AddressMappingId": 84, "KeyDerivationId": 50 } }, - { "id": 502, "value": { "AddressId": 85, "AddressMappingId": 85, "KeyDerivationId": 50 } } - ], - "Bip44Account": [{ "id": 235, "value": { "Bip44AccountId": 1, "KeyDerivationId": 4 } }], - "Bip44Chain": [ - { "id": 239, "value": { "Bip44ChainId": 1, "DisplayCutoff": 1, "KeyDerivationId": 5 } }, - { "id": 361, "value": { "Bip44ChainId": 2, "DisplayCutoff": null, "KeyDerivationId": 26 } }, - { "id": 483, "value": { "Bip44ChainId": 3, "DisplayCutoff": null, "KeyDerivationId": 47 } } - ], - "Bip44Wrapper": [], - "Block": [ + }, { - "id": 509, + "id": 533, "value": { - "BlockId": 1, - "BlockTime": 1699864409000, - "Digest": -1.2539522861616603e-13, - "Hash": "3664bab92afb887173a2efe7031eb1110c3ae7942a0c2f32c487e82aaac8ea19", - "Height": 9541014, - "SlotNum": 108298118 + "AddressId": 88, + "Digest": 4.408246171827038e-253, + "Hash": "61b53e15326013c794ea5d0437a8f1773241b32b38628fc7eb654c9cb4", + "IsUsed": false, + "Type": 3 } }, { - "id": 519, + "id": 535, "value": { - "BlockId": 2, - "BlockTime": 1709816081000, - "Digest": 6.465949388494242e205, - "Hash": "510e0e94d2cc079ee57e6130bd26415b7895cec13f297136db5f442551484b1b", - "Height": 10025299, - "SlotNum": 118249790 + "AddressId": 89, + "Digest": 2.845949992276018e-130, + "Hash": "01b53e15326013c794ea5d0437a8f1773241b32b38628fc7eb654c9cb43522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 } - } - ], - "CanonicalAddress": [ - { "id": 245, "value": { "CanonicalAddressId": 1, "KeyDerivationId": 6 } }, - { "id": 251, "value": { "CanonicalAddressId": 2, "KeyDerivationId": 7 } }, - { "id": 257, "value": { "CanonicalAddressId": 3, "KeyDerivationId": 8 } }, - { "id": 263, "value": { "CanonicalAddressId": 4, "KeyDerivationId": 9 } }, - { "id": 269, "value": { "CanonicalAddressId": 5, "KeyDerivationId": 10 } }, - { "id": 275, "value": { "CanonicalAddressId": 6, "KeyDerivationId": 11 } }, - { "id": 281, "value": { "CanonicalAddressId": 7, "KeyDerivationId": 12 } }, - { "id": 287, "value": { "CanonicalAddressId": 8, "KeyDerivationId": 13 } }, - { "id": 293, "value": { "CanonicalAddressId": 9, "KeyDerivationId": 14 } }, - { "id": 299, "value": { "CanonicalAddressId": 10, "KeyDerivationId": 15 } }, - { "id": 305, "value": { "CanonicalAddressId": 11, "KeyDerivationId": 16 } }, - { "id": 311, "value": { "CanonicalAddressId": 12, "KeyDerivationId": 17 } }, - { "id": 317, "value": { "CanonicalAddressId": 13, "KeyDerivationId": 18 } }, - { "id": 323, "value": { "CanonicalAddressId": 14, "KeyDerivationId": 19 } }, - { "id": 329, "value": { "CanonicalAddressId": 15, "KeyDerivationId": 20 } }, - { "id": 335, "value": { "CanonicalAddressId": 16, "KeyDerivationId": 21 } }, - { "id": 341, "value": { "CanonicalAddressId": 17, "KeyDerivationId": 22 } }, - { "id": 347, "value": { "CanonicalAddressId": 18, "KeyDerivationId": 23 } }, - { "id": 353, "value": { "CanonicalAddressId": 19, "KeyDerivationId": 24 } }, - { "id": 359, "value": { "CanonicalAddressId": 20, "KeyDerivationId": 25 } }, - { "id": 367, "value": { "CanonicalAddressId": 21, "KeyDerivationId": 27 } }, - { "id": 373, "value": { "CanonicalAddressId": 22, "KeyDerivationId": 28 } }, - { "id": 379, "value": { "CanonicalAddressId": 23, "KeyDerivationId": 29 } }, - { "id": 385, "value": { "CanonicalAddressId": 24, "KeyDerivationId": 30 } }, - { "id": 391, "value": { "CanonicalAddressId": 25, "KeyDerivationId": 31 } }, - { "id": 397, "value": { "CanonicalAddressId": 26, "KeyDerivationId": 32 } }, - { "id": 403, "value": { "CanonicalAddressId": 27, "KeyDerivationId": 33 } }, - { "id": 409, "value": { "CanonicalAddressId": 28, "KeyDerivationId": 34 } }, - { "id": 415, "value": { "CanonicalAddressId": 29, "KeyDerivationId": 35 } }, - { "id": 421, "value": { "CanonicalAddressId": 30, "KeyDerivationId": 36 } }, - { "id": 427, "value": { "CanonicalAddressId": 31, "KeyDerivationId": 37 } }, - { "id": 433, "value": { "CanonicalAddressId": 32, "KeyDerivationId": 38 } }, - { "id": 439, "value": { "CanonicalAddressId": 33, "KeyDerivationId": 39 } }, - { "id": 445, "value": { "CanonicalAddressId": 34, "KeyDerivationId": 40 } }, - { "id": 451, "value": { "CanonicalAddressId": 35, "KeyDerivationId": 41 } }, - { "id": 457, "value": { "CanonicalAddressId": 36, "KeyDerivationId": 42 } }, - { "id": 463, "value": { "CanonicalAddressId": 37, "KeyDerivationId": 43 } }, - { "id": 469, "value": { "CanonicalAddressId": 38, "KeyDerivationId": 44 } }, - { "id": 475, "value": { "CanonicalAddressId": 39, "KeyDerivationId": 45 } }, - { "id": 481, "value": { "CanonicalAddressId": 40, "KeyDerivationId": 46 } }, - { "id": 487, "value": { "CanonicalAddressId": 41, "KeyDerivationId": 48 } }, - { "id": 495, "value": { "CanonicalAddressId": 42, "KeyDerivationId": 49 } }, - { "id": 503, "value": { "CanonicalAddressId": 43, "KeyDerivationId": 50 } } - ], - "Certificate": [], - "CertificateAddress": [], - "Cip1852Wrapper": [ + }, { - "id": 228, + "id": 539, "value": { - "ConceptualWalletId": 1, - "PrivateDeriverKeyDerivationId": 1, - "PrivateDeriverLevel": 0, - "PublicDeriverLevel": 3, - "RootKeyDerivationId": 1, - "SignerLevel": 0 + "AddressId": 90, + "Digest": -0.0008060465084998175, + "Hash": "618c8a54bd796c7d425e4983f8172e3abbec87d61141579a6e2c710eee", + "IsUsed": false, + "Type": 3 } - } - ], - "CoinTypeDerivation": [ - { "id": 232, "value": { "CoinTypeDerivationId": 1, "KeyDerivationId": 3 } } - ], - "ConceptualWallet": [ - { "id": 224, "value": { "ConceptualWalletId": 1, "Name": "TestWallet1", "NetworkId": 0 } } - ], - "EncryptionMeta": [ + }, { - "id": 93, + "id": 541, "value": { - "AddressSeed": 1033713417, - "BlockSeed": 763624740, - "EncryptionMetaId": 0, - "TokenSeed": 2585207091, - "TransactionSeed": 318293096 + "AddressId": 91, + "Digest": -2.1992936904414877e-148, + "Hash": "018c8a54bd796c7d425e4983f8172e3abbec87d61141579a6e2c710eee3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 } - } - ], - "Explorer": [ + }, { - "id": 99, + "id": 549, "value": { - "Endpoints": { - "address": "https://cardanoscan.io/address/", - "pool": "https://cardanoscan.io/pool/", - "stakeAddress": "https://cardanoscan.io/stakeKey/", - "token": "https://cardanoscan.io/token/", - "transaction": "https://cardanoscan.io/transaction/" - }, - "ExplorerId": 106, - "IsBackup": true, - "Name": "CardanoScan", - "NetworkId": 0 + "AddressId": 92, + "Digest": -1.1953609441422947e-211, + "Hash": "61236cd4aa6c16457c70aa0fd0ef6ffd03c6f69038f5c87f8c00c5caa9", + "IsUsed": false, + "Type": 3 } }, { - "id": 100, + "id": 551, "value": { - "Endpoints": { - "address": "https://adastat.net/addresses/", - "pool": "https://adastat.net/pools/", - "stakeAddress": "https://adastat.net/addresses/", - "token": "https://adastat.net/tokens/", - "transaction": "https://adastat.net/transactions/" - }, - "ExplorerId": 108, - "IsBackup": false, - "Name": "AdaStat", - "NetworkId": 0 + "AddressId": 93, + "Digest": 1.4757466731077065e-105, + "Hash": "01236cd4aa6c16457c70aa0fd0ef6ffd03c6f69038f5c87f8c00c5caa93522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 } }, { - "id": 101, + "id": 555, "value": { - "Endpoints": { - "address": "https://explorer.cardano.org/en/address?address=", - "transaction": "https://explorer.cardano.org/en/transaction?id=" - }, - "ExplorerId": 104, - "IsBackup": false, - "Name": "CardanoExplorer", - "NetworkId": 0 + "AddressId": 94, + "Digest": -2.9159561462300447e+148, + "Hash": "61c0120cea819e98a74b208ee460991986bcd54453a08704e5d30fe914", + "IsUsed": false, + "Type": 3 } }, { - "id": 102, + "id": 557, "value": { - "Endpoints": { - "address": "https://cexplorer.io/address/", - "pool": "https://cexplorer.io/pool/", - "stakeAddress": "https://cexplorer.io/stake/", - "token": "https://cexplorer.io/asset/", - "transaction": "https://cexplorer.io/tx/" - }, - "ExplorerId": 100, - "IsBackup": false, - "Name": "Cexplorer", - "NetworkId": 0 + "AddressId": 95, + "Digest": 4.974563271897693e+151, + "Hash": "01c0120cea819e98a74b208ee460991986bcd54453a08704e5d30fe9143522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 } }, { - "id": 103, + "id": 563, "value": { - "Endpoints": { - "address": "https://blockchair.com/cardano/address/", - "transaction": "https://blockchair.com/cardano/transaction/" - }, - "ExplorerId": 102, - "IsBackup": false, - "Name": "Blockchair", - "NetworkId": 0 + "AddressId": 96, + "Digest": 6.544003457576558e-208, + "Hash": "01aff544c8f4383152b1ba812c55dfc3210ee4b68d23274f156e4fb618bef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 } }, { - "id": 104, + "id": 564, "value": { - "Endpoints": { - "address": "https://adapools.org/address/", - "pool": "https://adapools.org/pool/", - "stakeAddress": "https://adapools.org/stake/", - "transaction": "https://adapools.org/transactions/" - }, - "ExplorerId": 105, - "IsBackup": false, - "Name": "ADApools", - "NetworkId": 0 + "AddressId": 97, + "Digest": -2.6333980888013377e-260, + "Hash": "01a6edff62b502fc6f711cf234a4590a07e01c1ace0a87b91907a70353bef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 } }, { - "id": 105, + "id": 565, "value": { - "Endpoints": { "pool": "https://pooltool.io/pool/" }, - "ExplorerId": 107, - "IsBackup": false, - "Name": "PoolTool", - "NetworkId": 0 + "AddressId": 98, + "Digest": -1.5238681004019615e+191, + "Hash": "0173715062ddc91c42ef9339d62c8cf43fc4843c1a4337d9d65db9807dbef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 } }, { - "id": 106, + "id": 566, "value": { - "Endpoints": { - "address": "https://explorer.cardano-testnet.iohkdev.io/en/address?address=", - "transaction": "https://explorer.cardano-testnet.iohkdev.io/en/transaction?id=" - }, - "ExplorerId": 400, - "IsBackup": true, - "Name": "CardanoExplorer", - "NetworkId": 300 + "AddressId": 99, + "Digest": 9324648.548841005, + "Hash": "012f2444d62cfe4aed965fd6849a17c581077e7231846706aea132a85bbef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 } }, { - "id": 107, + "id": 567, "value": { - "Endpoints": { - "address": "https://testnet.cardanoscan.io/address/", - "pool": "https://testnet.cardanoscan.io/pool/", - "stakeAddress": "https://testnet.cardanoscan.io/stakeKey/", - "token": "https://testnet.cardanoscan.io/token/", - "transaction": "https://testnet.cardanoscan.io/transaction/" - }, - "ExplorerId": 450, - "IsBackup": true, - "Name": "CardanoScan", - "NetworkId": 250 + "AddressId": 100, + "Digest": 1.553436226566544e-13, + "Hash": "019d43a4c5aab50d9463842b2fa674a2165256242cff9dfe151aa0351e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 } }, { - "id": 108, + "id": 568, "value": { - "Endpoints": { - "address": "https://preview.cardanoscan.io/address/", - "pool": "https://preview.cardanoscan.io/pool/", - "stakeAddress": "https://preview.cardanoscan.io/stakeKey/", - "token": "https://preview.cardanoscan.io/token/", - "transaction": "https://preview.cardanoscan.io/transaction/" - }, - "ExplorerId": 550, - "IsBackup": true, - "Name": "CardanoScan", - "NetworkId": 350 + "AddressId": 101, + "Digest": -4.854210547715842e+207, + "Hash": "018425aa7efc8525af7365d03e7a11fb56fb19ea1a2b06c1b575f39b5e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 } }, { - "id": 109, + "id": 569, "value": { - "Endpoints": { - "address": "https://sancho.cexplorer.io/address/", - "pool": "https://sancho.cexplorer.io/pool/", - "stakeAddress": "https://sancho.cexplorer.io/stake/", - "token": "https://sancho.cexplorer.io/asset/", - "transaction": "https://sancho.cexplorer.io/tx/" - }, - "ExplorerId": 650, - "IsBackup": true, - "Name": "Cexplorer", - "NetworkId": 450 + "AddressId": 102, + "Digest": 1.2664246373400631e+222, + "Hash": "01f87c0e381198b9ed0094bd905e819b3a6445909d0441f5a8556da91d208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 } - } - ], - "HwWalletMeta": [], - "Key": [ + }, { - "id": 225, + "id": 570, "value": { - "Hash": "edb8eaa8970996442bf9633ad2c578b1a67d14fad00a28e36c7d84c33c14019ffc8f21da488c8ed9ba4871e17246aa2a223a98a6d0739f02d8f2bc4fa2577ba8f02161a39e9148b5f2e71c547beffa40bccab83cd1ef995c7ce1425bb1073043526e0bc421f34d3ac7bdf8e1dc385ef6007ca84633b95b8f8d8382c77d335fc44633a77d859af2626e5e4086aec4da2c639f91f3b0c296cc7207a087", - "IsEncrypted": true, - "KeyId": 1, - "PasswordLastUpdate": null, - "Type": 0 + "AddressId": 103, + "Digest": 1.5741733533332658e+181, + "Hash": "013a8bf5d91af753aea83d342306bd3a209c901120286c55b7720b5df9208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 } }, { - "id": 233, + "id": 571, "value": { - "Hash": "45d98cc6f9408741ebd3820553b32a08d9acb7174c0ecdb58ec0b708c502716e55a588dd5dcd0dbd0497dc0a429a93cb352d7ca95f131f29a5ab682f9bd0192c", - "IsEncrypted": false, - "KeyId": 2, - "PasswordLastUpdate": null, - "Type": 0 + "AddressId": 104, + "Digest": -1.8228594088781238e-95, + "Hash": "01374184a7b04d254c2dd8563aa46d3af5e3f93383a4bd8645fee61c08208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 } } ], - "KeyDerivation": [ + "AddressMapping": [ { - "id": 226, + "id": 130, "value": { - "Index": null, - "KeyDerivationId": 1, - "Parent": null, - "PrivateKeyId": 1, - "PublicKeyId": null + "AddressId": 1, + "AddressMappingId": 1, + "KeyDerivationId": 6 } }, { - "id": 229, + "id": 132, "value": { - "Index": 2147485500, - "KeyDerivationId": 2, - "Parent": 1, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 2, + "AddressMappingId": 2, + "KeyDerivationId": 6 } }, { - "id": 231, + "id": 136, "value": { - "Index": 2147485463, - "KeyDerivationId": 3, - "Parent": 2, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 3, + "AddressMappingId": 3, + "KeyDerivationId": 7 } }, { - "id": 234, + "id": 138, "value": { - "Index": 2147483648, - "KeyDerivationId": 4, - "Parent": 3, - "PrivateKeyId": null, - "PublicKeyId": 2 + "AddressId": 4, + "AddressMappingId": 4, + "KeyDerivationId": 7 } }, { - "id": 238, + "id": 142, "value": { - "Index": 0, - "KeyDerivationId": 5, - "Parent": 4, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 5, + "AddressMappingId": 5, + "KeyDerivationId": 8 } }, { - "id": 240, + "id": 144, "value": { - "Index": 0, - "KeyDerivationId": 6, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 6, + "AddressMappingId": 6, + "KeyDerivationId": 8 } }, { - "id": 246, + "id": 148, "value": { - "Index": 1, - "KeyDerivationId": 7, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 7, + "AddressMappingId": 7, + "KeyDerivationId": 9 } }, { - "id": 252, + "id": 150, "value": { - "Index": 2, - "KeyDerivationId": 8, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 8, + "AddressMappingId": 8, + "KeyDerivationId": 9 } }, { - "id": 258, + "id": 154, "value": { - "Index": 3, - "KeyDerivationId": 9, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 9, + "AddressMappingId": 9, + "KeyDerivationId": 10 } }, { - "id": 264, + "id": 156, "value": { - "Index": 4, - "KeyDerivationId": 10, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 10, + "AddressMappingId": 10, + "KeyDerivationId": 10 } }, { - "id": 270, + "id": 160, "value": { - "Index": 5, - "KeyDerivationId": 11, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 11, + "AddressMappingId": 11, + "KeyDerivationId": 11 } }, { - "id": 276, + "id": 162, "value": { - "Index": 6, - "KeyDerivationId": 12, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 12, + "AddressMappingId": 12, + "KeyDerivationId": 11 } }, { - "id": 282, + "id": 166, "value": { - "Index": 7, - "KeyDerivationId": 13, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 13, + "AddressMappingId": 13, + "KeyDerivationId": 12 } }, { - "id": 288, + "id": 168, "value": { - "Index": 8, - "KeyDerivationId": 14, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 14, + "AddressMappingId": 14, + "KeyDerivationId": 12 } }, { - "id": 294, + "id": 172, "value": { - "Index": 9, - "KeyDerivationId": 15, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 15, + "AddressMappingId": 15, + "KeyDerivationId": 13 } }, { - "id": 300, + "id": 174, "value": { - "Index": 10, - "KeyDerivationId": 16, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 16, + "AddressMappingId": 16, + "KeyDerivationId": 13 } }, { - "id": 306, + "id": 178, "value": { - "Index": 11, - "KeyDerivationId": 17, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 17, + "AddressMappingId": 17, + "KeyDerivationId": 14 } }, { - "id": 312, + "id": 180, "value": { - "Index": 12, - "KeyDerivationId": 18, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 18, + "AddressMappingId": 18, + "KeyDerivationId": 14 } }, { - "id": 318, + "id": 184, "value": { - "Index": 13, - "KeyDerivationId": 19, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 19, + "AddressMappingId": 19, + "KeyDerivationId": 15 } }, { - "id": 324, + "id": 186, "value": { - "Index": 14, - "KeyDerivationId": 20, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 20, + "AddressMappingId": 20, + "KeyDerivationId": 15 } }, { - "id": 330, + "id": 190, "value": { - "Index": 15, - "KeyDerivationId": 21, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 21, + "AddressMappingId": 21, + "KeyDerivationId": 16 } }, { - "id": 336, + "id": 192, "value": { - "Index": 16, - "KeyDerivationId": 22, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 22, + "AddressMappingId": 22, + "KeyDerivationId": 16 } }, { - "id": 342, + "id": 196, "value": { - "Index": 17, - "KeyDerivationId": 23, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 23, + "AddressMappingId": 23, + "KeyDerivationId": 17 } }, { - "id": 348, + "id": 198, "value": { - "Index": 18, - "KeyDerivationId": 24, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 24, + "AddressMappingId": 24, + "KeyDerivationId": 17 } }, { - "id": 354, + "id": 202, "value": { - "Index": 19, - "KeyDerivationId": 25, - "Parent": 5, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 25, + "AddressMappingId": 25, + "KeyDerivationId": 18 } }, { - "id": 360, + "id": 204, "value": { - "Index": 1, - "KeyDerivationId": 26, - "Parent": 4, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 26, + "AddressMappingId": 26, + "KeyDerivationId": 18 } }, { - "id": 362, + "id": 208, "value": { - "Index": 0, - "KeyDerivationId": 27, - "Parent": 26, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 27, + "AddressMappingId": 27, + "KeyDerivationId": 19 } }, { - "id": 368, + "id": 210, "value": { - "Index": 1, - "KeyDerivationId": 28, - "Parent": 26, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 28, + "AddressMappingId": 28, + "KeyDerivationId": 19 } }, { - "id": 374, + "id": 214, "value": { - "Index": 2, - "KeyDerivationId": 29, - "Parent": 26, - "PrivateKeyId": null, - "PublicKeyId": null + "AddressId": 29, + "AddressMappingId": 29, + "KeyDerivationId": 20 } }, { - "id": 380, + "id": 216, "value": { - "Index": 3, - "KeyDerivationId": 30, - "Parent": 26, + "AddressId": 30, + "AddressMappingId": 30, + "KeyDerivationId": 20 + } + }, + { + "id": 220, + "value": { + "AddressId": 31, + "AddressMappingId": 31, + "KeyDerivationId": 21 + } + }, + { + "id": 222, + "value": { + "AddressId": 32, + "AddressMappingId": 32, + "KeyDerivationId": 21 + } + }, + { + "id": 226, + "value": { + "AddressId": 33, + "AddressMappingId": 33, + "KeyDerivationId": 22 + } + }, + { + "id": 228, + "value": { + "AddressId": 34, + "AddressMappingId": 34, + "KeyDerivationId": 22 + } + }, + { + "id": 232, + "value": { + "AddressId": 35, + "AddressMappingId": 35, + "KeyDerivationId": 23 + } + }, + { + "id": 234, + "value": { + "AddressId": 36, + "AddressMappingId": 36, + "KeyDerivationId": 23 + } + }, + { + "id": 238, + "value": { + "AddressId": 37, + "AddressMappingId": 37, + "KeyDerivationId": 24 + } + }, + { + "id": 240, + "value": { + "AddressId": 38, + "AddressMappingId": 38, + "KeyDerivationId": 24 + } + }, + { + "id": 244, + "value": { + "AddressId": 39, + "AddressMappingId": 39, + "KeyDerivationId": 25 + } + }, + { + "id": 246, + "value": { + "AddressId": 40, + "AddressMappingId": 40, + "KeyDerivationId": 25 + } + }, + { + "id": 252, + "value": { + "AddressId": 41, + "AddressMappingId": 41, + "KeyDerivationId": 27 + } + }, + { + "id": 254, + "value": { + "AddressId": 42, + "AddressMappingId": 42, + "KeyDerivationId": 27 + } + }, + { + "id": 258, + "value": { + "AddressId": 43, + "AddressMappingId": 43, + "KeyDerivationId": 28 + } + }, + { + "id": 260, + "value": { + "AddressId": 44, + "AddressMappingId": 44, + "KeyDerivationId": 28 + } + }, + { + "id": 264, + "value": { + "AddressId": 45, + "AddressMappingId": 45, + "KeyDerivationId": 29 + } + }, + { + "id": 266, + "value": { + "AddressId": 46, + "AddressMappingId": 46, + "KeyDerivationId": 29 + } + }, + { + "id": 270, + "value": { + "AddressId": 47, + "AddressMappingId": 47, + "KeyDerivationId": 30 + } + }, + { + "id": 272, + "value": { + "AddressId": 48, + "AddressMappingId": 48, + "KeyDerivationId": 30 + } + }, + { + "id": 276, + "value": { + "AddressId": 49, + "AddressMappingId": 49, + "KeyDerivationId": 31 + } + }, + { + "id": 278, + "value": { + "AddressId": 50, + "AddressMappingId": 50, + "KeyDerivationId": 31 + } + }, + { + "id": 282, + "value": { + "AddressId": 51, + "AddressMappingId": 51, + "KeyDerivationId": 32 + } + }, + { + "id": 284, + "value": { + "AddressId": 52, + "AddressMappingId": 52, + "KeyDerivationId": 32 + } + }, + { + "id": 288, + "value": { + "AddressId": 53, + "AddressMappingId": 53, + "KeyDerivationId": 33 + } + }, + { + "id": 290, + "value": { + "AddressId": 54, + "AddressMappingId": 54, + "KeyDerivationId": 33 + } + }, + { + "id": 294, + "value": { + "AddressId": 55, + "AddressMappingId": 55, + "KeyDerivationId": 34 + } + }, + { + "id": 296, + "value": { + "AddressId": 56, + "AddressMappingId": 56, + "KeyDerivationId": 34 + } + }, + { + "id": 300, + "value": { + "AddressId": 57, + "AddressMappingId": 57, + "KeyDerivationId": 35 + } + }, + { + "id": 302, + "value": { + "AddressId": 58, + "AddressMappingId": 58, + "KeyDerivationId": 35 + } + }, + { + "id": 306, + "value": { + "AddressId": 59, + "AddressMappingId": 59, + "KeyDerivationId": 36 + } + }, + { + "id": 308, + "value": { + "AddressId": 60, + "AddressMappingId": 60, + "KeyDerivationId": 36 + } + }, + { + "id": 312, + "value": { + "AddressId": 61, + "AddressMappingId": 61, + "KeyDerivationId": 37 + } + }, + { + "id": 314, + "value": { + "AddressId": 62, + "AddressMappingId": 62, + "KeyDerivationId": 37 + } + }, + { + "id": 318, + "value": { + "AddressId": 63, + "AddressMappingId": 63, + "KeyDerivationId": 38 + } + }, + { + "id": 320, + "value": { + "AddressId": 64, + "AddressMappingId": 64, + "KeyDerivationId": 38 + } + }, + { + "id": 324, + "value": { + "AddressId": 65, + "AddressMappingId": 65, + "KeyDerivationId": 39 + } + }, + { + "id": 326, + "value": { + "AddressId": 66, + "AddressMappingId": 66, + "KeyDerivationId": 39 + } + }, + { + "id": 330, + "value": { + "AddressId": 67, + "AddressMappingId": 67, + "KeyDerivationId": 40 + } + }, + { + "id": 332, + "value": { + "AddressId": 68, + "AddressMappingId": 68, + "KeyDerivationId": 40 + } + }, + { + "id": 336, + "value": { + "AddressId": 69, + "AddressMappingId": 69, + "KeyDerivationId": 41 + } + }, + { + "id": 338, + "value": { + "AddressId": 70, + "AddressMappingId": 70, + "KeyDerivationId": 41 + } + }, + { + "id": 342, + "value": { + "AddressId": 71, + "AddressMappingId": 71, + "KeyDerivationId": 42 + } + }, + { + "id": 344, + "value": { + "AddressId": 72, + "AddressMappingId": 72, + "KeyDerivationId": 42 + } + }, + { + "id": 348, + "value": { + "AddressId": 73, + "AddressMappingId": 73, + "KeyDerivationId": 43 + } + }, + { + "id": 350, + "value": { + "AddressId": 74, + "AddressMappingId": 74, + "KeyDerivationId": 43 + } + }, + { + "id": 354, + "value": { + "AddressId": 75, + "AddressMappingId": 75, + "KeyDerivationId": 44 + } + }, + { + "id": 356, + "value": { + "AddressId": 76, + "AddressMappingId": 76, + "KeyDerivationId": 44 + } + }, + { + "id": 360, + "value": { + "AddressId": 77, + "AddressMappingId": 77, + "KeyDerivationId": 45 + } + }, + { + "id": 362, + "value": { + "AddressId": 78, + "AddressMappingId": 78, + "KeyDerivationId": 45 + } + }, + { + "id": 366, + "value": { + "AddressId": 79, + "AddressMappingId": 79, + "KeyDerivationId": 46 + } + }, + { + "id": 368, + "value": { + "AddressId": 80, + "AddressMappingId": 80, + "KeyDerivationId": 46 + } + }, + { + "id": 374, + "value": { + "AddressId": 81, + "AddressMappingId": 81, + "KeyDerivationId": 48 + } + }, + { + "id": 380, + "value": { + "AddressId": 82, + "AddressMappingId": 82, + "KeyDerivationId": 49 + } + }, + { + "id": 382, + "value": { + "AddressId": 83, + "AddressMappingId": 83, + "KeyDerivationId": 49 + } + }, + { + "id": 388, + "value": { + "AddressId": 84, + "AddressMappingId": 84, + "KeyDerivationId": 50 + } + }, + { + "id": 390, + "value": { + "AddressId": 85, + "AddressMappingId": 85, + "KeyDerivationId": 50 + } + }, + { + "id": 534, + "value": { + "AddressId": 88, + "AddressMappingId": 86, + "KeyDerivationId": 51 + } + }, + { + "id": 536, + "value": { + "AddressId": 89, + "AddressMappingId": 87, + "KeyDerivationId": 51 + } + }, + { + "id": 540, + "value": { + "AddressId": 90, + "AddressMappingId": 88, + "KeyDerivationId": 52 + } + }, + { + "id": 542, + "value": { + "AddressId": 91, + "AddressMappingId": 89, + "KeyDerivationId": 52 + } + }, + { + "id": 550, + "value": { + "AddressId": 92, + "AddressMappingId": 90, + "KeyDerivationId": 53 + } + }, + { + "id": 552, + "value": { + "AddressId": 93, + "AddressMappingId": 91, + "KeyDerivationId": 53 + } + }, + { + "id": 556, + "value": { + "AddressId": 94, + "AddressMappingId": 92, + "KeyDerivationId": 54 + } + }, + { + "id": 558, + "value": { + "AddressId": 95, + "AddressMappingId": 93, + "KeyDerivationId": 54 + } + } + ], + "Bip44Account": [ + { + "id": 123, + "value": { + "Bip44AccountId": 1, + "KeyDerivationId": 4 + } + } + ], + "Bip44Chain": [ + { + "id": 127, + "value": { + "Bip44ChainId": 1, + "DisplayCutoff": 4, + "KeyDerivationId": 5 + } + }, + { + "id": 249, + "value": { + "Bip44ChainId": 2, + "DisplayCutoff": null, + "KeyDerivationId": 26 + } + }, + { + "id": 371, + "value": { + "Bip44ChainId": 3, + "DisplayCutoff": null, + "KeyDerivationId": 47 + } + } + ], + "Bip44Wrapper": [], + "Block": [ + { + "id": 397, + "value": { + "BlockId": 1, + "BlockTime": 1699864409000, + "Digest": 9.276640484534976e+179, + "Hash": "3664bab92afb887173a2efe7031eb1110c3ae7942a0c2f32c487e82aaac8ea19", + "Height": 9541014, + "SlotNum": 108298118 + } + }, + { + "id": 407, + "value": { + "BlockId": 2, + "BlockTime": 1709816081000, + "Digest": 2.6574097388083826e+180, + "Hash": "510e0e94d2cc079ee57e6130bd26415b7895cec13f297136db5f442551484b1b", + "Height": 10025299, + "SlotNum": 118249790 + } + }, + { + "id": 572, + "value": { + "BlockId": 3, + "BlockTime": 1733154397000, + "Digest": 2.2636697616083852e-39, + "Hash": "7488f74e6a59236be59cc7ecf9f1435a57b2de59ccddae9bb9cbc4a546974d6d", + "Height": 11168886, + "SlotNum": 141588106 + } + }, + { + "id": 586, + "value": { + "BlockId": 4, + "BlockTime": 1733154528000, + "Digest": -7.288159110554098e-131, + "Hash": "67f46d5212cbc5f826a387cab7eb96a759f7a6fb977545a7d26cc790c99ef57d", + "Height": 11168896, + "SlotNum": 141588237 + } + }, + { + "id": 602, + "value": { + "BlockId": 5, + "BlockTime": 1733154959000, + "Digest": -2.3104675498711366e+301, + "Hash": "f5d11a53b10576a44ffcd9cff0d5f2de459e2199f35fba13ef77b535274c26cd", + "Height": 11168920, + "SlotNum": 141588668 + } + }, + { + "id": 610, + "value": { + "BlockId": 6, + "BlockTime": 1733255392000, + "Digest": 2.0944487603669543e+285, + "Hash": "ad4819c5a89b1e3dc9e5b6d8f081bdaf290052e146935c1fae9e717627d42e38", + "Height": 11173784, + "SlotNum": 141689101 + } + }, + { + "id": 628, + "value": { + "BlockId": 7, + "BlockTime": 1733737570000, + "Digest": 8201.117258560918, + "Hash": "6f77f55985abd3479ee6a0d77a6bf753d4c52bf683222bbb7a01ca04f2875102", + "Height": 11197072, + "SlotNum": 142171279 + } + } + ], + "CanonicalAddress": [ + { + "id": 133, + "value": { + "CanonicalAddressId": 1, + "KeyDerivationId": 6 + } + }, + { + "id": 139, + "value": { + "CanonicalAddressId": 2, + "KeyDerivationId": 7 + } + }, + { + "id": 145, + "value": { + "CanonicalAddressId": 3, + "KeyDerivationId": 8 + } + }, + { + "id": 151, + "value": { + "CanonicalAddressId": 4, + "KeyDerivationId": 9 + } + }, + { + "id": 157, + "value": { + "CanonicalAddressId": 5, + "KeyDerivationId": 10 + } + }, + { + "id": 163, + "value": { + "CanonicalAddressId": 6, + "KeyDerivationId": 11 + } + }, + { + "id": 169, + "value": { + "CanonicalAddressId": 7, + "KeyDerivationId": 12 + } + }, + { + "id": 175, + "value": { + "CanonicalAddressId": 8, + "KeyDerivationId": 13 + } + }, + { + "id": 181, + "value": { + "CanonicalAddressId": 9, + "KeyDerivationId": 14 + } + }, + { + "id": 187, + "value": { + "CanonicalAddressId": 10, + "KeyDerivationId": 15 + } + }, + { + "id": 193, + "value": { + "CanonicalAddressId": 11, + "KeyDerivationId": 16 + } + }, + { + "id": 199, + "value": { + "CanonicalAddressId": 12, + "KeyDerivationId": 17 + } + }, + { + "id": 205, + "value": { + "CanonicalAddressId": 13, + "KeyDerivationId": 18 + } + }, + { + "id": 211, + "value": { + "CanonicalAddressId": 14, + "KeyDerivationId": 19 + } + }, + { + "id": 217, + "value": { + "CanonicalAddressId": 15, + "KeyDerivationId": 20 + } + }, + { + "id": 223, + "value": { + "CanonicalAddressId": 16, + "KeyDerivationId": 21 + } + }, + { + "id": 229, + "value": { + "CanonicalAddressId": 17, + "KeyDerivationId": 22 + } + }, + { + "id": 235, + "value": { + "CanonicalAddressId": 18, + "KeyDerivationId": 23 + } + }, + { + "id": 241, + "value": { + "CanonicalAddressId": 19, + "KeyDerivationId": 24 + } + }, + { + "id": 247, + "value": { + "CanonicalAddressId": 20, + "KeyDerivationId": 25 + } + }, + { + "id": 255, + "value": { + "CanonicalAddressId": 21, + "KeyDerivationId": 27 + } + }, + { + "id": 261, + "value": { + "CanonicalAddressId": 22, + "KeyDerivationId": 28 + } + }, + { + "id": 267, + "value": { + "CanonicalAddressId": 23, + "KeyDerivationId": 29 + } + }, + { + "id": 273, + "value": { + "CanonicalAddressId": 24, + "KeyDerivationId": 30 + } + }, + { + "id": 279, + "value": { + "CanonicalAddressId": 25, + "KeyDerivationId": 31 + } + }, + { + "id": 285, + "value": { + "CanonicalAddressId": 26, + "KeyDerivationId": 32 + } + }, + { + "id": 291, + "value": { + "CanonicalAddressId": 27, + "KeyDerivationId": 33 + } + }, + { + "id": 297, + "value": { + "CanonicalAddressId": 28, + "KeyDerivationId": 34 + } + }, + { + "id": 303, + "value": { + "CanonicalAddressId": 29, + "KeyDerivationId": 35 + } + }, + { + "id": 309, + "value": { + "CanonicalAddressId": 30, + "KeyDerivationId": 36 + } + }, + { + "id": 315, + "value": { + "CanonicalAddressId": 31, + "KeyDerivationId": 37 + } + }, + { + "id": 321, + "value": { + "CanonicalAddressId": 32, + "KeyDerivationId": 38 + } + }, + { + "id": 327, + "value": { + "CanonicalAddressId": 33, + "KeyDerivationId": 39 + } + }, + { + "id": 333, + "value": { + "CanonicalAddressId": 34, + "KeyDerivationId": 40 + } + }, + { + "id": 339, + "value": { + "CanonicalAddressId": 35, + "KeyDerivationId": 41 + } + }, + { + "id": 345, + "value": { + "CanonicalAddressId": 36, + "KeyDerivationId": 42 + } + }, + { + "id": 351, + "value": { + "CanonicalAddressId": 37, + "KeyDerivationId": 43 + } + }, + { + "id": 357, + "value": { + "CanonicalAddressId": 38, + "KeyDerivationId": 44 + } + }, + { + "id": 363, + "value": { + "CanonicalAddressId": 39, + "KeyDerivationId": 45 + } + }, + { + "id": 369, + "value": { + "CanonicalAddressId": 40, + "KeyDerivationId": 46 + } + }, + { + "id": 375, + "value": { + "CanonicalAddressId": 41, + "KeyDerivationId": 48 + } + }, + { + "id": 383, + "value": { + "CanonicalAddressId": 42, + "KeyDerivationId": 49 + } + }, + { + "id": 391, + "value": { + "CanonicalAddressId": 43, + "KeyDerivationId": 50 + } + }, + { + "id": 537, + "value": { + "CanonicalAddressId": 44, + "KeyDerivationId": 51 + } + }, + { + "id": 543, + "value": { + "CanonicalAddressId": 45, + "KeyDerivationId": 52 + } + }, + { + "id": 553, + "value": { + "CanonicalAddressId": 46, + "KeyDerivationId": 53 + } + }, + { + "id": 559, + "value": { + "CanonicalAddressId": 47, + "KeyDerivationId": 54 + } + } + ], + "Certificate": [ + { + "id": 593, + "value": { + "CertificateId": 1, + "Kind": 0, + "Ordinal": 0, + "Payload": "82008200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "TransactionId": 4 + } + }, + { + "id": 595, + "value": { + "CertificateId": 2, + "Kind": 2, + "Ordinal": 1, + "Payload": "83028200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf581c359d3f8e355c873b0b5cae1e18eb12e44dcfc2ad212706d93ac314ab", + "TransactionId": 4 + } + }, + { + "id": 606, + "value": { + "CertificateId": 3, + "Kind": 1, + "Ordinal": 0, + "Payload": "82008200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "TransactionId": 5 + } + } + ], + "CertificateAddress": [ + { + "id": 594, + "value": { + "AddressId": 81, + "CertificateAddressId": 1, + "CertificateId": 1, + "Relation": 0 + } + }, + { + "id": 596, + "value": { + "AddressId": 81, + "CertificateAddressId": 2, + "CertificateId": 2, + "Relation": 0 + } + }, + { + "id": 607, + "value": { + "AddressId": 81, + "CertificateAddressId": 3, + "CertificateId": 3, + "Relation": 0 + } + } + ], + "Cip1852Wrapper": [ + { + "id": 116, + "value": { + "ConceptualWalletId": 1, + "PrivateDeriverKeyDerivationId": 1, + "PrivateDeriverLevel": 0, + "PublicDeriverLevel": 3, + "RootKeyDerivationId": 1, + "SignerLevel": 0 + } + } + ], + "CoinTypeDerivation": [ + { + "id": 120, + "value": { + "CoinTypeDerivationId": 1, + "KeyDerivationId": 3 + } + } + ], + "ConceptualWallet": [ + { + "id": 112, + "value": { + "ConceptualWalletId": 1, + "Name": "TestWallet1", + "NetworkId": 0 + } + } + ], + "EncryptionMeta": [ + { + "id": 93, + "value": { + "AddressSeed": 2964970265, + "BlockSeed": 3593231839, + "EncryptionMetaId": 0, + "TokenSeed": 4164304111, + "TransactionSeed": 760948426 + } + } + ], + "Explorer": [ + { + "id": 98, + "value": { + "Endpoints": { + "address": "https://cardanoscan.io/address/", + "pool": "https://cardanoscan.io/pool/", + "stakeAddress": "https://cardanoscan.io/stakeKey/", + "token": "https://cardanoscan.io/token/", + "transaction": "https://cardanoscan.io/transaction/" + }, + "ExplorerId": 106, + "IsBackup": true, + "Name": "CardanoScan", + "NetworkId": 0 + } + }, + { + "id": 99, + "value": { + "Endpoints": { + "address": "https://adastat.net/addresses/", + "pool": "https://adastat.net/pools/", + "stakeAddress": "https://adastat.net/addresses/", + "token": "https://adastat.net/tokens/", + "transaction": "https://adastat.net/transactions/" + }, + "ExplorerId": 108, + "IsBackup": false, + "Name": "AdaStat", + "NetworkId": 0 + } + }, + { + "id": 100, + "value": { + "Endpoints": { + "address": "https://explorer.cardano.org/en/address?address=", + "transaction": "https://explorer.cardano.org/en/transaction?id=" + }, + "ExplorerId": 104, + "IsBackup": false, + "Name": "CardanoExplorer", + "NetworkId": 0 + } + }, + { + "id": 101, + "value": { + "Endpoints": { + "address": "https://cexplorer.io/address/", + "pool": "https://cexplorer.io/pool/", + "stakeAddress": "https://cexplorer.io/stake/", + "token": "https://cexplorer.io/asset/", + "transaction": "https://cexplorer.io/tx/" + }, + "ExplorerId": 100, + "IsBackup": false, + "Name": "Cexplorer", + "NetworkId": 0 + } + }, + { + "id": 102, + "value": { + "Endpoints": { + "address": "https://blockchair.com/cardano/address/", + "transaction": "https://blockchair.com/cardano/transaction/" + }, + "ExplorerId": 102, + "IsBackup": false, + "Name": "Blockchair", + "NetworkId": 0 + } + }, + { + "id": 103, + "value": { + "Endpoints": { + "address": "https://adapools.org/address/", + "pool": "https://adapools.org/pool/", + "stakeAddress": "https://adapools.org/stake/", + "transaction": "https://adapools.org/transactions/" + }, + "ExplorerId": 105, + "IsBackup": false, + "Name": "ADApools", + "NetworkId": 0 + } + }, + { + "id": 104, + "value": { + "Endpoints": { + "pool": "https://pooltool.io/pool/" + }, + "ExplorerId": 107, + "IsBackup": false, + "Name": "PoolTool", + "NetworkId": 0 + } + }, + { + "id": 105, + "value": { + "Endpoints": { + "address": "https://preprod.cardanoscan.io/address/", + "pool": "https://preprod.cardanoscan.io/pool/", + "stakeAddress": "https://preprod.cardanoscan.io/stakeKey/", + "token": "https://preprod.cardanoscan.io/token/", + "transaction": "https://preprod.cardanoscan.io/transaction/" + }, + "ExplorerId": 450, + "IsBackup": true, + "Name": "CardanoScan", + "NetworkId": 250 + } + }, + { + "id": 106, + "value": { + "Endpoints": { + "address": "https://preview.cardanoscan.io/address/", + "pool": "https://preview.cardanoscan.io/pool/", + "stakeAddress": "https://preview.cardanoscan.io/stakeKey/", + "token": "https://preview.cardanoscan.io/token/", + "transaction": "https://preview.cardanoscan.io/transaction/" + }, + "ExplorerId": 550, + "IsBackup": true, + "Name": "CardanoScan", + "NetworkId": 350 + } + }, + { + "id": 107, + "value": { + "Endpoints": { + "address": "https://sancho.cexplorer.io/address/", + "pool": "https://sancho.cexplorer.io/pool/", + "stakeAddress": "https://sancho.cexplorer.io/stake/", + "token": "https://sancho.cexplorer.io/asset/", + "transaction": "https://sancho.cexplorer.io/tx/" + }, + "ExplorerId": 650, + "IsBackup": true, + "Name": "Cexplorer", + "NetworkId": 450 + } + } + ], + "HwWalletMeta": [], + "Key": [ + { + "id": 113, + "value": { + "Hash": "06ccdb7e01a7d2e26333fd376ccd091b7c97c7bbb07d2847299dc45021bf3c4fce53ec53a105487ed8bb190cf2dec56cff4aa21e42f4312d2981b485dd5dc17c465ba728a7c0ada2d7dea0263744a6f028acfb084497476f16c60c2fb012ed42fcae437366140e93f4ece8bee8106e755a8f1a4621c7067d2298c6828cc9eb08c4d7b3f4ed4855af20a6ce4538c92aebeabe541ffb9f3c0c18138dcb", + "IsEncrypted": true, + "KeyId": 1, + "PasswordLastUpdate": null, + "Type": 0 + } + }, + { + "id": 121, + "value": { + "Hash": "45d98cc6f9408741ebd3820553b32a08d9acb7174c0ecdb58ec0b708c502716e55a588dd5dcd0dbd0497dc0a429a93cb352d7ca95f131f29a5ab682f9bd0192c", + "IsEncrypted": false, + "KeyId": 2, + "PasswordLastUpdate": null, + "Type": 0 + } + } + ], + "KeyDerivation": [ + { + "id": 114, + "value": { + "Index": null, + "KeyDerivationId": 1, + "Parent": null, + "PrivateKeyId": 1, + "PublicKeyId": null + } + }, + { + "id": 117, + "value": { + "Index": 2147485500, + "KeyDerivationId": 2, + "Parent": 1, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 119, + "value": { + "Index": 2147485463, + "KeyDerivationId": 3, + "Parent": 2, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 122, + "value": { + "Index": 2147483648, + "KeyDerivationId": 4, + "Parent": 3, + "PrivateKeyId": null, + "PublicKeyId": 2 + } + }, + { + "id": 126, + "value": { + "Index": 0, + "KeyDerivationId": 5, + "Parent": 4, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 128, + "value": { + "Index": 0, + "KeyDerivationId": 6, + "Parent": 5, "PrivateKeyId": null, "PublicKeyId": null } }, { - "id": 386, + "id": 134, + "value": { + "Index": 1, + "KeyDerivationId": 7, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 140, + "value": { + "Index": 2, + "KeyDerivationId": 8, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 146, + "value": { + "Index": 3, + "KeyDerivationId": 9, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 152, + "value": { + "Index": 4, + "KeyDerivationId": 10, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 158, + "value": { + "Index": 5, + "KeyDerivationId": 11, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 164, + "value": { + "Index": 6, + "KeyDerivationId": 12, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 170, + "value": { + "Index": 7, + "KeyDerivationId": 13, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 176, + "value": { + "Index": 8, + "KeyDerivationId": 14, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 182, + "value": { + "Index": 9, + "KeyDerivationId": 15, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 188, + "value": { + "Index": 10, + "KeyDerivationId": 16, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 194, + "value": { + "Index": 11, + "KeyDerivationId": 17, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 200, + "value": { + "Index": 12, + "KeyDerivationId": 18, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 206, + "value": { + "Index": 13, + "KeyDerivationId": 19, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 212, + "value": { + "Index": 14, + "KeyDerivationId": 20, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 218, + "value": { + "Index": 15, + "KeyDerivationId": 21, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 224, + "value": { + "Index": 16, + "KeyDerivationId": 22, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 230, + "value": { + "Index": 17, + "KeyDerivationId": 23, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 236, + "value": { + "Index": 18, + "KeyDerivationId": 24, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 242, + "value": { + "Index": 19, + "KeyDerivationId": 25, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 248, + "value": { + "Index": 1, + "KeyDerivationId": 26, + "Parent": 4, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 250, + "value": { + "Index": 0, + "KeyDerivationId": 27, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 256, + "value": { + "Index": 1, + "KeyDerivationId": 28, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 262, + "value": { + "Index": 2, + "KeyDerivationId": 29, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 268, + "value": { + "Index": 3, + "KeyDerivationId": 30, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 274, "value": { "Index": 4, "KeyDerivationId": 31, @@ -1566,7 +2826,7 @@ } }, { - "id": 392, + "id": 280, "value": { "Index": 5, "KeyDerivationId": 32, @@ -1576,7 +2836,7 @@ } }, { - "id": 398, + "id": 286, "value": { "Index": 6, "KeyDerivationId": 33, @@ -1586,7 +2846,7 @@ } }, { - "id": 404, + "id": 292, "value": { "Index": 7, "KeyDerivationId": 34, @@ -1596,7 +2856,7 @@ } }, { - "id": 410, + "id": 298, "value": { "Index": 8, "KeyDerivationId": 35, @@ -1606,7 +2866,7 @@ } }, { - "id": 416, + "id": 304, "value": { "Index": 9, "KeyDerivationId": 36, @@ -1616,7 +2876,7 @@ } }, { - "id": 422, + "id": 310, "value": { "Index": 10, "KeyDerivationId": 37, @@ -1626,7 +2886,7 @@ } }, { - "id": 428, + "id": 316, "value": { "Index": 11, "KeyDerivationId": 38, @@ -1636,7 +2896,7 @@ } }, { - "id": 434, + "id": 322, "value": { "Index": 12, "KeyDerivationId": 39, @@ -1646,7 +2906,7 @@ } }, { - "id": 440, + "id": 328, "value": { "Index": 13, "KeyDerivationId": 40, @@ -1656,7 +2916,7 @@ } }, { - "id": 446, + "id": 334, "value": { "Index": 14, "KeyDerivationId": 41, @@ -1666,7 +2926,7 @@ } }, { - "id": 452, + "id": 340, "value": { "Index": 15, "KeyDerivationId": 42, @@ -1676,7 +2936,7 @@ } }, { - "id": 458, + "id": 346, "value": { "Index": 16, "KeyDerivationId": 43, @@ -1686,7 +2946,7 @@ } }, { - "id": 464, + "id": 352, "value": { "Index": 17, "KeyDerivationId": 44, @@ -1696,7 +2956,7 @@ } }, { - "id": 470, + "id": 358, "value": { "Index": 18, "KeyDerivationId": 45, @@ -1706,7 +2966,7 @@ } }, { - "id": 476, + "id": 364, "value": { "Index": 19, "KeyDerivationId": 46, @@ -1716,7 +2976,7 @@ } }, { - "id": 482, + "id": 370, "value": { "Index": 2, "KeyDerivationId": 47, @@ -1726,30 +2986,70 @@ } }, { - "id": 484, + "id": 372, + "value": { + "Index": 0, + "KeyDerivationId": 48, + "Parent": 47, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 378, + "value": { + "Index": 20, + "KeyDerivationId": 49, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 386, + "value": { + "Index": 20, + "KeyDerivationId": 50, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 532, + "value": { + "Index": 21, + "KeyDerivationId": 51, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 538, "value": { - "Index": 0, - "KeyDerivationId": 48, - "Parent": 47, + "Index": 22, + "KeyDerivationId": 52, + "Parent": 5, "PrivateKeyId": null, "PublicKeyId": null } }, { - "id": 490, + "id": 548, "value": { - "Index": 20, - "KeyDerivationId": 49, - "Parent": 5, + "Index": 21, + "KeyDerivationId": 53, + "Parent": 26, "PrivateKeyId": null, "PublicKeyId": null } }, { - "id": 498, + "id": 554, "value": { - "Index": 20, - "KeyDerivationId": 50, + "Index": 22, + "KeyDerivationId": 54, "Parent": 26, "PrivateKeyId": null, "PublicKeyId": null @@ -1758,13 +3058,13 @@ ], "LastSyncInfo": [ { - "id": 236, + "id": 124, "value": { - "BlockHash": "a42e5f02a14edcf80fa4cc3f064f988f0240d7f0244a3d3b3a50442ca0f0d366", - "Height": 10378718, + "BlockHash": "6bed1d075e5264431636f0b550b6bf9a3ff3e46f3cc2104611f9bf66e286a783", + "Height": 11198229, "LastSyncInfoId": 1, - "SlotNum": 125446047, - "Time": 1717012369679 + "SlotNum": 142194564, + "Time": 1733760884144 } } ], @@ -1774,6 +3074,7 @@ "value": { "Backend": { "BackendService": "https://api.yoroiwallet.com", + "BackendServiceZero": "https://zero.yoroiwallet.com", "TokenInfoService": "https://cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -1788,13 +3089,19 @@ { "CoinsPerUtxoWord": "34482", "KeyDeposit": "2000000", - "LinearFee": { "coefficient": "44", "constant": "155381" }, + "LinearFee": { + "coefficient": "44", + "constant": "155381" + }, "MinimumUtxoVal": "1000000", "PerEpochPercentageReward": 69344, "PoolDeposit": "500000000", "SlotDuration": 1, "SlotsPerEpoch": 432000, "StartAt": 208 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -1805,43 +3112,10 @@ }, { "id": 95, - "value": { - "Backend": { - "BackendService": "https://testnet-backend.yoroiwallet.com", - "TokenInfoService": "https://stage-cdn.yoroiwallet.com" - }, - "BaseConfig": [ - { - "ByronNetworkId": 1097911063, - "ChainNetworkId": "0", - "GenesisDate": "1563999616000", - "SlotDuration": 20, - "SlotsPerEpoch": 21600, - "StartAt": 0 - }, - { - "CoinsPerUtxoWord": "34482", - "KeyDeposit": "2000000", - "LinearFee": { "coefficient": "44", "constant": "155381" }, - "MinimumUtxoVal": "1000000", - "PerEpochPercentageReward": 69344, - "PoolDeposit": "500000000", - "SlotDuration": 1, - "SlotsPerEpoch": 432000, - "StartAt": 74 - } - ], - "CoinType": 2147485463, - "Fork": 0, - "NetworkId": 300, - "NetworkName": "Cardano Legacy Testnet" - } - }, - { - "id": 96, "value": { "Backend": { "BackendService": "https://preprod-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-preprod.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -1856,13 +3130,19 @@ { "CoinsPerUtxoWord": "34482", "KeyDeposit": "2000000", - "LinearFee": { "coefficient": "44", "constant": "155381" }, + "LinearFee": { + "coefficient": "44", + "constant": "155381" + }, "MinimumUtxoVal": "1000000", "PerEpochPercentageReward": 69344, "PoolDeposit": "500000000", "SlotDuration": 1, "SlotsPerEpoch": 432000, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -1872,10 +3152,11 @@ } }, { - "id": 97, + "id": 96, "value": { "Backend": { "BackendService": "https://preview-backend.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-preview.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -1890,13 +3171,19 @@ { "CoinsPerUtxoWord": "34482", "KeyDeposit": "2000000", - "LinearFee": { "coefficient": "44", "constant": "155381" }, + "LinearFee": { + "coefficient": "44", + "constant": "155381" + }, "MinimumUtxoVal": "1000000", "PerEpochPercentageReward": 69344, "PoolDeposit": "500000000", "SlotDuration": 1, "SlotsPerEpoch": 86400, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -1906,10 +3193,11 @@ } }, { - "id": 98, + "id": 97, "value": { "Backend": { "BackendService": "https://sanchonet-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-sanchonet.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -1924,13 +3212,19 @@ { "CoinsPerUtxoWord": "34482", "KeyDeposit": "2000000", - "LinearFee": { "coefficient": "44", "constant": "155381" }, + "LinearFee": { + "coefficient": "44", + "constant": "155381" + }, "MinimumUtxoVal": "1000000", "PerEpochPercentageReward": 69344, "PoolDeposit": "500000000", "SlotDuration": 1, "SlotsPerEpoch": 86400, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -1944,7 +3238,7 @@ "PriceData": [], "PublicDeriver": [ { - "id": 237, + "id": 125, "value": { "ConceptualWalletId": 1, "Index": 0, @@ -1955,13 +3249,29 @@ } } ], - "PurposeDerivation": [{ "id": 230, "value": { "KeyDerivationId": 2, "PurposeDerivationId": 1 } }], - "RootDerivation": [{ "id": 227, "value": { "KeyDerivationId": 1, "RootDerivationId": 1 } }], + "PurposeDerivation": [ + { + "id": 118, + "value": { + "KeyDerivationId": 2, + "PurposeDerivationId": 1 + } + } + ], + "RootDerivation": [ + { + "id": 115, + "value": { + "KeyDerivationId": 1, + "RootDerivationId": 1 + } + } + ], "Token": [ { - "id": 110, + "id": 108, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -1979,9 +3289,9 @@ } }, { - "id": 111, + "id": 109, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -1994,14 +3304,14 @@ "ticker": "TADA", "type": "Cardano" }, - "NetworkId": 300, + "NetworkId": 250, "TokenId": 2 } }, { - "id": 112, + "id": 110, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2014,14 +3324,14 @@ "ticker": "TADA", "type": "Cardano" }, - "NetworkId": 250, + "NetworkId": 350, "TokenId": 3 } }, { - "id": 113, + "id": 111, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2034,151 +3344,469 @@ "ticker": "TADA", "type": "Cardano" }, - "NetworkId": 350, + "NetworkId": 450, "TokenId": 4 } + } + ], + "TokenList": [ + { + "id": 403, + "value": { + "Amount": "213595757", + "ListId": 0, + "TokenId": 1, + "TokenListItemId": 1 + } }, { - "id": 114, + "id": 404, "value": { - "Digest": -2.721713972065479e-183, - "Identifier": "", - "IsDefault": true, - "IsNFT": false, - "Metadata": { - "assetName": "", - "logo": null, - "longName": null, - "numberOfDecimals": 6, - "policyId": "", - "ticker": "TADA", - "type": "Cardano" - }, - "NetworkId": 450, - "TokenId": 5 + "Amount": "5000000", + "ListId": 1, + "TokenId": 1, + "TokenListItemId": 2 } - } - ], - "TokenList": [ + }, + { + "id": 405, + "value": { + "Amount": "5500000", + "ListId": 2, + "TokenId": 1, + "TokenListItemId": 3 + } + }, + { + "id": 406, + "value": { + "Amount": "202924580", + "ListId": 3, + "TokenId": 1, + "TokenListItemId": 4 + } + }, + { + "id": 413, + "value": { + "Amount": "5000000", + "ListId": 4, + "TokenId": 1, + "TokenListItemId": 5 + } + }, + { + "id": 414, + "value": { + "Amount": "1000000", + "ListId": 5, + "TokenId": 1, + "TokenListItemId": 6 + } + }, + { + "id": 415, + "value": { + "Amount": "1000000", + "ListId": 6, + "TokenId": 1, + "TokenListItemId": 7 + } + }, + { + "id": 416, + "value": { + "Amount": "2828823", + "ListId": 7, + "TokenId": 1, + "TokenListItemId": 8 + } + }, + { + "id": 580, + "value": { + "Amount": "8483381", + "ListId": 8, + "TokenId": 1, + "TokenListItemId": 9 + } + }, + { + "id": 581, + "value": { + "Amount": "12189738", + "ListId": 9, + "TokenId": 1, + "TokenListItemId": 10 + } + }, + { + "id": 582, + "value": { + "Amount": "6703315", + "ListId": 10, + "TokenId": 1, + "TokenListItemId": 11 + } + }, + { + "id": 583, + "value": { + "Amount": "7416720", + "ListId": 11, + "TokenId": 1, + "TokenListItemId": 12 + } + }, + { + "id": 584, + "value": { + "Amount": "15000000", + "ListId": 12, + "TokenId": 1, + "TokenListItemId": 13 + } + }, + { + "id": 585, + "value": { + "Amount": "19611197", + "ListId": 13, + "TokenId": 1, + "TokenListItemId": 14 + } + }, + { + "id": 597, + "value": { + "Amount": "15000000", + "ListId": 14, + "TokenId": 1, + "TokenListItemId": 15 + } + }, + { + "id": 598, + "value": { + "Amount": "1000000", + "ListId": 15, + "TokenId": 1, + "TokenListItemId": 16 + } + }, + { + "id": 599, + "value": { + "Amount": "1000000", + "ListId": 16, + "TokenId": 1, + "TokenListItemId": 17 + } + }, + { + "id": 600, + "value": { + "Amount": "1000000", + "ListId": 17, + "TokenId": 1, + "TokenListItemId": 18 + } + }, + { + "id": 601, + "value": { + "Amount": "9817119", + "ListId": 18, + "TokenId": 1, + "TokenListItemId": 19 + } + }, + { + "id": 608, + "value": { + "Amount": "9817119", + "ListId": 19, + "TokenId": 1, + "TokenListItemId": 20 + } + }, + { + "id": 609, + "value": { + "Amount": "11645634", + "ListId": 20, + "TokenId": 1, + "TokenListItemId": 21 + } + }, + { + "id": 620, + "value": { + "Amount": "1000000", + "ListId": 21, + "TokenId": 1, + "TokenListItemId": 22 + } + }, + { + "id": 621, + "value": { + "Amount": "1000000", + "ListId": 22, + "TokenId": 1, + "TokenListItemId": 23 + } + }, + { + "id": 622, + "value": { + "Amount": "2828823", + "ListId": 23, + "TokenId": 1, + "TokenListItemId": 24 + } + }, + { + "id": 623, + "value": { + "Amount": "1000000", + "ListId": 24, + "TokenId": 1, + "TokenListItemId": 25 + } + }, + { + "id": 624, + "value": { + "Amount": "1000000", + "ListId": 25, + "TokenId": 1, + "TokenListItemId": 26 + } + }, + { + "id": 625, + "value": { + "Amount": "1000000", + "ListId": 26, + "TokenId": 1, + "TokenListItemId": 27 + } + }, + { + "id": 626, + "value": { + "Amount": "11645634", + "ListId": 27, + "TokenId": 1, + "TokenListItemId": 28 + } + }, + { + "id": 627, + "value": { + "Amount": "19286164", + "ListId": 28, + "TokenId": 1, + "TokenListItemId": 29 + } + }, + { + "id": 636, + "value": { + "Amount": "7416808", + "ListId": 29, + "TokenId": 1, + "TokenListItemId": 30 + } + }, { - "id": 515, - "value": { "Amount": "213595757", "ListId": 0, "TokenId": 1, "TokenListItemId": 1 } + "id": 637, + "value": { + "Amount": "1317998", + "ListId": 30, + "TokenId": 1, + "TokenListItemId": 31 + } }, { - "id": 516, - "value": { "Amount": "5000000", "ListId": 1, "TokenId": 1, "TokenListItemId": 2 } + "id": 638, + "value": { + "Amount": "7002546", + "ListId": 31, + "TokenId": 1, + "TokenListItemId": 32 + } }, { - "id": 517, - "value": { "Amount": "5500000", "ListId": 2, "TokenId": 1, "TokenListItemId": 3 } + "id": 639, + "value": { + "Amount": "4828823", + "ListId": 32, + "TokenId": 1, + "TokenListItemId": 33 + } }, { - "id": 518, - "value": { "Amount": "202924580", "ListId": 3, "TokenId": 1, "TokenListItemId": 4 } + "id": 640, + "value": { + "Amount": "5311705", + "ListId": 33, + "TokenId": 1, + "TokenListItemId": 34 + } }, { - "id": 525, - "value": { "Amount": "5000000", "ListId": 4, "TokenId": 1, "TokenListItemId": 5 } + "id": 641, + "value": { + "Amount": "5413591", + "ListId": 34, + "TokenId": 1, + "TokenListItemId": 35 + } + } + ], + "Transaction": [ + { + "id": 398, + "value": { + "BlockId": 1, + "Digest": -1.0161614922244291e+36, + "ErrorMessage": null, + "Extra": { + "Fee": "171177", + "IsValid": true, + "Metadata": null + }, + "Hash": "4a551e08a8808cfaf667bf29b2ebdddd525c48287b58eede94ceb7ee3692bec3", + "LastUpdateTime": 1699864409000, + "Ordinal": 1, + "Status": 1, + "TransactionId": 1, + "Type": 1 + } }, { - "id": 526, - "value": { "Amount": "1000000", "ListId": 5, "TokenId": 1, "TokenListItemId": 6 } + "id": 408, + "value": { + "BlockId": 2, + "Digest": 1.8542918286990975e+226, + "ErrorMessage": null, + "Extra": { + "Fee": "171177", + "IsValid": true, + "Metadata": null + }, + "Hash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", + "LastUpdateTime": 1709816081000, + "Ordinal": 30, + "Status": 1, + "TransactionId": 2, + "Type": 1 + } }, { - "id": 527, - "value": { "Amount": "1000000", "ListId": 6, "TokenId": 1, "TokenListItemId": 7 } + "id": 573, + "value": { + "BlockId": 3, + "Digest": 2.660848081553091e+103, + "ErrorMessage": null, + "Extra": { + "Fee": "181957", + "IsValid": true, + "Metadata": null + }, + "Hash": "8dbdecebb7d03ee55227bfeb2149825596c520fe1d761e2e9c993b80f390f79f", + "LastUpdateTime": 1733154397000, + "Ordinal": 76, + "Status": 1, + "TransactionId": 3, + "Type": 1 + } }, - { "id": 528, "value": { "Amount": "2828823", "ListId": 7, "TokenId": 1, "TokenListItemId": 8 } } - ], - "Transaction": [ { - "id": 510, + "id": 587, "value": { - "BlockId": 1, - "Digest": 7.714062039903406e88, + "BlockId": 4, + "Digest": 1.2061264726932565e+28, "ErrorMessage": null, - "Extra": { "Fee": "171177", "IsValid": true, "Metadata": null }, - "Hash": "4a551e08a8808cfaf667bf29b2ebdddd525c48287b58eede94ceb7ee3692bec3", - "LastUpdateTime": 1699864409000, - "Ordinal": 1, + "Extra": { + "Fee": "182881", + "IsValid": true, + "Metadata": null + }, + "Hash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "LastUpdateTime": 1733154528000, + "Ordinal": 54, "Status": 1, - "TransactionId": 1, + "TransactionId": 4, "Type": 1 } }, { - "id": 520, + "id": 603, "value": { - "BlockId": 2, - "Digest": -7.346330259468635e88, + "BlockId": 5, + "Digest": -2.9462112622979067e+127, "ErrorMessage": null, - "Extra": { "Fee": "171177", "IsValid": true, "Metadata": null }, - "Hash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "LastUpdateTime": 1709816081000, - "Ordinal": 30, + "Extra": { + "Fee": "171485", + "IsValid": true, + "Metadata": null + }, + "Hash": "350ec56c010e5d5078b9695e9e660671d16d897fba5aa9375a8319fc5a0b19af", + "LastUpdateTime": 1733154959000, + "Ordinal": 27, "Status": 1, - "TransactionId": 2, + "TransactionId": 5, "Type": 1 } - } - ], - "TxMemo": [], - "UtxoAtSafePointTable": [ - { - "id": 504, - "value": { - "PublicDeriverId": 1, - "UtxoAtSafePoint": { - "lastSafeBlockHash": "1ddd7fabd5776d98c7ab43000f4d8fd32d5763302d8fc3162d5690136c18442f", - "utxos": [ - { - "amount": "1000000", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q98tt4wxnt32h3fn63xkzh4q7ah57v330v40mc2e9ale5jp4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmrz6qx", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 0, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:0" - }, - { - "amount": "1000000", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q9pe9gk6f9huhh6dx089nt6spl22xeetjzvvjcl9rjajj5e4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmnhvza", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 1, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:1" - }, - { - "amount": "2828823", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q9pe9gk6f9huhh6dx089nt6spl22xeetjzvvjcl9rjajj5e4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmnhvza", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 2, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:2" - } - ] + }, + { + "id": 611, + "value": { + "BlockId": 6, + "Digest": 5.961280227924736e+302, + "ErrorMessage": null, + "Extra": { + "Fee": "188293", + "IsValid": true, + "Metadata": null }, - "UtxoAtSafePointId": 1 + "Hash": "cd22184851d053164cc84c3649e1b81404e37fe5198dc359775c610d44931f03", + "LastUpdateTime": 1733255392000, + "Ordinal": 57, + "Status": 1, + "TransactionId": 6, + "Type": 1 } - } - ], - "UtxoDiffToBestBlock": [ + }, { - "id": 505, + "id": 629, "value": { - "PublicDeriverId": 1, - "UtxoDiffToBestBlockId": 1, - "lastBestBlockHash": "a42e5f02a14edcf80fa4cc3f064f988f0240d7f0244a3d3b3a50442ca0f0d366", - "newUtxos": [], - "spentUtxoIds": [] + "BlockId": 7, + "Digest": -9971190.774439456, + "ErrorMessage": null, + "Extra": { + "Fee": "183233", + "IsValid": true, + "Metadata": null + }, + "Hash": "952dcb958f0b7e7b8f7bcc601faa79414b157f0d25f6e7c6635fb4d1ea592e0b", + "LastUpdateTime": 1733737570000, + "Ordinal": 32, + "Status": 1, + "TransactionId": 7, + "Type": 1 } } ], + "TxMemo": [], + "UtxoAtSafePointTable": [], + "UtxoDiffToBestBlock": [], "UtxoTransactionInput": [ { - "id": 511, + "id": 399, "value": { "AddressId": 86, "IndexInOwnTx": 0, @@ -2190,7 +3818,7 @@ } }, { - "id": 521, + "id": 409, "value": { "AddressId": 2, "IndexInOwnTx": 0, @@ -2200,11 +3828,203 @@ "TransactionId": 2, "UtxoTransactionInputId": 2 } + }, + { + "id": 574, + "value": { + "AddressId": 96, + "IndexInOwnTx": 0, + "IndexInParentTx": 0, + "ParentTxHash": "6e8746f25b4ede49d59ff9f288f4b7aeabd23e07acba0f5de9f3c4611726f56d", + "TokenListId": 8, + "TransactionId": 3, + "UtxoTransactionInputId": 3 + } + }, + { + "id": 575, + "value": { + "AddressId": 97, + "IndexInOwnTx": 1, + "IndexInParentTx": 4, + "ParentTxHash": "7486204ddd8b42b2bb2b8c6cc2331f5fae2bf362a31adc21203ba12981f4c487", + "TokenListId": 9, + "TransactionId": 3, + "UtxoTransactionInputId": 4 + } + }, + { + "id": 576, + "value": { + "AddressId": 98, + "IndexInOwnTx": 2, + "IndexInParentTx": 6, + "ParentTxHash": "605f5c96a0f4d207759ae6b6e4aae0cc98193aadb8975b8b7f58be5e62894081", + "TokenListId": 10, + "TransactionId": 3, + "UtxoTransactionInputId": 5 + } + }, + { + "id": 577, + "value": { + "AddressId": 98, + "IndexInOwnTx": 3, + "IndexInParentTx": 0, + "ParentTxHash": "db5f5e512531d089dbfa6d534b25e2192f27beb529a35d8c1144f82aab39a84e", + "TokenListId": 11, + "TransactionId": 3, + "UtxoTransactionInputId": 6 + } + }, + { + "id": 588, + "value": { + "AddressId": 4, + "IndexInOwnTx": 0, + "IndexInParentTx": 0, + "ParentTxHash": "8dbdecebb7d03ee55227bfeb2149825596c520fe1d761e2e9c993b80f390f79f", + "TokenListId": 14, + "TransactionId": 4, + "UtxoTransactionInputId": 7 + } + }, + { + "id": 604, + "value": { + "AddressId": 44, + "IndexInOwnTx": 0, + "IndexInParentTx": 3, + "ParentTxHash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "TokenListId": 19, + "TransactionId": 5, + "UtxoTransactionInputId": 8 + } + }, + { + "id": 612, + "value": { + "AddressId": 44, + "IndexInOwnTx": 0, + "IndexInParentTx": 0, + "ParentTxHash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "TokenListId": 21, + "TransactionId": 6, + "UtxoTransactionInputId": 9 + } + }, + { + "id": 613, + "value": { + "AddressId": 44, + "IndexInOwnTx": 1, + "IndexInParentTx": 2, + "ParentTxHash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "TokenListId": 22, + "TransactionId": 6, + "UtxoTransactionInputId": 10 + } + }, + { + "id": 614, + "value": { + "AddressId": 42, + "IndexInOwnTx": 2, + "IndexInParentTx": 2, + "ParentTxHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", + "TokenListId": 23, + "TransactionId": 6, + "UtxoTransactionInputId": 11 + } + }, + { + "id": 615, + "value": { + "AddressId": 44, + "IndexInOwnTx": 3, + "IndexInParentTx": 1, + "ParentTxHash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "TokenListId": 24, + "TransactionId": 6, + "UtxoTransactionInputId": 12 + } + }, + { + "id": 616, + "value": { + "AddressId": 42, + "IndexInOwnTx": 4, + "IndexInParentTx": 1, + "ParentTxHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", + "TokenListId": 25, + "TransactionId": 6, + "UtxoTransactionInputId": 13 + } + }, + { + "id": 617, + "value": { + "AddressId": 2, + "IndexInOwnTx": 5, + "IndexInParentTx": 0, + "ParentTxHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", + "TokenListId": 26, + "TransactionId": 6, + "UtxoTransactionInputId": 14 + } + }, + { + "id": 618, + "value": { + "AddressId": 46, + "IndexInOwnTx": 6, + "IndexInParentTx": 0, + "ParentTxHash": "350ec56c010e5d5078b9695e9e660671d16d897fba5aa9375a8319fc5a0b19af", + "TokenListId": 27, + "TransactionId": 6, + "UtxoTransactionInputId": 15 + } + }, + { + "id": 630, + "value": { + "AddressId": 101, + "IndexInOwnTx": 0, + "IndexInParentTx": 0, + "ParentTxHash": "b8a1bc3c0b41f304b99fd48d727432677a0d17f2f0e8776450b63e5e2c7304c1", + "TokenListId": 29, + "TransactionId": 7, + "UtxoTransactionInputId": 16 + } + }, + { + "id": 631, + "value": { + "AddressId": 102, + "IndexInOwnTx": 1, + "IndexInParentTx": 1, + "ParentTxHash": "d9d54d90cc6999401e6c15026420a8d56bf131b217a86cc9f2c9ad7fa27ceb22", + "TokenListId": 30, + "TransactionId": 7, + "UtxoTransactionInputId": 17 + } + }, + { + "id": 632, + "value": { + "AddressId": 103, + "IndexInOwnTx": 2, + "IndexInParentTx": 2, + "ParentTxHash": "2bad52eb855c70765b5d449b758b7e9f87083d933f239a8b366fa47001fee94c", + "TokenListId": 31, + "TransactionId": 7, + "UtxoTransactionInputId": 18 + } } ], "UtxoTransactionOutput": [ { - "id": 512, + "id": 400, "value": { "AddressId": 2, "ErgoBoxId": null, @@ -2219,7 +4039,7 @@ } }, { - "id": 513, + "id": 401, "value": { "AddressId": 87, "ErgoBoxId": null, @@ -2234,7 +4054,7 @@ } }, { - "id": 514, + "id": 402, "value": { "AddressId": 87, "ErgoBoxId": null, @@ -2249,14 +4069,14 @@ } }, { - "id": 522, + "id": 410, "value": { "AddressId": 2, "ErgoBoxId": null, "ErgoCreationHeight": null, "ErgoRegisters": null, "ErgoTree": null, - "IsUnspent": true, + "IsUnspent": false, "OutputIndex": 0, "TokenListId": 5, "TransactionId": 2, @@ -2264,14 +4084,14 @@ } }, { - "id": 523, + "id": 411, "value": { "AddressId": 42, "ErgoBoxId": null, "ErgoCreationHeight": null, "ErgoRegisters": null, "ErgoTree": null, - "IsUnspent": true, + "IsUnspent": false, "OutputIndex": 1, "TokenListId": 6, "TransactionId": 2, @@ -2279,19 +4099,184 @@ } }, { - "id": 524, + "id": 412, "value": { "AddressId": 42, "ErgoBoxId": null, "ErgoCreationHeight": null, "ErgoRegisters": null, "ErgoTree": null, - "IsUnspent": true, + "IsUnspent": false, "OutputIndex": 2, "TokenListId": 7, "TransactionId": 2, "UtxoTransactionOutputId": 6 } + }, + { + "id": 578, + "value": { + "AddressId": 4, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 0, + "TokenListId": 12, + "TransactionId": 3, + "UtxoTransactionOutputId": 7 + } + }, + { + "id": 579, + "value": { + "AddressId": 99, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": true, + "OutputIndex": 1, + "TokenListId": 13, + "TransactionId": 3, + "UtxoTransactionOutputId": 8 + } + }, + { + "id": 589, + "value": { + "AddressId": 44, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 0, + "TokenListId": 15, + "TransactionId": 4, + "UtxoTransactionOutputId": 9 + } + }, + { + "id": 590, + "value": { + "AddressId": 44, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 1, + "TokenListId": 16, + "TransactionId": 4, + "UtxoTransactionOutputId": 10 + } + }, + { + "id": 591, + "value": { + "AddressId": 44, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 2, + "TokenListId": 17, + "TransactionId": 4, + "UtxoTransactionOutputId": 11 + } + }, + { + "id": 592, + "value": { + "AddressId": 44, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 3, + "TokenListId": 18, + "TransactionId": 4, + "UtxoTransactionOutputId": 12 + } + }, + { + "id": 605, + "value": { + "AddressId": 46, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": false, + "OutputIndex": 0, + "TokenListId": 20, + "TransactionId": 5, + "UtxoTransactionOutputId": 13 + } + }, + { + "id": 619, + "value": { + "AddressId": 100, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": true, + "OutputIndex": 0, + "TokenListId": 28, + "TransactionId": 6, + "UtxoTransactionOutputId": 14 + } + }, + { + "id": 633, + "value": { + "AddressId": 6, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": true, + "OutputIndex": 0, + "TokenListId": 32, + "TransactionId": 7, + "UtxoTransactionOutputId": 15 + } + }, + { + "id": 634, + "value": { + "AddressId": 104, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": true, + "OutputIndex": 1, + "TokenListId": 33, + "TransactionId": 7, + "UtxoTransactionOutputId": 16 + } + }, + { + "id": 635, + "value": { + "AddressId": 104, + "ErgoBoxId": null, + "ErgoCreationHeight": null, + "ErgoRegisters": null, + "ErgoTree": null, + "IsUnspent": true, + "OutputIndex": 2, + "TokenListId": 34, + "TransactionId": 7, + "UtxoTransactionOutputId": 17 + } } ] -} +} \ No newline at end of file diff --git a/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1MemoAdded.indexedDB.json b/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1MemoAdded.indexedDB.json index e1e322b9be..5443ca8caf 100644 --- a/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1MemoAdded.indexedDB.json +++ b/packages/e2e-tests/helpers/wallet-dbSnapshots/testWallet1MemoAdded.indexedDB.json @@ -3,879 +3,1049 @@ "AccountingTransactionOutput": [], "Address": [ { - "id": 241, + "id": 129, "value": { "AddressId": 1, - "Digest": 6.380052592693652e+179, + "Digest": -1.0927551216861975e-217, "Hash": "614eb5d5c69ae2abc533d44d615ea0f76f4f32317b2afde1592f7f9a48", "IsUsed": true, "Type": 3 } }, { - "id": 243, + "id": 131, "value": { "AddressId": 2, - "Digest": 7.229922786045467e+37, + "Digest": 6.22558965669748e+25, "Hash": "014eb5d5c69ae2abc533d44d615ea0f76f4f32317b2afde1592f7f9a483522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": true, "Type": 1 } }, { - "id": 247, + "id": 135, "value": { "AddressId": 3, - "Digest": -8.232144619018239e+153, + "Digest": -1.3012070534294923e+252, "Hash": "617c263f54c68fa8262ba376b32d66aff6bf2b8b2a90ae89cc47ce32ee", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 249, + "id": 137, "value": { "AddressId": 4, - "Digest": -1.7536720553897433e+153, + "Digest": -5.601240210858296e-306, "Hash": "017c263f54c68fa8262ba376b32d66aff6bf2b8b2a90ae89cc47ce32ee3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 253, + "id": 141, "value": { "AddressId": 5, - "Digest": 5.047504275363617e+131, + "Digest": 2.5398537085015456e+150, "Hash": "6152608b31a9ec714181a4ebe82ba9581905031f565b6cb3fc653aa495", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 255, + "id": 143, "value": { "AddressId": 6, - "Digest": 6.830081758857871e-107, + "Digest": 5.032588816518284e+231, "Hash": "0152608b31a9ec714181a4ebe82ba9581905031f565b6cb3fc653aa4953522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 259, + "id": 147, "value": { "AddressId": 7, - "Digest": 4.485845990792551e-138, + "Digest": -1.155961849227329e+202, "Hash": "618b5a52656d5fb7b9f84370819be274c15c398123ccd893b59dbe0679", "IsUsed": false, "Type": 3 } }, { - "id": 261, + "id": 149, "value": { "AddressId": 8, - "Digest": 6.8122010483248995e+25, + "Digest": -1.4902125107352577e-61, "Hash": "018b5a52656d5fb7b9f84370819be274c15c398123ccd893b59dbe06793522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 265, + "id": 153, "value": { "AddressId": 9, - "Digest": 2.0221789718178016e+229, + "Digest": -1.6654221532540137e+306, "Hash": "61c7a86cb39d94b7ce42ad1dd5c33890bbe8d9ddf057477aae7a57515a", "IsUsed": false, "Type": 3 } }, { - "id": 267, + "id": 155, "value": { "AddressId": 10, - "Digest": 2.550450492151412e-286, + "Digest": 4.885812291761545e-170, "Hash": "01c7a86cb39d94b7ce42ad1dd5c33890bbe8d9ddf057477aae7a57515a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 271, + "id": 159, "value": { "AddressId": 11, - "Digest": -5.3934969176723165e-205, + "Digest": -6.417730721384071e-279, "Hash": "61b7223dd5917a869240f78ab1f674165afc6c4745d06508cd84b37942", "IsUsed": false, "Type": 3 } }, { - "id": 273, + "id": 161, "value": { "AddressId": 12, - "Digest": 5.101364490555232e+178, + "Digest": 9.680546718147597e-54, "Hash": "01b7223dd5917a869240f78ab1f674165afc6c4745d06508cd84b379423522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 277, + "id": 165, "value": { "AddressId": 13, - "Digest": 2.844517846040889e+239, + "Digest": -3363218962303.332, "Hash": "61c52266eb79f6c6599534f2370ef4a36ce678c759dee76b67eca150d3", "IsUsed": false, "Type": 3 } }, { - "id": 279, + "id": 167, "value": { "AddressId": 14, - "Digest": 1.341631616271896e+55, + "Digest": 3.6796239860117903e+171, "Hash": "01c52266eb79f6c6599534f2370ef4a36ce678c759dee76b67eca150d33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 283, + "id": 171, "value": { "AddressId": 15, - "Digest": -1.1344146685195727e-199, + "Digest": 3.900493690539932e-177, "Hash": "612e07f95d6ae57bb47883d45d22d49fa16f80461599e8bccd0049ce6d", "IsUsed": false, "Type": 3 } }, { - "id": 285, + "id": 173, "value": { "AddressId": 16, - "Digest": -1.0558856033234728e-282, + "Digest": -2.567704025382946e+150, "Hash": "012e07f95d6ae57bb47883d45d22d49fa16f80461599e8bccd0049ce6d3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 289, + "id": 177, "value": { "AddressId": 17, - "Digest": 1.2938570044771769e+116, + "Digest": -141512413769.94565, "Hash": "61109dca29894d4f6a58d2952d4340262831a5e46d345d9ff00b5343b0", "IsUsed": false, "Type": 3 } }, { - "id": 291, + "id": 179, "value": { "AddressId": 18, - "Digest": 9.571382260264633e-269, + "Digest": -8.348655118153582e+67, "Hash": "01109dca29894d4f6a58d2952d4340262831a5e46d345d9ff00b5343b03522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 295, + "id": 183, "value": { "AddressId": 19, - "Digest": -2.977680641696503e+95, + "Digest": -7.074021496763171e-63, "Hash": "61e351ff2e3e1e97c3be9908e68667d07bc3764514400e1f5f7d91d9bd", "IsUsed": false, "Type": 3 } }, { - "id": 297, + "id": 185, "value": { "AddressId": 20, - "Digest": 3.5467558778788136e-112, + "Digest": -2.5474115260062173e+239, "Hash": "01e351ff2e3e1e97c3be9908e68667d07bc3764514400e1f5f7d91d9bd3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 301, + "id": 189, "value": { "AddressId": 21, - "Digest": 2.111949471498054e+220, + "Digest": 2.5487244151624387e-204, "Hash": "61a388849bdf01e3cd840a4c66e7ce955fe9c54562fcc7a8741e826b87", "IsUsed": false, "Type": 3 } }, { - "id": 303, + "id": 191, "value": { "AddressId": 22, - "Digest": 1.7247745643819718e-37, + "Digest": -1.9328036175683993e-169, "Hash": "01a388849bdf01e3cd840a4c66e7ce955fe9c54562fcc7a8741e826b873522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 307, + "id": 195, "value": { "AddressId": 23, - "Digest": -5.40318439232988e+279, + "Digest": -1.1068965009546215e+196, "Hash": "6163af202d3a1a3ed9b403049d6e2650e5b93c040620a2fddc5f9abc46", "IsUsed": false, "Type": 3 } }, { - "id": 309, + "id": 197, "value": { "AddressId": 24, - "Digest": -1.1393402895433074e+86, + "Digest": 1.7384627464254719e+146, "Hash": "0163af202d3a1a3ed9b403049d6e2650e5b93c040620a2fddc5f9abc463522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 313, + "id": 201, "value": { "AddressId": 25, - "Digest": -3.786472492277643e+269, + "Digest": -7.881338882291193e+194, "Hash": "617d1922897a2312107cb17d531fad83c3c3c264fa7837a35c1c4a42c5", "IsUsed": false, "Type": 3 } }, { - "id": 315, + "id": 203, "value": { "AddressId": 26, - "Digest": -1.0391515953566685e-277, + "Digest": -1.1754336108906711e+205, "Hash": "017d1922897a2312107cb17d531fad83c3c3c264fa7837a35c1c4a42c53522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 319, + "id": 207, "value": { "AddressId": 27, - "Digest": 3.6895997735203905e-50, + "Digest": 7.235219593439043e-308, "Hash": "6124f57df2c3afc4cb19ba9d33e0ad8e8a6b7072aedc332806be517cb7", "IsUsed": false, "Type": 3 } }, { - "id": 321, + "id": 209, "value": { "AddressId": 28, - "Digest": 1.045830883351703e+84, + "Digest": 4.801605274266194e+202, "Hash": "0124f57df2c3afc4cb19ba9d33e0ad8e8a6b7072aedc332806be517cb73522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 325, + "id": 213, "value": { "AddressId": 29, - "Digest": -9.63785455780804e+135, + "Digest": 8.179685059463519e+67, "Hash": "61f3440d5a9dac2559efe49fd44d6bf0feab120e82387f427938441449", "IsUsed": false, "Type": 3 } }, { - "id": 327, + "id": 215, "value": { "AddressId": 30, - "Digest": 1.6020837380194585e-105, + "Digest": -7.981545416259525e-72, "Hash": "01f3440d5a9dac2559efe49fd44d6bf0feab120e82387f4279384414493522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 331, + "id": 219, "value": { "AddressId": 31, - "Digest": -9.079459924596478e-54, + "Digest": -8.415365183619949e-216, "Hash": "6159a7c321146b06e4d2dee4b2b2216c77d78ad617705aaf11bb4c11d6", "IsUsed": false, "Type": 3 } }, { - "id": 333, + "id": 221, "value": { "AddressId": 32, - "Digest": 2.6874536696483203e+97, + "Digest": -2.990635907994736e+144, "Hash": "0159a7c321146b06e4d2dee4b2b2216c77d78ad617705aaf11bb4c11d63522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 337, + "id": 225, "value": { "AddressId": 33, - "Digest": -1.642140329507171e+108, + "Digest": -2.5207384074556977e-177, "Hash": "6103ac559eae4ddf3a052ba8e0bd392ad439546b02b1a64bbe3bf13dcd", "IsUsed": false, "Type": 3 } }, { - "id": 339, + "id": 227, "value": { "AddressId": 34, - "Digest": -1.2642643213372364e-188, + "Digest": -7.424259741315881e+147, "Hash": "0103ac559eae4ddf3a052ba8e0bd392ad439546b02b1a64bbe3bf13dcd3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 343, + "id": 231, "value": { "AddressId": 35, - "Digest": 1.0024224248301637e+74, + "Digest": -1.7804130726215497e-87, "Hash": "616da6e93617a60a110d00ce7d821d910a741787628e55724bd8a8be95", "IsUsed": false, "Type": 3 } }, { - "id": 345, + "id": 233, "value": { "AddressId": 36, - "Digest": -4.105647642042466e+287, + "Digest": -2.283513166864087e+112, "Hash": "016da6e93617a60a110d00ce7d821d910a741787628e55724bd8a8be953522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 349, + "id": 237, "value": { "AddressId": 37, - "Digest": 3.8994874645751513e+24, + "Digest": -4.4660283720170545e-220, "Hash": "61aadec732abb4da2f4c3e813617c40813da1526d6fe622f87304b7211", "IsUsed": false, "Type": 3 } }, { - "id": 351, + "id": 239, "value": { "AddressId": 38, - "Digest": 1.0869978832987863e+30, + "Digest": 8.435351453151705e-240, "Hash": "01aadec732abb4da2f4c3e813617c40813da1526d6fe622f87304b72113522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 355, + "id": 243, "value": { "AddressId": 39, - "Digest": 6.680112625201024e-157, + "Digest": -1.6112950309182244e-131, "Hash": "61d114034e10adf788262242af4cea7149f2a664cb44d4a08a65c93f73", "IsUsed": false, "Type": 3 } }, { - "id": 357, + "id": 245, "value": { "AddressId": 40, - "Digest": -9.342753509994841e-110, + "Digest": -3.0091600639203495e-307, "Hash": "01d114034e10adf788262242af4cea7149f2a664cb44d4a08a65c93f733522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 363, + "id": 251, "value": { "AddressId": 41, - "Digest": -1.738443432070536e-275, + "Digest": 2.084319479070888e+230, "Hash": "614392a2da496fcbdf4d33ce59af500fd4a3672b9098c963e51cbb2953", "IsUsed": true, "Type": 3 } }, { - "id": 365, + "id": 253, "value": { "AddressId": 42, - "Digest": 147928575774080960000, + "Digest": -7.019419085566934e-13, "Hash": "014392a2da496fcbdf4d33ce59af500fd4a3672b9098c963e51cbb29533522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": true, "Type": 1 } }, { - "id": 369, + "id": 257, "value": { "AddressId": 43, - "Digest": 2.6578588702659997e-224, + "Digest": -8.033304935425561e+215, "Hash": "6111a13c41942a9ebfc74f3ee64c6f2dfb1a2ae0021c0d008232e44806", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 371, + "id": 259, "value": { "AddressId": 44, - "Digest": -3.5312576323729524e-183, + "Digest": -4.259883805754295e-214, "Hash": "0111a13c41942a9ebfc74f3ee64c6f2dfb1a2ae0021c0d008232e448063522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 375, + "id": 263, "value": { "AddressId": 45, - "Digest": -4.5657133864069804e-282, + "Digest": 1.2824552980381717e+39, "Hash": "61216e76cd8e778650e2c62babbd2ffcbef14d59726d59decececc91f3", - "IsUsed": false, + "IsUsed": true, "Type": 3 } }, { - "id": 377, + "id": 265, "value": { "AddressId": 46, - "Digest": -4.677918786370773e-131, + "Digest": -3.410439804540071e-292, "Hash": "01216e76cd8e778650e2c62babbd2ffcbef14d59726d59decececc91f33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", - "IsUsed": false, + "IsUsed": true, "Type": 1 } }, { - "id": 381, + "id": 269, "value": { "AddressId": 47, - "Digest": 1.1209511401034808e+210, + "Digest": 1.0671793962995673e+71, "Hash": "61da521f8226a768cf03f8c8aae1ac8cb7f47a18a18a9031f6ffa8b5cb", "IsUsed": false, "Type": 3 } }, { - "id": 383, + "id": 271, "value": { "AddressId": 48, - "Digest": -1.6056533421094645e-249, + "Digest": 7.054993870779389e-261, "Hash": "01da521f8226a768cf03f8c8aae1ac8cb7f47a18a18a9031f6ffa8b5cb3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 387, + "id": 275, "value": { "AddressId": 49, - "Digest": -1.0644984427448559e+245, + "Digest": 1.6699965527924884e+258, "Hash": "619712d62dda90d97044735200e42c9467d7c3febebc3a777c6d2f415a", "IsUsed": false, "Type": 3 } }, { - "id": 389, + "id": 277, "value": { "AddressId": 50, - "Digest": -1.0841293954569818e+160, + "Digest": 1.944842966127378e-202, "Hash": "019712d62dda90d97044735200e42c9467d7c3febebc3a777c6d2f415a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 393, + "id": 281, "value": { "AddressId": 51, - "Digest": -5.269376063154755e-290, + "Digest": 1.8788769731032564e-39, "Hash": "613758b8ffec90ae73a50c6b5bcf2b91a578afccb022586542adf9a353", "IsUsed": false, "Type": 3 } }, { - "id": 395, + "id": 283, "value": { "AddressId": 52, - "Digest": -1.36734901430298e-261, + "Digest": 1.6703325986788897e+179, "Hash": "013758b8ffec90ae73a50c6b5bcf2b91a578afccb022586542adf9a3533522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 399, + "id": 287, "value": { "AddressId": 53, - "Digest": -7.791922131646468e-199, + "Digest": 5.07297314665181e-22, "Hash": "61458c889cdff3e85ef206afc87434289c7648b90a8d99156eaaeb16f3", "IsUsed": false, "Type": 3 } }, { - "id": 401, + "id": 289, "value": { "AddressId": 54, - "Digest": -3.707416416635442e-103, + "Digest": -1.2075177597554205e+40, "Hash": "01458c889cdff3e85ef206afc87434289c7648b90a8d99156eaaeb16f33522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 405, + "id": 293, "value": { "AddressId": 55, - "Digest": -5.58019595358433e+140, + "Digest": -1.5457709086668971e+184, "Hash": "612b06586d435e35bb63b334b2f5c85ffdcc7a8dfd1bef0920da30bf76", "IsUsed": false, "Type": 3 } }, { - "id": 407, + "id": 295, "value": { "AddressId": 56, - "Digest": -1.1725614267644176e+151, + "Digest": -1.3144578640757212e+267, "Hash": "012b06586d435e35bb63b334b2f5c85ffdcc7a8dfd1bef0920da30bf763522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 411, + "id": 299, "value": { "AddressId": 57, - "Digest": 3.312158740927611e+174, + "Digest": 2.6036866373587587e+177, "Hash": "6106c5b72183c0846e328614d0b9655dff0e414dd1e10df299116230d2", "IsUsed": false, "Type": 3 } }, { - "id": 413, + "id": 301, "value": { "AddressId": 58, - "Digest": 4.377991456109467e-52, + "Digest": 6.140178083492142e-63, "Hash": "0106c5b72183c0846e328614d0b9655dff0e414dd1e10df299116230d23522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 417, + "id": 305, "value": { "AddressId": 59, - "Digest": 1.7184970971608928e-211, + "Digest": -0.00005407346565105635, "Hash": "612f9e5fc54d46ed8538ed89846a0d64a5b7119034ada76f8b660cd49e", "IsUsed": false, "Type": 3 } }, { - "id": 419, + "id": 307, "value": { "AddressId": 60, - "Digest": 6.752711547512455e-66, + "Digest": -5.222881962474689e-238, "Hash": "012f9e5fc54d46ed8538ed89846a0d64a5b7119034ada76f8b660cd49e3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 423, + "id": 311, "value": { "AddressId": 61, - "Digest": 5.125346459754799e+72, + "Digest": -5.4786410818004425e-247, "Hash": "614c50a95703a710d6d759e993f1019d9db489c4d72e38110d412c2584", "IsUsed": false, "Type": 3 } }, { - "id": 425, + "id": 313, "value": { "AddressId": 62, - "Digest": -1.3733628237722204e+202, + "Digest": 2.072011415820509e+285, "Hash": "014c50a95703a710d6d759e993f1019d9db489c4d72e38110d412c25843522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 429, + "id": 317, "value": { "AddressId": 63, - "Digest": 1.2020976238853324e+193, + "Digest": 3.651042786296267e+181, "Hash": "616f77ed384190886c95494159098793d352b527726d539d11311b6f7f", "IsUsed": false, "Type": 3 } }, { - "id": 431, + "id": 319, "value": { "AddressId": 64, - "Digest": 1.4341807314529186e+285, + "Digest": 3.408104063110842e-170, "Hash": "016f77ed384190886c95494159098793d352b527726d539d11311b6f7f3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 435, + "id": 323, "value": { "AddressId": 65, - "Digest": -6.099303498554604e+116, + "Digest": 1.974389471332861e-254, "Hash": "61dbf8357785da739695d7f0c90d559ab432f7c96956cda11dc2c9fd12", "IsUsed": false, "Type": 3 } }, { - "id": 437, + "id": 325, "value": { "AddressId": 66, - "Digest": 4.941660234493613e+151, + "Digest": -6.001545588339516e-16, "Hash": "01dbf8357785da739695d7f0c90d559ab432f7c96956cda11dc2c9fd123522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 441, + "id": 329, "value": { "AddressId": 67, - "Digest": 6.980534651334454e-30, + "Digest": 1.3640297355569604e+137, "Hash": "61d4ec8ff0df21d83c9e49c7a0645d71180de138dc4fb8a990cfb39124", "IsUsed": false, "Type": 3 } }, { - "id": 443, + "id": 331, "value": { "AddressId": 68, - "Digest": 2.886222830597155e-177, + "Digest": 1.1524154961067613e-258, "Hash": "01d4ec8ff0df21d83c9e49c7a0645d71180de138dc4fb8a990cfb391243522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 447, + "id": 335, "value": { "AddressId": 69, - "Digest": -1.6114518712146622e-302, + "Digest": -3264.2170266629537, "Hash": "611c727ca88d2805864dcfeba3f6e750f1d4edcc1ceed9615663cd87f1", "IsUsed": false, "Type": 3 } }, { - "id": 449, + "id": 337, "value": { "AddressId": 70, - "Digest": 3.512552331782294e-29, + "Digest": -5.0857829592148484e+205, "Hash": "011c727ca88d2805864dcfeba3f6e750f1d4edcc1ceed9615663cd87f13522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 453, + "id": 341, "value": { "AddressId": 71, - "Digest": -1.1592285659406763e+237, + "Digest": -1.3972249714678467e-252, "Hash": "611fa5e2016d11aa10401b5a8119bf28059604756e3ffceb789e53cd46", "IsUsed": false, "Type": 3 } }, { - "id": 455, + "id": 343, "value": { "AddressId": 72, - "Digest": -2.0156773896317508e-125, + "Digest": 4.949719754547849e+229, "Hash": "011fa5e2016d11aa10401b5a8119bf28059604756e3ffceb789e53cd463522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 459, + "id": 347, "value": { "AddressId": 73, - "Digest": 2.671659381923158e-183, + "Digest": -2.7328800085746878e-92, "Hash": "61c195204b8504e697fde3d028a7007f3ae30a2646fd6863f815b6f072", "IsUsed": false, "Type": 3 } }, { - "id": 461, + "id": 349, "value": { "AddressId": 74, - "Digest": 4.509047308275815e-29, + "Digest": -4.708563369522398e-209, "Hash": "01c195204b8504e697fde3d028a7007f3ae30a2646fd6863f815b6f0723522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 465, + "id": 353, "value": { "AddressId": 75, - "Digest": 6.79767440678701e+179, + "Digest": -1.3086153304072972e-197, "Hash": "61a91d990207051f26a3ac3f9685459c5fcb9f34e185cf42cbaf587766", "IsUsed": false, "Type": 3 } }, { - "id": 467, + "id": 355, "value": { "AddressId": 76, - "Digest": -1.0451045696337937e-120, + "Digest": 5.410039890136715e-78, "Hash": "01a91d990207051f26a3ac3f9685459c5fcb9f34e185cf42cbaf5877663522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 471, + "id": 359, "value": { "AddressId": 77, - "Digest": 1.808844968378034e+147, + "Digest": 4.1294254569370755e-256, "Hash": "61c5e12639034f258ca99e56d3bab3e4697f2001375ba3ca04d57e1e60", "IsUsed": false, "Type": 3 } }, { - "id": 473, + "id": 361, "value": { "AddressId": 78, - "Digest": -4.281417073658419e-223, + "Digest": -7.096071748551282e-83, "Hash": "01c5e12639034f258ca99e56d3bab3e4697f2001375ba3ca04d57e1e603522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 477, + "id": 365, "value": { "AddressId": 79, - "Digest": -6.628823752517654e-222, + "Digest": -2.412908904186126e+117, "Hash": "618b00e499c4bb114f5a99942082d217fc5c401ec0652c563c4da3a2c6", "IsUsed": false, "Type": 3 } }, { - "id": 479, + "id": 367, "value": { "AddressId": 80, - "Digest": 4.010878712840313e+163, + "Digest": -6.137154840126145e-84, "Hash": "018b00e499c4bb114f5a99942082d217fc5c401ec0652c563c4da3a2c63522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 485, + "id": 373, "value": { "AddressId": 81, - "Digest": -1.421832940254618e+170, + "Digest": -1.4149316953363696e-69, "Hash": "e13522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 4 } }, { - "id": 491, + "id": 379, "value": { "AddressId": 82, - "Digest": -2.58136402261292e-54, + "Digest": -1.841653773306769e-134, "Hash": "61bf3c15cca319dbba8f0d66b5943172758ce91826c4496f7eb5bbec6a", "IsUsed": false, "Type": 3 } }, { - "id": 493, + "id": 381, "value": { "AddressId": 83, - "Digest": 4.535833616086006e-265, + "Digest": 8.999499462654576e+209, "Hash": "01bf3c15cca319dbba8f0d66b5943172758ce91826c4496f7eb5bbec6a3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 499, + "id": 387, "value": { "AddressId": 84, - "Digest": 5.79233518607557e+166, + "Digest": -5.997743117164207e+184, "Hash": "617b41aef636877a9bdae5620cfd9851e1232b377217e8e07580108a40", "IsUsed": false, "Type": 3 } }, { - "id": 501, + "id": 389, "value": { "AddressId": 85, - "Digest": -5.834929129688963e+238, + "Digest": 1.000343373489932e+284, "Hash": "017b41aef636877a9bdae5620cfd9851e1232b377217e8e07580108a403522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", "IsUsed": false, "Type": 1 } }, { - "id": 507, + "id": 395, "value": { "AddressId": 86, - "Digest": 9.003355886391902e+108, + "Digest": -4.854210547715842e+207, "Hash": "018425aa7efc8525af7365d03e7a11fb56fb19ea1a2b06c1b575f39b5e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", "IsUsed": false, "Type": 1 } }, { - "id": 508, + "id": 396, "value": { "AddressId": 87, - "Digest": -1.537835270484703e-219, + "Digest": -4.3268969479528315e+189, "Hash": "017180020fadc5f27c3c3ae306de55c02df0333b49d780dc9c1ca5296f208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", "IsUsed": false, "Type": 1 } + }, + { + "id": 533, + "value": { + "AddressId": 88, + "Digest": 4.408246171827038e-253, + "Hash": "61b53e15326013c794ea5d0437a8f1773241b32b38628fc7eb654c9cb4", + "IsUsed": false, + "Type": 3 + } + }, + { + "id": 535, + "value": { + "AddressId": 89, + "Digest": 2.845949992276018e-130, + "Hash": "01b53e15326013c794ea5d0437a8f1773241b32b38628fc7eb654c9cb43522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 539, + "value": { + "AddressId": 90, + "Digest": -0.0008060465084998175, + "Hash": "618c8a54bd796c7d425e4983f8172e3abbec87d61141579a6e2c710eee", + "IsUsed": false, + "Type": 3 + } + }, + { + "id": 541, + "value": { + "AddressId": 91, + "Digest": -2.1992936904414877e-148, + "Hash": "018c8a54bd796c7d425e4983f8172e3abbec87d61141579a6e2c710eee3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 549, + "value": { + "AddressId": 92, + "Digest": -1.1953609441422947e-211, + "Hash": "61236cd4aa6c16457c70aa0fd0ef6ffd03c6f69038f5c87f8c00c5caa9", + "IsUsed": false, + "Type": 3 + } + }, + { + "id": 551, + "value": { + "AddressId": 93, + "Digest": 1.4757466731077065e-105, + "Hash": "01236cd4aa6c16457c70aa0fd0ef6ffd03c6f69038f5c87f8c00c5caa93522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 555, + "value": { + "AddressId": 94, + "Digest": -2.9159561462300447e+148, + "Hash": "61c0120cea819e98a74b208ee460991986bcd54453a08704e5d30fe914", + "IsUsed": false, + "Type": 3 + } + }, + { + "id": 557, + "value": { + "AddressId": 95, + "Digest": 4.974563271897693e+151, + "Hash": "01c0120cea819e98a74b208ee460991986bcd54453a08704e5d30fe9143522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 563, + "value": { + "AddressId": 96, + "Digest": 6.544003457576558e-208, + "Hash": "01aff544c8f4383152b1ba812c55dfc3210ee4b68d23274f156e4fb618bef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 564, + "value": { + "AddressId": 97, + "Digest": -2.6333980888013377e-260, + "Hash": "01a6edff62b502fc6f711cf234a4590a07e01c1ace0a87b91907a70353bef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 565, + "value": { + "AddressId": 98, + "Digest": -1.5238681004019615e+191, + "Hash": "0173715062ddc91c42ef9339d62c8cf43fc4843c1a4337d9d65db9807dbef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 566, + "value": { + "AddressId": 99, + "Digest": 9324648.548841005, + "Hash": "012f2444d62cfe4aed965fd6849a17c581077e7231846706aea132a85bbef0e133d1c6f1e1c5401162f355e334909b022480a2c2ebc9225e58", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 567, + "value": { + "AddressId": 100, + "Digest": 1.553436226566544e-13, + "Hash": "019d43a4c5aab50d9463842b2fa674a2165256242cff9dfe151aa0351e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 568, + "value": { + "AddressId": 101, + "Digest": -4.854210547715842e+207, + "Hash": "018425aa7efc8525af7365d03e7a11fb56fb19ea1a2b06c1b575f39b5e208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 569, + "value": { + "AddressId": 102, + "Digest": 1.2664246373400631e+222, + "Hash": "01f87c0e381198b9ed0094bd905e819b3a6445909d0441f5a8556da91d208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 570, + "value": { + "AddressId": 103, + "Digest": 1.5741733533332658e+181, + "Hash": "013a8bf5d91af753aea83d342306bd3a209c901120286c55b7720b5df9208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 + } + }, + { + "id": 571, + "value": { + "AddressId": 104, + "Digest": -1.8228594088781238e-95, + "Hash": "01374184a7b04d254c2dd8563aa46d3af5e3f93383a4bd8645fee61c08208e4aa6c81bfd5723095d66119dc78717874a918486d4f076063510", + "IsUsed": false, + "Type": 1 + } } ], "AddressMapping": [ { - "id": 242, + "id": 130, "value": { "AddressId": 1, "AddressMappingId": 1, @@ -883,7 +1053,7 @@ } }, { - "id": 244, + "id": 132, "value": { "AddressId": 2, "AddressMappingId": 2, @@ -891,7 +1061,7 @@ } }, { - "id": 248, + "id": 136, "value": { "AddressId": 3, "AddressMappingId": 3, @@ -899,7 +1069,7 @@ } }, { - "id": 250, + "id": 138, "value": { "AddressId": 4, "AddressMappingId": 4, @@ -907,7 +1077,7 @@ } }, { - "id": 254, + "id": 142, "value": { "AddressId": 5, "AddressMappingId": 5, @@ -915,7 +1085,7 @@ } }, { - "id": 256, + "id": 144, "value": { "AddressId": 6, "AddressMappingId": 6, @@ -923,7 +1093,7 @@ } }, { - "id": 260, + "id": 148, "value": { "AddressId": 7, "AddressMappingId": 7, @@ -931,7 +1101,7 @@ } }, { - "id": 262, + "id": 150, "value": { "AddressId": 8, "AddressMappingId": 8, @@ -939,7 +1109,7 @@ } }, { - "id": 266, + "id": 154, "value": { "AddressId": 9, "AddressMappingId": 9, @@ -947,7 +1117,7 @@ } }, { - "id": 268, + "id": 156, "value": { "AddressId": 10, "AddressMappingId": 10, @@ -955,7 +1125,7 @@ } }, { - "id": 272, + "id": 160, "value": { "AddressId": 11, "AddressMappingId": 11, @@ -963,7 +1133,7 @@ } }, { - "id": 274, + "id": 162, "value": { "AddressId": 12, "AddressMappingId": 12, @@ -971,7 +1141,7 @@ } }, { - "id": 278, + "id": 166, "value": { "AddressId": 13, "AddressMappingId": 13, @@ -979,7 +1149,7 @@ } }, { - "id": 280, + "id": 168, "value": { "AddressId": 14, "AddressMappingId": 14, @@ -987,7 +1157,7 @@ } }, { - "id": 284, + "id": 172, "value": { "AddressId": 15, "AddressMappingId": 15, @@ -995,7 +1165,7 @@ } }, { - "id": 286, + "id": 174, "value": { "AddressId": 16, "AddressMappingId": 16, @@ -1003,7 +1173,7 @@ } }, { - "id": 290, + "id": 178, "value": { "AddressId": 17, "AddressMappingId": 17, @@ -1011,7 +1181,7 @@ } }, { - "id": 292, + "id": 180, "value": { "AddressId": 18, "AddressMappingId": 18, @@ -1019,7 +1189,7 @@ } }, { - "id": 296, + "id": 184, "value": { "AddressId": 19, "AddressMappingId": 19, @@ -1027,7 +1197,7 @@ } }, { - "id": 298, + "id": 186, "value": { "AddressId": 20, "AddressMappingId": 20, @@ -1035,7 +1205,7 @@ } }, { - "id": 302, + "id": 190, "value": { "AddressId": 21, "AddressMappingId": 21, @@ -1043,7 +1213,7 @@ } }, { - "id": 304, + "id": 192, "value": { "AddressId": 22, "AddressMappingId": 22, @@ -1051,7 +1221,7 @@ } }, { - "id": 308, + "id": 196, "value": { "AddressId": 23, "AddressMappingId": 23, @@ -1059,7 +1229,7 @@ } }, { - "id": 310, + "id": 198, "value": { "AddressId": 24, "AddressMappingId": 24, @@ -1067,7 +1237,7 @@ } }, { - "id": 314, + "id": 202, "value": { "AddressId": 25, "AddressMappingId": 25, @@ -1075,7 +1245,7 @@ } }, { - "id": 316, + "id": 204, "value": { "AddressId": 26, "AddressMappingId": 26, @@ -1083,7 +1253,7 @@ } }, { - "id": 320, + "id": 208, "value": { "AddressId": 27, "AddressMappingId": 27, @@ -1091,7 +1261,7 @@ } }, { - "id": 322, + "id": 210, "value": { "AddressId": 28, "AddressMappingId": 28, @@ -1099,7 +1269,7 @@ } }, { - "id": 326, + "id": 214, "value": { "AddressId": 29, "AddressMappingId": 29, @@ -1107,7 +1277,7 @@ } }, { - "id": 328, + "id": 216, "value": { "AddressId": 30, "AddressMappingId": 30, @@ -1115,7 +1285,7 @@ } }, { - "id": 332, + "id": 220, "value": { "AddressId": 31, "AddressMappingId": 31, @@ -1123,7 +1293,7 @@ } }, { - "id": 334, + "id": 222, "value": { "AddressId": 32, "AddressMappingId": 32, @@ -1131,7 +1301,7 @@ } }, { - "id": 338, + "id": 226, "value": { "AddressId": 33, "AddressMappingId": 33, @@ -1139,7 +1309,7 @@ } }, { - "id": 340, + "id": 228, "value": { "AddressId": 34, "AddressMappingId": 34, @@ -1147,7 +1317,7 @@ } }, { - "id": 344, + "id": 232, "value": { "AddressId": 35, "AddressMappingId": 35, @@ -1155,7 +1325,7 @@ } }, { - "id": 346, + "id": 234, "value": { "AddressId": 36, "AddressMappingId": 36, @@ -1163,7 +1333,7 @@ } }, { - "id": 350, + "id": 238, "value": { "AddressId": 37, "AddressMappingId": 37, @@ -1171,7 +1341,7 @@ } }, { - "id": 352, + "id": 240, "value": { "AddressId": 38, "AddressMappingId": 38, @@ -1179,7 +1349,7 @@ } }, { - "id": 356, + "id": 244, "value": { "AddressId": 39, "AddressMappingId": 39, @@ -1187,7 +1357,7 @@ } }, { - "id": 358, + "id": 246, "value": { "AddressId": 40, "AddressMappingId": 40, @@ -1195,7 +1365,7 @@ } }, { - "id": 364, + "id": 252, "value": { "AddressId": 41, "AddressMappingId": 41, @@ -1203,7 +1373,7 @@ } }, { - "id": 366, + "id": 254, "value": { "AddressId": 42, "AddressMappingId": 42, @@ -1211,7 +1381,7 @@ } }, { - "id": 370, + "id": 258, "value": { "AddressId": 43, "AddressMappingId": 43, @@ -1219,7 +1389,7 @@ } }, { - "id": 372, + "id": 260, "value": { "AddressId": 44, "AddressMappingId": 44, @@ -1227,7 +1397,7 @@ } }, { - "id": 376, + "id": 264, "value": { "AddressId": 45, "AddressMappingId": 45, @@ -1235,7 +1405,7 @@ } }, { - "id": 378, + "id": 266, "value": { "AddressId": 46, "AddressMappingId": 46, @@ -1243,7 +1413,7 @@ } }, { - "id": 382, + "id": 270, "value": { "AddressId": 47, "AddressMappingId": 47, @@ -1251,7 +1421,7 @@ } }, { - "id": 384, + "id": 272, "value": { "AddressId": 48, "AddressMappingId": 48, @@ -1259,7 +1429,7 @@ } }, { - "id": 388, + "id": 276, "value": { "AddressId": 49, "AddressMappingId": 49, @@ -1267,7 +1437,7 @@ } }, { - "id": 390, + "id": 278, "value": { "AddressId": 50, "AddressMappingId": 50, @@ -1275,7 +1445,7 @@ } }, { - "id": 394, + "id": 282, "value": { "AddressId": 51, "AddressMappingId": 51, @@ -1283,7 +1453,7 @@ } }, { - "id": 396, + "id": 284, "value": { "AddressId": 52, "AddressMappingId": 52, @@ -1291,7 +1461,7 @@ } }, { - "id": 400, + "id": 288, "value": { "AddressId": 53, "AddressMappingId": 53, @@ -1299,7 +1469,7 @@ } }, { - "id": 402, + "id": 290, "value": { "AddressId": 54, "AddressMappingId": 54, @@ -1307,7 +1477,7 @@ } }, { - "id": 406, + "id": 294, "value": { "AddressId": 55, "AddressMappingId": 55, @@ -1315,7 +1485,7 @@ } }, { - "id": 408, + "id": 296, "value": { "AddressId": 56, "AddressMappingId": 56, @@ -1323,7 +1493,7 @@ } }, { - "id": 412, + "id": 300, "value": { "AddressId": 57, "AddressMappingId": 57, @@ -1331,7 +1501,7 @@ } }, { - "id": 414, + "id": 302, "value": { "AddressId": 58, "AddressMappingId": 58, @@ -1339,7 +1509,7 @@ } }, { - "id": 418, + "id": 306, "value": { "AddressId": 59, "AddressMappingId": 59, @@ -1347,7 +1517,7 @@ } }, { - "id": 420, + "id": 308, "value": { "AddressId": 60, "AddressMappingId": 60, @@ -1355,7 +1525,7 @@ } }, { - "id": 424, + "id": 312, "value": { "AddressId": 61, "AddressMappingId": 61, @@ -1363,7 +1533,7 @@ } }, { - "id": 426, + "id": 314, "value": { "AddressId": 62, "AddressMappingId": 62, @@ -1371,7 +1541,7 @@ } }, { - "id": 430, + "id": 318, "value": { "AddressId": 63, "AddressMappingId": 63, @@ -1379,7 +1549,7 @@ } }, { - "id": 432, + "id": 320, "value": { "AddressId": 64, "AddressMappingId": 64, @@ -1387,7 +1557,7 @@ } }, { - "id": 436, + "id": 324, "value": { "AddressId": 65, "AddressMappingId": 65, @@ -1395,7 +1565,7 @@ } }, { - "id": 438, + "id": 326, "value": { "AddressId": 66, "AddressMappingId": 66, @@ -1403,7 +1573,7 @@ } }, { - "id": 442, + "id": 330, "value": { "AddressId": 67, "AddressMappingId": 67, @@ -1411,7 +1581,7 @@ } }, { - "id": 444, + "id": 332, "value": { "AddressId": 68, "AddressMappingId": 68, @@ -1419,7 +1589,7 @@ } }, { - "id": 448, + "id": 336, "value": { "AddressId": 69, "AddressMappingId": 69, @@ -1427,7 +1597,7 @@ } }, { - "id": 450, + "id": 338, "value": { "AddressId": 70, "AddressMappingId": 70, @@ -1435,7 +1605,7 @@ } }, { - "id": 454, + "id": 342, "value": { "AddressId": 71, "AddressMappingId": 71, @@ -1443,7 +1613,7 @@ } }, { - "id": 456, + "id": 344, "value": { "AddressId": 72, "AddressMappingId": 72, @@ -1451,7 +1621,7 @@ } }, { - "id": 460, + "id": 348, "value": { "AddressId": 73, "AddressMappingId": 73, @@ -1459,7 +1629,7 @@ } }, { - "id": 462, + "id": 350, "value": { "AddressId": 74, "AddressMappingId": 74, @@ -1467,7 +1637,7 @@ } }, { - "id": 466, + "id": 354, "value": { "AddressId": 75, "AddressMappingId": 75, @@ -1475,7 +1645,7 @@ } }, { - "id": 468, + "id": 356, "value": { "AddressId": 76, "AddressMappingId": 76, @@ -1483,7 +1653,7 @@ } }, { - "id": 472, + "id": 360, "value": { "AddressId": 77, "AddressMappingId": 77, @@ -1491,7 +1661,7 @@ } }, { - "id": 474, + "id": 362, "value": { "AddressId": 78, "AddressMappingId": 78, @@ -1499,7 +1669,7 @@ } }, { - "id": 478, + "id": 366, "value": { "AddressId": 79, "AddressMappingId": 79, @@ -1507,7 +1677,7 @@ } }, { - "id": 480, + "id": 368, "value": { "AddressId": 80, "AddressMappingId": 80, @@ -1515,7 +1685,7 @@ } }, { - "id": 486, + "id": 374, "value": { "AddressId": 81, "AddressMappingId": 81, @@ -1523,7 +1693,7 @@ } }, { - "id": 492, + "id": 380, "value": { "AddressId": 82, "AddressMappingId": 82, @@ -1531,7 +1701,7 @@ } }, { - "id": 494, + "id": 382, "value": { "AddressId": 83, "AddressMappingId": 83, @@ -1539,7 +1709,7 @@ } }, { - "id": 500, + "id": 388, "value": { "AddressId": 84, "AddressMappingId": 84, @@ -1547,17 +1717,81 @@ } }, { - "id": 502, + "id": 390, "value": { "AddressId": 85, "AddressMappingId": 85, "KeyDerivationId": 50 } + }, + { + "id": 534, + "value": { + "AddressId": 88, + "AddressMappingId": 86, + "KeyDerivationId": 51 + } + }, + { + "id": 536, + "value": { + "AddressId": 89, + "AddressMappingId": 87, + "KeyDerivationId": 51 + } + }, + { + "id": 540, + "value": { + "AddressId": 90, + "AddressMappingId": 88, + "KeyDerivationId": 52 + } + }, + { + "id": 542, + "value": { + "AddressId": 91, + "AddressMappingId": 89, + "KeyDerivationId": 52 + } + }, + { + "id": 550, + "value": { + "AddressId": 92, + "AddressMappingId": 90, + "KeyDerivationId": 53 + } + }, + { + "id": 552, + "value": { + "AddressId": 93, + "AddressMappingId": 91, + "KeyDerivationId": 53 + } + }, + { + "id": 556, + "value": { + "AddressId": 94, + "AddressMappingId": 92, + "KeyDerivationId": 54 + } + }, + { + "id": 558, + "value": { + "AddressId": 95, + "AddressMappingId": 93, + "KeyDerivationId": 54 + } } ], "Bip44Account": [ { - "id": 235, + "id": 123, "value": { "Bip44AccountId": 1, "KeyDerivationId": 4 @@ -1566,15 +1800,15 @@ ], "Bip44Chain": [ { - "id": 239, + "id": 127, "value": { "Bip44ChainId": 1, - "DisplayCutoff": 1, + "DisplayCutoff": 4, "KeyDerivationId": 5 } }, { - "id": 361, + "id": 249, "value": { "Bip44ChainId": 2, "DisplayCutoff": null, @@ -1582,7 +1816,7 @@ } }, { - "id": 483, + "id": 371, "value": { "Bip44ChainId": 3, "DisplayCutoff": null, @@ -1593,336 +1827,478 @@ "Bip44Wrapper": [], "Block": [ { - "id": 509, + "id": 397, "value": { "BlockId": 1, "BlockTime": 1699864409000, - "Digest": -1.2539522861616603e-13, + "Digest": 9.276640484534976e+179, "Hash": "3664bab92afb887173a2efe7031eb1110c3ae7942a0c2f32c487e82aaac8ea19", "Height": 9541014, "SlotNum": 108298118 } }, { - "id": 519, + "id": 407, "value": { "BlockId": 2, "BlockTime": 1709816081000, - "Digest": 6.465949388494242e+205, + "Digest": 2.6574097388083826e+180, "Hash": "510e0e94d2cc079ee57e6130bd26415b7895cec13f297136db5f442551484b1b", "Height": 10025299, "SlotNum": 118249790 } + }, + { + "id": 572, + "value": { + "BlockId": 3, + "BlockTime": 1733154397000, + "Digest": 2.2636697616083852e-39, + "Hash": "7488f74e6a59236be59cc7ecf9f1435a57b2de59ccddae9bb9cbc4a546974d6d", + "Height": 11168886, + "SlotNum": 141588106 + } + }, + { + "id": 586, + "value": { + "BlockId": 4, + "BlockTime": 1733154528000, + "Digest": -7.288159110554098e-131, + "Hash": "67f46d5212cbc5f826a387cab7eb96a759f7a6fb977545a7d26cc790c99ef57d", + "Height": 11168896, + "SlotNum": 141588237 + } + }, + { + "id": 602, + "value": { + "BlockId": 5, + "BlockTime": 1733154959000, + "Digest": -2.3104675498711366e+301, + "Hash": "f5d11a53b10576a44ffcd9cff0d5f2de459e2199f35fba13ef77b535274c26cd", + "Height": 11168920, + "SlotNum": 141588668 + } + }, + { + "id": 610, + "value": { + "BlockId": 6, + "BlockTime": 1733255392000, + "Digest": 2.0944487603669543e+285, + "Hash": "ad4819c5a89b1e3dc9e5b6d8f081bdaf290052e146935c1fae9e717627d42e38", + "Height": 11173784, + "SlotNum": 141689101 + } + }, + { + "id": 628, + "value": { + "BlockId": 7, + "BlockTime": 1733737570000, + "Digest": 8201.117258560918, + "Hash": "6f77f55985abd3479ee6a0d77a6bf753d4c52bf683222bbb7a01ca04f2875102", + "Height": 11197072, + "SlotNum": 142171279 + } } ], "CanonicalAddress": [ { - "id": 245, + "id": 133, "value": { "CanonicalAddressId": 1, "KeyDerivationId": 6 } }, { - "id": 251, + "id": 139, "value": { "CanonicalAddressId": 2, "KeyDerivationId": 7 } }, { - "id": 257, + "id": 145, "value": { "CanonicalAddressId": 3, "KeyDerivationId": 8 } }, { - "id": 263, + "id": 151, "value": { "CanonicalAddressId": 4, "KeyDerivationId": 9 } }, { - "id": 269, + "id": 157, "value": { "CanonicalAddressId": 5, "KeyDerivationId": 10 } }, { - "id": 275, + "id": 163, "value": { "CanonicalAddressId": 6, "KeyDerivationId": 11 } }, { - "id": 281, + "id": 169, "value": { "CanonicalAddressId": 7, "KeyDerivationId": 12 } }, { - "id": 287, + "id": 175, "value": { "CanonicalAddressId": 8, "KeyDerivationId": 13 } }, { - "id": 293, + "id": 181, "value": { "CanonicalAddressId": 9, "KeyDerivationId": 14 } }, { - "id": 299, + "id": 187, "value": { "CanonicalAddressId": 10, "KeyDerivationId": 15 } }, { - "id": 305, + "id": 193, "value": { "CanonicalAddressId": 11, "KeyDerivationId": 16 } }, { - "id": 311, + "id": 199, "value": { "CanonicalAddressId": 12, "KeyDerivationId": 17 } }, { - "id": 317, + "id": 205, "value": { "CanonicalAddressId": 13, "KeyDerivationId": 18 } }, { - "id": 323, + "id": 211, "value": { "CanonicalAddressId": 14, "KeyDerivationId": 19 } }, { - "id": 329, + "id": 217, "value": { "CanonicalAddressId": 15, "KeyDerivationId": 20 } }, { - "id": 335, + "id": 223, "value": { "CanonicalAddressId": 16, "KeyDerivationId": 21 } }, { - "id": 341, + "id": 229, "value": { "CanonicalAddressId": 17, "KeyDerivationId": 22 } }, { - "id": 347, + "id": 235, "value": { "CanonicalAddressId": 18, "KeyDerivationId": 23 } }, { - "id": 353, + "id": 241, "value": { "CanonicalAddressId": 19, "KeyDerivationId": 24 } }, { - "id": 359, + "id": 247, "value": { "CanonicalAddressId": 20, "KeyDerivationId": 25 } }, { - "id": 367, + "id": 255, "value": { "CanonicalAddressId": 21, "KeyDerivationId": 27 } }, { - "id": 373, + "id": 261, "value": { "CanonicalAddressId": 22, "KeyDerivationId": 28 } }, { - "id": 379, + "id": 267, "value": { "CanonicalAddressId": 23, "KeyDerivationId": 29 } }, { - "id": 385, + "id": 273, "value": { "CanonicalAddressId": 24, "KeyDerivationId": 30 } }, { - "id": 391, + "id": 279, "value": { "CanonicalAddressId": 25, "KeyDerivationId": 31 } }, { - "id": 397, + "id": 285, "value": { "CanonicalAddressId": 26, "KeyDerivationId": 32 } }, { - "id": 403, + "id": 291, "value": { "CanonicalAddressId": 27, "KeyDerivationId": 33 } }, { - "id": 409, + "id": 297, "value": { "CanonicalAddressId": 28, "KeyDerivationId": 34 } }, { - "id": 415, + "id": 303, "value": { "CanonicalAddressId": 29, "KeyDerivationId": 35 } }, { - "id": 421, + "id": 309, "value": { "CanonicalAddressId": 30, "KeyDerivationId": 36 } }, { - "id": 427, + "id": 315, "value": { "CanonicalAddressId": 31, "KeyDerivationId": 37 } }, { - "id": 433, + "id": 321, "value": { "CanonicalAddressId": 32, "KeyDerivationId": 38 } }, { - "id": 439, + "id": 327, "value": { "CanonicalAddressId": 33, "KeyDerivationId": 39 } }, { - "id": 445, + "id": 333, "value": { "CanonicalAddressId": 34, "KeyDerivationId": 40 } }, { - "id": 451, + "id": 339, "value": { "CanonicalAddressId": 35, "KeyDerivationId": 41 } }, { - "id": 457, + "id": 345, "value": { "CanonicalAddressId": 36, "KeyDerivationId": 42 } }, { - "id": 463, + "id": 351, "value": { "CanonicalAddressId": 37, "KeyDerivationId": 43 } }, { - "id": 469, + "id": 357, "value": { "CanonicalAddressId": 38, "KeyDerivationId": 44 } }, { - "id": 475, + "id": 363, "value": { "CanonicalAddressId": 39, "KeyDerivationId": 45 } }, { - "id": 481, + "id": 369, "value": { "CanonicalAddressId": 40, "KeyDerivationId": 46 } }, { - "id": 487, + "id": 375, "value": { "CanonicalAddressId": 41, "KeyDerivationId": 48 } }, { - "id": 495, + "id": 383, "value": { "CanonicalAddressId": 42, "KeyDerivationId": 49 } }, { - "id": 503, + "id": 391, "value": { "CanonicalAddressId": 43, "KeyDerivationId": 50 } + }, + { + "id": 537, + "value": { + "CanonicalAddressId": 44, + "KeyDerivationId": 51 + } + }, + { + "id": 543, + "value": { + "CanonicalAddressId": 45, + "KeyDerivationId": 52 + } + }, + { + "id": 553, + "value": { + "CanonicalAddressId": 46, + "KeyDerivationId": 53 + } + }, + { + "id": 559, + "value": { + "CanonicalAddressId": 47, + "KeyDerivationId": 54 + } + } + ], + "Certificate": [ + { + "id": 593, + "value": { + "CertificateId": 1, + "Kind": 0, + "Ordinal": 0, + "Payload": "82008200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "TransactionId": 4 + } + }, + { + "id": 595, + "value": { + "CertificateId": 2, + "Kind": 2, + "Ordinal": 1, + "Payload": "83028200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf581c359d3f8e355c873b0b5cae1e18eb12e44dcfc2ad212706d93ac314ab", + "TransactionId": 4 + } + }, + { + "id": 606, + "value": { + "CertificateId": 3, + "Kind": 1, + "Ordinal": 0, + "Payload": "82008200581c3522e100aa3b5dd881f3b827f9debd27d1d294a278bfa8f3aac7ebaf", + "TransactionId": 5 + } + } + ], + "CertificateAddress": [ + { + "id": 594, + "value": { + "AddressId": 81, + "CertificateAddressId": 1, + "CertificateId": 1, + "Relation": 0 + } + }, + { + "id": 596, + "value": { + "AddressId": 81, + "CertificateAddressId": 2, + "CertificateId": 2, + "Relation": 0 + } + }, + { + "id": 607, + "value": { + "AddressId": 81, + "CertificateAddressId": 3, + "CertificateId": 3, + "Relation": 0 + } } ], - "Certificate": [], - "CertificateAddress": [], "Cip1852Wrapper": [ { - "id": 228, + "id": 116, "value": { "ConceptualWalletId": 1, "PrivateDeriverKeyDerivationId": 1, @@ -1935,7 +2311,7 @@ ], "CoinTypeDerivation": [ { - "id": 232, + "id": 120, "value": { "CoinTypeDerivationId": 1, "KeyDerivationId": 3 @@ -1944,7 +2320,7 @@ ], "ConceptualWallet": [ { - "id": 224, + "id": 112, "value": { "ConceptualWalletId": 1, "Name": "TestWallet1", @@ -1956,17 +2332,17 @@ { "id": 93, "value": { - "AddressSeed": 1033713417, - "BlockSeed": 763624740, + "AddressSeed": 2964970265, + "BlockSeed": 3593231839, "EncryptionMetaId": 0, - "TokenSeed": 2585207091, - "TransactionSeed": 318293096 + "TokenSeed": 4164304111, + "TransactionSeed": 760948426 } } ], "Explorer": [ { - "id": 99, + "id": 98, "value": { "Endpoints": { "address": "https://cardanoscan.io/address/", @@ -1982,7 +2358,7 @@ } }, { - "id": 100, + "id": 99, "value": { "Endpoints": { "address": "https://adastat.net/addresses/", @@ -1998,7 +2374,7 @@ } }, { - "id": 101, + "id": 100, "value": { "Endpoints": { "address": "https://explorer.cardano.org/en/address?address=", @@ -2011,7 +2387,7 @@ } }, { - "id": 102, + "id": 101, "value": { "Endpoints": { "address": "https://cexplorer.io/address/", @@ -2027,7 +2403,7 @@ } }, { - "id": 103, + "id": 102, "value": { "Endpoints": { "address": "https://blockchair.com/cardano/address/", @@ -2040,7 +2416,7 @@ } }, { - "id": 104, + "id": 103, "value": { "Endpoints": { "address": "https://adapools.org/address/", @@ -2055,7 +2431,7 @@ } }, { - "id": 105, + "id": 104, "value": { "Endpoints": { "pool": "https://pooltool.io/pool/" @@ -2067,36 +2443,23 @@ } }, { - "id": 106, + "id": 105, "value": { "Endpoints": { - "address": "https://explorer.cardano-testnet.iohkdev.io/en/address?address=", - "transaction": "https://explorer.cardano-testnet.iohkdev.io/en/transaction?id=" + "address": "https://preprod.cardanoscan.io/address/", + "pool": "https://preprod.cardanoscan.io/pool/", + "stakeAddress": "https://preprod.cardanoscan.io/stakeKey/", + "token": "https://preprod.cardanoscan.io/token/", + "transaction": "https://preprod.cardanoscan.io/transaction/" }, - "ExplorerId": 400, - "IsBackup": true, - "Name": "CardanoExplorer", - "NetworkId": 300 - } - }, - { - "id": 107, - "value": { - "Endpoints": { - "address": "https://testnet.cardanoscan.io/address/", - "pool": "https://testnet.cardanoscan.io/pool/", - "stakeAddress": "https://testnet.cardanoscan.io/stakeKey/", - "token": "https://testnet.cardanoscan.io/token/", - "transaction": "https://testnet.cardanoscan.io/transaction/" - }, - "ExplorerId": 450, + "ExplorerId": 450, "IsBackup": true, "Name": "CardanoScan", "NetworkId": 250 } }, { - "id": 108, + "id": 106, "value": { "Endpoints": { "address": "https://preview.cardanoscan.io/address/", @@ -2112,7 +2475,7 @@ } }, { - "id": 109, + "id": 107, "value": { "Endpoints": { "address": "https://sancho.cexplorer.io/address/", @@ -2131,9 +2494,9 @@ "HwWalletMeta": [], "Key": [ { - "id": 225, + "id": 113, "value": { - "Hash": "edb8eaa8970996442bf9633ad2c578b1a67d14fad00a28e36c7d84c33c14019ffc8f21da488c8ed9ba4871e17246aa2a223a98a6d0739f02d8f2bc4fa2577ba8f02161a39e9148b5f2e71c547beffa40bccab83cd1ef995c7ce1425bb1073043526e0bc421f34d3ac7bdf8e1dc385ef6007ca84633b95b8f8d8382c77d335fc44633a77d859af2626e5e4086aec4da2c639f91f3b0c296cc7207a087", + "Hash": "06ccdb7e01a7d2e26333fd376ccd091b7c97c7bbb07d2847299dc45021bf3c4fce53ec53a105487ed8bb190cf2dec56cff4aa21e42f4312d2981b485dd5dc17c465ba728a7c0ada2d7dea0263744a6f028acfb084497476f16c60c2fb012ed42fcae437366140e93f4ece8bee8106e755a8f1a4621c7067d2298c6828cc9eb08c4d7b3f4ed4855af20a6ce4538c92aebeabe541ffb9f3c0c18138dcb", "IsEncrypted": true, "KeyId": 1, "PasswordLastUpdate": null, @@ -2141,7 +2504,7 @@ } }, { - "id": 233, + "id": 121, "value": { "Hash": "45d98cc6f9408741ebd3820553b32a08d9acb7174c0ecdb58ec0b708c502716e55a588dd5dcd0dbd0497dc0a429a93cb352d7ca95f131f29a5ab682f9bd0192c", "IsEncrypted": false, @@ -2153,7 +2516,7 @@ ], "KeyDerivation": [ { - "id": 226, + "id": 114, "value": { "Index": null, "KeyDerivationId": 1, @@ -2163,7 +2526,7 @@ } }, { - "id": 229, + "id": 117, "value": { "Index": 2147485500, "KeyDerivationId": 2, @@ -2173,7 +2536,7 @@ } }, { - "id": 231, + "id": 119, "value": { "Index": 2147485463, "KeyDerivationId": 3, @@ -2183,7 +2546,7 @@ } }, { - "id": 234, + "id": 122, "value": { "Index": 2147483648, "KeyDerivationId": 4, @@ -2193,7 +2556,7 @@ } }, { - "id": 238, + "id": 126, "value": { "Index": 0, "KeyDerivationId": 5, @@ -2203,7 +2566,7 @@ } }, { - "id": 240, + "id": 128, "value": { "Index": 0, "KeyDerivationId": 6, @@ -2213,7 +2576,7 @@ } }, { - "id": 246, + "id": 134, "value": { "Index": 1, "KeyDerivationId": 7, @@ -2223,7 +2586,7 @@ } }, { - "id": 252, + "id": 140, "value": { "Index": 2, "KeyDerivationId": 8, @@ -2233,7 +2596,7 @@ } }, { - "id": 258, + "id": 146, "value": { "Index": 3, "KeyDerivationId": 9, @@ -2243,7 +2606,7 @@ } }, { - "id": 264, + "id": 152, "value": { "Index": 4, "KeyDerivationId": 10, @@ -2253,7 +2616,7 @@ } }, { - "id": 270, + "id": 158, "value": { "Index": 5, "KeyDerivationId": 11, @@ -2263,7 +2626,7 @@ } }, { - "id": 276, + "id": 164, "value": { "Index": 6, "KeyDerivationId": 12, @@ -2273,7 +2636,7 @@ } }, { - "id": 282, + "id": 170, "value": { "Index": 7, "KeyDerivationId": 13, @@ -2283,7 +2646,7 @@ } }, { - "id": 288, + "id": 176, "value": { "Index": 8, "KeyDerivationId": 14, @@ -2293,7 +2656,7 @@ } }, { - "id": 294, + "id": 182, "value": { "Index": 9, "KeyDerivationId": 15, @@ -2303,7 +2666,7 @@ } }, { - "id": 300, + "id": 188, "value": { "Index": 10, "KeyDerivationId": 16, @@ -2313,7 +2676,7 @@ } }, { - "id": 306, + "id": 194, "value": { "Index": 11, "KeyDerivationId": 17, @@ -2323,7 +2686,7 @@ } }, { - "id": 312, + "id": 200, "value": { "Index": 12, "KeyDerivationId": 18, @@ -2333,7 +2696,7 @@ } }, { - "id": 318, + "id": 206, "value": { "Index": 13, "KeyDerivationId": 19, @@ -2343,7 +2706,7 @@ } }, { - "id": 324, + "id": 212, "value": { "Index": 14, "KeyDerivationId": 20, @@ -2353,7 +2716,7 @@ } }, { - "id": 330, + "id": 218, "value": { "Index": 15, "KeyDerivationId": 21, @@ -2363,7 +2726,7 @@ } }, { - "id": 336, + "id": 224, "value": { "Index": 16, "KeyDerivationId": 22, @@ -2373,7 +2736,7 @@ } }, { - "id": 342, + "id": 230, "value": { "Index": 17, "KeyDerivationId": 23, @@ -2383,7 +2746,7 @@ } }, { - "id": 348, + "id": 236, "value": { "Index": 18, "KeyDerivationId": 24, @@ -2393,7 +2756,7 @@ } }, { - "id": 354, + "id": 242, "value": { "Index": 19, "KeyDerivationId": 25, @@ -2403,7 +2766,7 @@ } }, { - "id": 360, + "id": 248, "value": { "Index": 1, "KeyDerivationId": 26, @@ -2413,7 +2776,7 @@ } }, { - "id": 362, + "id": 250, "value": { "Index": 0, "KeyDerivationId": 27, @@ -2423,7 +2786,7 @@ } }, { - "id": 368, + "id": 256, "value": { "Index": 1, "KeyDerivationId": 28, @@ -2433,7 +2796,7 @@ } }, { - "id": 374, + "id": 262, "value": { "Index": 2, "KeyDerivationId": 29, @@ -2443,7 +2806,7 @@ } }, { - "id": 380, + "id": 268, "value": { "Index": 3, "KeyDerivationId": 30, @@ -2453,7 +2816,7 @@ } }, { - "id": 386, + "id": 274, "value": { "Index": 4, "KeyDerivationId": 31, @@ -2463,7 +2826,7 @@ } }, { - "id": 392, + "id": 280, "value": { "Index": 5, "KeyDerivationId": 32, @@ -2473,7 +2836,7 @@ } }, { - "id": 398, + "id": 286, "value": { "Index": 6, "KeyDerivationId": 33, @@ -2483,7 +2846,7 @@ } }, { - "id": 404, + "id": 292, "value": { "Index": 7, "KeyDerivationId": 34, @@ -2493,7 +2856,7 @@ } }, { - "id": 410, + "id": 298, "value": { "Index": 8, "KeyDerivationId": 35, @@ -2503,7 +2866,7 @@ } }, { - "id": 416, + "id": 304, "value": { "Index": 9, "KeyDerivationId": 36, @@ -2513,7 +2876,7 @@ } }, { - "id": 422, + "id": 310, "value": { "Index": 10, "KeyDerivationId": 37, @@ -2523,7 +2886,7 @@ } }, { - "id": 428, + "id": 316, "value": { "Index": 11, "KeyDerivationId": 38, @@ -2533,7 +2896,7 @@ } }, { - "id": 434, + "id": 322, "value": { "Index": 12, "KeyDerivationId": 39, @@ -2543,7 +2906,7 @@ } }, { - "id": 440, + "id": 328, "value": { "Index": 13, "KeyDerivationId": 40, @@ -2553,7 +2916,7 @@ } }, { - "id": 446, + "id": 334, "value": { "Index": 14, "KeyDerivationId": 41, @@ -2563,7 +2926,7 @@ } }, { - "id": 452, + "id": 340, "value": { "Index": 15, "KeyDerivationId": 42, @@ -2573,7 +2936,7 @@ } }, { - "id": 458, + "id": 346, "value": { "Index": 16, "KeyDerivationId": 43, @@ -2583,7 +2946,7 @@ } }, { - "id": 464, + "id": 352, "value": { "Index": 17, "KeyDerivationId": 44, @@ -2593,7 +2956,7 @@ } }, { - "id": 470, + "id": 358, "value": { "Index": 18, "KeyDerivationId": 45, @@ -2603,7 +2966,7 @@ } }, { - "id": 476, + "id": 364, "value": { "Index": 19, "KeyDerivationId": 46, @@ -2613,7 +2976,7 @@ } }, { - "id": 482, + "id": 370, "value": { "Index": 2, "KeyDerivationId": 47, @@ -2623,7 +2986,7 @@ } }, { - "id": 484, + "id": 372, "value": { "Index": 0, "KeyDerivationId": 48, @@ -2633,7 +2996,7 @@ } }, { - "id": 490, + "id": 378, "value": { "Index": 20, "KeyDerivationId": 49, @@ -2643,7 +3006,7 @@ } }, { - "id": 498, + "id": 386, "value": { "Index": 20, "KeyDerivationId": 50, @@ -2651,17 +3014,57 @@ "PrivateKeyId": null, "PublicKeyId": null } + }, + { + "id": 532, + "value": { + "Index": 21, + "KeyDerivationId": 51, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 538, + "value": { + "Index": 22, + "KeyDerivationId": 52, + "Parent": 5, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 548, + "value": { + "Index": 21, + "KeyDerivationId": 53, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } + }, + { + "id": 554, + "value": { + "Index": 22, + "KeyDerivationId": 54, + "Parent": 26, + "PrivateKeyId": null, + "PublicKeyId": null + } } ], "LastSyncInfo": [ { - "id": 236, + "id": 124, "value": { - "BlockHash": "f01a8ab4d995799bbda61e924dbf8f556b7cdcbdb58a6557c9cfe1e3876f9e8b", - "Height": 10385188, + "BlockHash": "6bed1d075e5264431636f0b550b6bf9a3ff3e46f3cc2104611f9bf66e286a783", + "Height": 11198229, "LastSyncInfoId": 1, - "SlotNum": 125579463, - "Time": 1717145794121 + "SlotNum": 142194564, + "Time": 1733760884144 } } ], @@ -2671,6 +3074,7 @@ "value": { "Backend": { "BackendService": "https://api.yoroiwallet.com", + "BackendServiceZero": "https://zero.yoroiwallet.com", "TokenInfoService": "https://cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -2695,6 +3099,9 @@ "SlotDuration": 1, "SlotsPerEpoch": 432000, "StartAt": 208 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -2705,46 +3112,10 @@ }, { "id": 95, - "value": { - "Backend": { - "BackendService": "https://testnet-backend.yoroiwallet.com", - "TokenInfoService": "https://stage-cdn.yoroiwallet.com" - }, - "BaseConfig": [ - { - "ByronNetworkId": 1097911063, - "ChainNetworkId": "0", - "GenesisDate": "1563999616000", - "SlotDuration": 20, - "SlotsPerEpoch": 21600, - "StartAt": 0 - }, - { - "CoinsPerUtxoWord": "34482", - "KeyDeposit": "2000000", - "LinearFee": { - "coefficient": "44", - "constant": "155381" - }, - "MinimumUtxoVal": "1000000", - "PerEpochPercentageReward": 69344, - "PoolDeposit": "500000000", - "SlotDuration": 1, - "SlotsPerEpoch": 432000, - "StartAt": 74 - } - ], - "CoinType": 2147485463, - "Fork": 0, - "NetworkId": 300, - "NetworkName": "Cardano Legacy Testnet" - } - }, - { - "id": 96, "value": { "Backend": { "BackendService": "https://preprod-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-preprod.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -2769,6 +3140,9 @@ "SlotDuration": 1, "SlotsPerEpoch": 432000, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -2778,10 +3152,11 @@ } }, { - "id": 97, + "id": 96, "value": { "Backend": { "BackendService": "https://preview-backend.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-preview.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -2806,6 +3181,9 @@ "SlotDuration": 1, "SlotsPerEpoch": 86400, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -2815,10 +3193,11 @@ } }, { - "id": 98, + "id": 97, "value": { "Backend": { "BackendService": "https://sanchonet-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-sanchonet.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com" }, "BaseConfig": [ @@ -2843,6 +3222,9 @@ "SlotDuration": 1, "SlotsPerEpoch": 86400, "StartAt": 0 + }, + { + "CoinsPerUtxoByte": "4310" } ], "CoinType": 2147485463, @@ -2856,7 +3238,7 @@ "PriceData": [], "PublicDeriver": [ { - "id": 237, + "id": 125, "value": { "ConceptualWalletId": 1, "Index": 0, @@ -2869,7 +3251,7 @@ ], "PurposeDerivation": [ { - "id": 230, + "id": 118, "value": { "KeyDerivationId": 2, "PurposeDerivationId": 1 @@ -2878,7 +3260,7 @@ ], "RootDerivation": [ { - "id": 227, + "id": 115, "value": { "KeyDerivationId": 1, "RootDerivationId": 1 @@ -2887,9 +3269,9 @@ ], "Token": [ { - "id": 110, + "id": 108, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2907,29 +3289,9 @@ } }, { - "id": 111, - "value": { - "Digest": -2.721713972065479e-183, - "Identifier": "", - "IsDefault": true, - "IsNFT": false, - "Metadata": { - "assetName": "", - "logo": null, - "longName": null, - "numberOfDecimals": 6, - "policyId": "", - "ticker": "TADA", - "type": "Cardano" - }, - "NetworkId": 300, - "TokenId": 2 - } - }, - { - "id": 112, + "id": 109, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2943,13 +3305,13 @@ "type": "Cardano" }, "NetworkId": 250, - "TokenId": 3 + "TokenId": 2 } }, { - "id": 113, + "id": 110, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2963,13 +3325,13 @@ "type": "Cardano" }, "NetworkId": 350, - "TokenId": 4 + "TokenId": 3 } }, { - "id": 114, + "id": 111, "value": { - "Digest": -2.721713972065479e-183, + "Digest": -5.874115065217367e+270, "Identifier": "", "IsDefault": true, "IsNFT": false, @@ -2983,13 +3345,13 @@ "type": "Cardano" }, "NetworkId": 450, - "TokenId": 5 + "TokenId": 4 } } ], "TokenList": [ { - "id": 515, + "id": 403, "value": { "Amount": "213595757", "ListId": 0, @@ -2998,7 +3360,7 @@ } }, { - "id": 516, + "id": 404, "value": { "Amount": "5000000", "ListId": 1, @@ -3007,7 +3369,7 @@ } }, { - "id": 517, + "id": 405, "value": { "Amount": "5500000", "ListId": 2, @@ -3016,7 +3378,7 @@ } }, { - "id": 518, + "id": 406, "value": { "Amount": "202924580", "ListId": 3, @@ -3025,7 +3387,7 @@ } }, { - "id": 525, + "id": 413, "value": { "Amount": "5000000", "ListId": 4, @@ -3034,7 +3396,7 @@ } }, { - "id": 526, + "id": 414, "value": { "Amount": "1000000", "ListId": 5, @@ -3043,7 +3405,7 @@ } }, { - "id": 527, + "id": 415, "value": { "Amount": "1000000", "ListId": 6, @@ -3052,21 +3414,264 @@ } }, { - "id": 528, + "id": 416, "value": { "Amount": "2828823", "ListId": 7, "TokenId": 1, "TokenListItemId": 8 } + }, + { + "id": 580, + "value": { + "Amount": "8483381", + "ListId": 8, + "TokenId": 1, + "TokenListItemId": 9 + } + }, + { + "id": 581, + "value": { + "Amount": "12189738", + "ListId": 9, + "TokenId": 1, + "TokenListItemId": 10 + } + }, + { + "id": 582, + "value": { + "Amount": "6703315", + "ListId": 10, + "TokenId": 1, + "TokenListItemId": 11 + } + }, + { + "id": 583, + "value": { + "Amount": "7416720", + "ListId": 11, + "TokenId": 1, + "TokenListItemId": 12 + } + }, + { + "id": 584, + "value": { + "Amount": "15000000", + "ListId": 12, + "TokenId": 1, + "TokenListItemId": 13 + } + }, + { + "id": 585, + "value": { + "Amount": "19611197", + "ListId": 13, + "TokenId": 1, + "TokenListItemId": 14 + } + }, + { + "id": 597, + "value": { + "Amount": "15000000", + "ListId": 14, + "TokenId": 1, + "TokenListItemId": 15 + } + }, + { + "id": 598, + "value": { + "Amount": "1000000", + "ListId": 15, + "TokenId": 1, + "TokenListItemId": 16 + } + }, + { + "id": 599, + "value": { + "Amount": "1000000", + "ListId": 16, + "TokenId": 1, + "TokenListItemId": 17 + } + }, + { + "id": 600, + "value": { + "Amount": "1000000", + "ListId": 17, + "TokenId": 1, + "TokenListItemId": 18 + } + }, + { + "id": 601, + "value": { + "Amount": "9817119", + "ListId": 18, + "TokenId": 1, + "TokenListItemId": 19 + } + }, + { + "id": 608, + "value": { + "Amount": "9817119", + "ListId": 19, + "TokenId": 1, + "TokenListItemId": 20 + } + }, + { + "id": 609, + "value": { + "Amount": "11645634", + "ListId": 20, + "TokenId": 1, + "TokenListItemId": 21 + } + }, + { + "id": 620, + "value": { + "Amount": "1000000", + "ListId": 21, + "TokenId": 1, + "TokenListItemId": 22 + } + }, + { + "id": 621, + "value": { + "Amount": "1000000", + "ListId": 22, + "TokenId": 1, + "TokenListItemId": 23 + } + }, + { + "id": 622, + "value": { + "Amount": "2828823", + "ListId": 23, + "TokenId": 1, + "TokenListItemId": 24 + } + }, + { + "id": 623, + "value": { + "Amount": "1000000", + "ListId": 24, + "TokenId": 1, + "TokenListItemId": 25 + } + }, + { + "id": 624, + "value": { + "Amount": "1000000", + "ListId": 25, + "TokenId": 1, + "TokenListItemId": 26 + } + }, + { + "id": 625, + "value": { + "Amount": "1000000", + "ListId": 26, + "TokenId": 1, + "TokenListItemId": 27 + } + }, + { + "id": 626, + "value": { + "Amount": "11645634", + "ListId": 27, + "TokenId": 1, + "TokenListItemId": 28 + } + }, + { + "id": 627, + "value": { + "Amount": "19286164", + "ListId": 28, + "TokenId": 1, + "TokenListItemId": 29 + } + }, + { + "id": 636, + "value": { + "Amount": "7416808", + "ListId": 29, + "TokenId": 1, + "TokenListItemId": 30 + } + }, + { + "id": 637, + "value": { + "Amount": "1317998", + "ListId": 30, + "TokenId": 1, + "TokenListItemId": 31 + } + }, + { + "id": 638, + "value": { + "Amount": "7002546", + "ListId": 31, + "TokenId": 1, + "TokenListItemId": 32 + } + }, + { + "id": 639, + "value": { + "Amount": "4828823", + "ListId": 32, + "TokenId": 1, + "TokenListItemId": 33 + } + }, + { + "id": 640, + "value": { + "Amount": "5311705", + "ListId": 33, + "TokenId": 1, + "TokenListItemId": 34 + } + }, + { + "id": 641, + "value": { + "Amount": "5413591", + "ListId": 34, + "TokenId": 1, + "TokenListItemId": 35 + } } ], "Transaction": [ { - "id": 510, + "id": 398, "value": { "BlockId": 1, - "Digest": 7.714062039903406e+88, + "Digest": -1.0161614922244291e+36, "ErrorMessage": null, "Extra": { "Fee": "171177", @@ -3082,10 +3687,10 @@ } }, { - "id": 520, + "id": 408, "value": { "BlockId": 2, - "Digest": -7.346330259468635e+88, + "Digest": 1.8542918286990975e+226, "ErrorMessage": null, "Extra": { "Fee": "171177", @@ -3099,189 +3704,115 @@ "TransactionId": 2, "Type": 1 } - } - ], - "TxMemo": [ - { - "id": 648, - "value": { - "Content": "j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl", - "Digest": -7.346330259468635e+88, - "LastUpdated": 1717145792007, - "TransactionHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "WalletId": "JPAX-4675" - } - } - ], - "UtxoAtSafePointTable": [ - { - "id": 758, - "value": { - "PublicDeriverId": 1, - "UtxoAtSafePoint": { - "lastSafeBlockHash": "1db1f94756922ca3cce0f11dcd177e133093767c5c6fd842eb5e9a26bfafe93c", - "utxos": [ - { - "amount": "1000000", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q98tt4wxnt32h3fn63xkzh4q7ah57v330v40mc2e9ale5jp4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmrz6qx", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 0, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:0" - }, - { - "amount": "1000000", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q9pe9gk6f9huhh6dx089nt6spl22xeetjzvvjcl9rjajj5e4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmnhvza", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 1, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:1" - }, - { - "amount": "2828823", - "assets": [], - "blockNum": "10025299", - "receiver": "addr1q9pe9gk6f9huhh6dx089nt6spl22xeetjzvvjcl9rjajj5e4ytssp23mthvgruacyluaa0f868fffgnch75082k8awhsmnhvza", - "txHash": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c", - "txIndex": 2, - "utxoId": "89096e2c607c60e4e10ca171e28ee59f5866bece6ce4451868b544dc25e6bb5c:2" - } - ] - }, - "UtxoAtSafePointId": 1 - } - } - ], - "UtxoDiffToBestBlock": [ - { - "id": 759, - "value": { - "PublicDeriverId": 1, - "UtxoDiffToBestBlockId": 1, - "lastBestBlockHash": "f01a8ab4d995799bbda61e924dbf8f556b7cdcbdb58a6557c9cfe1e3876f9e8b", - "newUtxos": [], - "spentUtxoIds": [] - } - } - ], - "UtxoTransactionInput": [ - { - "id": 511, - "value": { - "AddressId": 86, - "IndexInOwnTx": 0, - "IndexInParentTx": 2, - "ParentTxHash": "60f51a2ce15cd8c01f66d80091a1397695735bd682166209813d9276c4cc7ff8", - "TokenListId": 0, - "TransactionId": 1, - "UtxoTransactionInputId": 1 - } }, { - "id": 521, - "value": { - "AddressId": 2, - "IndexInOwnTx": 0, - "IndexInParentTx": 0, - "ParentTxHash": "4a551e08a8808cfaf667bf29b2ebdddd525c48287b58eede94ceb7ee3692bec3", - "TokenListId": 4, - "TransactionId": 2, - "UtxoTransactionInputId": 2 - } - } - ], - "UtxoTransactionOutput": [ - { - "id": 512, + "id": 573, "value": { - "AddressId": 2, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": false, - "OutputIndex": 0, - "TokenListId": 1, - "TransactionId": 1, - "UtxoTransactionOutputId": 1 + "BlockId": 3, + "Digest": 2.660848081553091e+103, + "ErrorMessage": null, + "Extra": { + "Fee": "181957", + "IsValid": true, + "Metadata": null + }, + "Hash": "8dbdecebb7d03ee55227bfeb2149825596c520fe1d761e2e9c993b80f390f79f", + "LastUpdateTime": 1733154397000, + "Ordinal": 76, + "Status": 1, + "TransactionId": 3, + "Type": 1 } }, { - "id": 513, + "id": 587, "value": { - "AddressId": 87, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": true, - "OutputIndex": 1, - "TokenListId": 2, - "TransactionId": 1, - "UtxoTransactionOutputId": 2 + "BlockId": 4, + "Digest": 1.2061264726932565e+28, + "ErrorMessage": null, + "Extra": { + "Fee": "182881", + "IsValid": true, + "Metadata": null + }, + "Hash": "ac297681d33e07136df68a60d809644656f067a98a868695fe52132a9eabdf7e", + "LastUpdateTime": 1733154528000, + "Ordinal": 54, + "Status": 1, + "TransactionId": 4, + "Type": 1 } }, { - "id": 514, + "id": 603, "value": { - "AddressId": 87, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": true, - "OutputIndex": 2, - "TokenListId": 3, - "TransactionId": 1, - "UtxoTransactionOutputId": 3 + "BlockId": 5, + "Digest": -2.9462112622979067e+127, + "ErrorMessage": null, + "Extra": { + "Fee": "171485", + "IsValid": true, + "Metadata": null + }, + "Hash": "350ec56c010e5d5078b9695e9e660671d16d897fba5aa9375a8319fc5a0b19af", + "LastUpdateTime": 1733154959000, + "Ordinal": 27, + "Status": 1, + "TransactionId": 5, + "Type": 1 } }, { - "id": 522, + "id": 611, "value": { - "AddressId": 2, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": true, - "OutputIndex": 0, - "TokenListId": 5, - "TransactionId": 2, - "UtxoTransactionOutputId": 4 + "BlockId": 6, + "Digest": 5.961280227924736e+302, + "ErrorMessage": null, + "Extra": { + "Fee": "188293", + "IsValid": true, + "Metadata": null + }, + "Hash": "cd22184851d053164cc84c3649e1b81404e37fe5198dc359775c610d44931f03", + "LastUpdateTime": 1733255392000, + "Ordinal": 57, + "Status": 1, + "TransactionId": 6, + "Type": 1 } }, { - "id": 523, + "id": 629, "value": { - "AddressId": 42, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": true, - "OutputIndex": 1, - "TokenListId": 6, - "TransactionId": 2, - "UtxoTransactionOutputId": 5 + "BlockId": 7, + "Digest": -9971190.774439456, + "ErrorMessage": null, + "Extra": { + "Fee": "183233", + "IsValid": true, + "Metadata": null + }, + "Hash": "952dcb958f0b7e7b8f7bcc601faa79414b157f0d25f6e7c6635fb4d1ea592e0b", + "LastUpdateTime": 1733737570000, + "Ordinal": 32, + "Status": 1, + "TransactionId": 7, + "Type": 1 } - }, + } + ], + "TxMemo": [ { - "id": 524, + "id": 642, "value": { - "AddressId": 42, - "ErgoBoxId": null, - "ErgoCreationHeight": null, - "ErgoRegisters": null, - "ErgoTree": null, - "IsUnspent": true, - "OutputIndex": 2, - "TokenListId": 7, - "TransactionId": 2, - "UtxoTransactionOutputId": 6 + "Content": "3FYQv2LYd3fX7hBtUGC4Mms7Xf7q643e0I03JG6f", + "Digest": -9971190.774439456, + "LastUpdated": 1733760886093, + "TransactionHash": "952dcb958f0b7e7b8f7bcc601faa79414b157f0d25f6e7c6635fb4d1ea592e0b", + "WalletId": "JPAX-4675" } } - ] + ], + "UtxoAtSafePointTable": [], + "UtxoDiffToBestBlock": [] } \ No newline at end of file diff --git a/packages/e2e-tests/helpers/windowManager.js b/packages/e2e-tests/helpers/windowManager.js index 352c2f731f..8f4909d82f 100644 --- a/packages/e2e-tests/helpers/windowManager.js +++ b/packages/e2e-tests/helpers/windowManager.js @@ -4,11 +4,17 @@ class WindowManagerError extends Error {} export const mockDAppName = 'MockDApp'; export const popupConnectorName = 'popupConnectorWindow'; -export const popupConnectorWindowTitle = 'Yoroi dApp Connector'; +export const popupConnectorWindowTitle = 'Yoroi Dapp Connector'; export const extensionTabName = 'Yoroi'; export const faqTabName = 'Yoroi - EMURGO'; export const trezorConnectTabName = 'Trezor'; export const backgroungTabName = 'background'; +export const serviceWorkersTabName = 'chrome://serviceworker-internals'; +export const serviceWorkersLink = 'chrome://serviceworker-internals'; +export const browserWindowType = Object.freeze({ + tab: 'tab', + window: 'window', +}); export class WindowManager { constructor(driver, logger) { @@ -130,11 +136,11 @@ export class WindowManager { } async openNewTab(tabTitle, url) { - return await this._openNewWithCheck('tab', tabTitle, url); + return await this._openNewWithCheck(browserWindowType.tab, tabTitle, url); } async openNewWindow(windowTitle, url) { - return await this._openNewWithCheck('window', windowTitle, url); + return await this._openNewWithCheck(browserWindowType.window, windowTitle, url); } async closeTabWindow(titleToClose, switchToTitle) { diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index f96b5ffedf..ed4a7e6219 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -41,7 +41,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "130.0.0", + "chromedriver": "131.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", @@ -450,9 +450,9 @@ } }, "node_modules/chromedriver": { - "version": "130.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-130.0.0.tgz", - "integrity": "sha512-1g1eMoKF22Uh6l8DTFOPvWLovINPrkAMw7yDHlF6Rx+4W4JI9aGdCZ2Cx7c181hUgALU1oSKGH3uKNryYM5DaQ==", + "version": "131.0.4", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-131.0.4.tgz", + "integrity": "sha512-JgIkept8YrnqT05ldLaOzxxEJDUV1t3PFIIMO/gQz9AbnpZx7Pl1zq6tQTTz2HoY5T2JKZ5kyiEWwc48g4fJ5w==", "dev": true, "hasInstallScript": true, "dependencies": { diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index bc1e2ede7e..8eea930e5b 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -47,7 +47,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "130.0.0", + "chromedriver": "131.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 56c9cb3b5a..9771c0a20a 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -193,10 +193,11 @@ class BasePage { async clearInputAll(locator) { this.logger.info(`BasePage::clearInputAll is called. Locator: ${JSON.stringify(locator)}`); const input = await this.findElement(locator); + await this.sleep(250); await input.sendKeys(Key.chord(isMacOS() ? Key.COMMAND : Key.CONTROL, 'a')); - await this.sleep(200); + await this.sleep(500); await input.sendKeys(Key.NULL); - await input.sendKeys(Key.DELETE); + await input.sendKeys(Key.BACK_SPACE); } async setImplicitTimeout(timeoutMs, functionName) { this.logger.info(`BasePage::setImplicitTimeout is called. Function: ${functionName}. Timeout: ${timeoutMs}`); @@ -242,27 +243,31 @@ class BasePage { ); const testRundDataDir = createTestRunDataDir(testSuiteName); const cleanName = logFileName.replace(/ /gi, '_'); - const logsPaths = path.resolve(testRundDataDir, `console_${cleanName}-log.json`); + const logsPaths = path.resolve(testRundDataDir, `console_browser_${cleanName}.log`); if (isChrome()) { const logEntries = await this.driver .manage() .logs() .get(logging.Type.BROWSER, logging.Level.ALL); - const jsonLogs = logEntries.map(l => JSON.stringify(l.toJSON(), null, 2)); - await writeFile(logsPaths, `[\n${jsonLogs.join(',\n')}\n]`); + const jsonLogsStrings = logEntries.map(l => { + const splitMsg = l.message.split(' '); + const message = splitMsg.slice(2).join(' '); + return `[${l.level}] [${l.timestamp}] ${message}` + }); + await writeFile(logsPaths, jsonLogsStrings.join(',\n')); } } async getDriverLogs(testSuiteName, logFileName) { this.logger.info(`BasePage::getDriverLogs is called.`); const testRundDataDir = createTestRunDataDir(testSuiteName); const cleanName = logFileName.replace(/ /gi, '_'); - const driverLogsPaths = path.resolve(testRundDataDir, `driver_${cleanName}-log.json`); + const driverLogsPaths = path.resolve(testRundDataDir, `driver_${cleanName}.log`); const driverLogEntries = await this.driver .manage() .logs() .get(logging.Type.DRIVER, logging.Level.INFO); - const jsonDriverLogs = driverLogEntries.map(l => JSON.stringify(l.toJSON(), null, 2)); - await writeFile(driverLogsPaths, `[\n${jsonDriverLogs.join(',\n')}\n]`); + const driverLogsStrings = driverLogEntries.map(l =>`[${l.level}] [${l.timestamp}] ${l.message}`); + await writeFile(driverLogsPaths, driverLogsStrings.join('')); } async waitForElementLocated(locator) { this.logger.info( @@ -327,7 +332,7 @@ class BasePage { ) { this.logger.info(`BasePage::customWaiter is called.`); const endTime = Date.now() + timeout; - await this.setImplicitTimeout(oneSecond, this.customWaiter.name); + await this.setImplicitTimeout(halfSecond, this.customWaiter.name); while (endTime >= Date.now()) { const conditionState = await conditionFunc(); diff --git a/packages/e2e-tests/pages/initialSteps.page.js b/packages/e2e-tests/pages/initialSteps.page.js index f142641cb3..ede6622548 100644 --- a/packages/e2e-tests/pages/initialSteps.page.js +++ b/packages/e2e-tests/pages/initialSteps.page.js @@ -22,24 +22,24 @@ class InitialStepsPage extends BasePage { method: 'id', }; analyticsSkipButtonLocator = { - locator: '//div[@class="OptForAnalyticsForm_skip"]/button', - method: 'xpath', + locator: 'startupAnalytics-skip-button', + method: 'id', }; analyticsAcceptButtonLocator = { - locator: '//div[@class="OptForAnalyticsForm_accpet"]/button', - method: 'xpath', + locator: 'startupAnalytics-accept-button', + method: 'id', }; cardanoUrlPromptFormLocator = { locator: '.UriPromptForm_component', method: 'css', }; cardanoPaymentUrlAllowButtonLocator = { - locator: '.allowButton', - method: 'css', + locator: 'uriPrompt-allow-button', + method: 'id', }; cardanoPaymentUrlSkipButtonLocator = { - locator: '.MuiButton-secondary', - method: 'css', + locator: 'uriPrompt-skip-button', + method: 'id', }; getLanguageMenuItem = countryCode => { return { @@ -124,10 +124,8 @@ class InitialStepsPage extends BasePage { } async skipCardanoPaymentUrls() { this.logger.info(`InitialStepsPage::skipCardanoPaymentUrls is called`); - await this.waitPresentedAndAct( - this.cardanoPaymentUrlSkipButtonLocator, - async () => await this.click(this.cardanoPaymentUrlSkipButtonLocator) - ) + await this.waitForElement(this.cardanoPaymentUrlSkipButtonLocator); + await this.click(this.cardanoPaymentUrlSkipButtonLocator); } async skipInitialSteps() { this.logger.info(`InitialStepsPage::skipInitialSteps is called`); diff --git a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepThree.page.js b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepThree.page.js index 92f4375139..304c23425e 100644 --- a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepThree.page.js +++ b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepThree.page.js @@ -22,10 +22,6 @@ class CreateWalletStepThree extends AddWalletBase { }; }; // functions - _wordIsAdded = async wordWebElement => { - const cursorState = await wordWebElement.getCssValue('cursor'); - return cursorState === 'not-allowed'; - }; async getRecoveryPhraseFromStorage() { this.logger.info(`CreateWalletStepThree::getRecoveryPhraseFromStorage is called`); const result = await this.getFromLocalStorage('recoveryPhrase'); @@ -34,15 +30,20 @@ class CreateWalletStepThree extends AddWalletBase { async enterRecoveryPhrase(recoveryPhrase) { this.logger.info(`CreateWalletStepThree::enterRecoveryPhrase is called`); await this.waitForElement(this.verifyPhraseComponentLocator); + const arrayOfIndexes = []; + for (let wordIndex = 0; wordIndex < WalletWordsSize.Shelley; wordIndex++) { + arrayOfIndexes.push(wordIndex); + } for (const recoveryPhraseWord of recoveryPhrase) { - for (let wordIndex = 0; wordIndex < WalletWordsSize.Shelley; wordIndex++) { + for (const wordIndex of arrayOfIndexes) { const elementLocator = this._getRecoveryPhraseBoxLocator(wordIndex); - const webElement = await this.findElement(elementLocator); - const wordIsAdded = await this._wordIsAdded(webElement); - if (!wordIsAdded) { - const elementText = await webElement.getText(); + const wordButtonIsEnabled = await this.buttonIsEnabled(elementLocator); + if (wordButtonIsEnabled) { + const elementText = await this.getText(elementLocator); if (elementText === recoveryPhraseWord) { - await webElement.click(); + await this.click(elementLocator); + const indexOfIndex = arrayOfIndexes.indexOf(wordIndex); + arrayOfIndexes.splice(indexOfIndex, 1); break; } } diff --git a/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js b/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js index 2887781008..92f8972816 100644 --- a/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js @@ -1,6 +1,6 @@ import { Key } from 'selenium-webdriver'; import SettingsTab from './settingsTab.page.js'; -import { fiveSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; +import { fiveSeconds, halfSecond, quarterSecond } from '../../../helpers/timeConstants.js'; class WalletSubTab extends SettingsTab { // locator @@ -151,16 +151,61 @@ class WalletSubTab extends SettingsTab { } } } + async passwordErrDisplayedAndNotEmpty() { + this.logger.info(`WalletSubTab::passwordErrDisplayedAndNotEmpty is called.`); + return await this.customWaiter( + async () => { + const elems = await this.findElements(this.changePasswordErrorMessageLocator); + if (elems.length !== 0) { + const errMsg = await this.getText(this.changePasswordErrorMessageLocator); + return errMsg !== ''; + } + return false; + }, + fiveSeconds, + halfSecond, + ); + } async getPasswordErrorMsg() { this.logger.info(`WalletSubTab::getPasswordErrorMsg is called.`); await this.waitElementTextMatches(this.changePasswordErrorMessageLocator, /\w+/g); return await this.getText(this.changePasswordErrorMessageLocator); } + async newPasswordErrDisplayedAndNotEmpty() { + this.logger.info(`WalletSubTab::newPasswordErrDisplayedAndNotEmpty is called.`); + return await this.customWaiter( + async () => { + const elems = await this.findElements(this.changePasswordNewPaswordHelpMsgTextLocator); + if (elems.length !== 0) { + const errMsg = await this.getText(this.changePasswordNewPaswordHelpMsgTextLocator); + return errMsg !== ''; + } + return false; + }, + fiveSeconds, + halfSecond, + ); + } async getNewPasswordErrorMsg() { this.logger.info(`WalletSubTab::getNewPasswordErrorMsg is called.`); await this.waitElementTextMatches(this.changePasswordNewPaswordHelpMsgTextLocator, /\w+/g); return await this.getText(this.changePasswordNewPaswordHelpMsgTextLocator); } + async repeatNewPasswordErrDisplayedAndNotEmpty() { + this.logger.info(`WalletSubTab::repeatNewPasswordErrDisplayedAndNotEmpty is called.`); + return await this.customWaiter( + async () => { + const elems = await this.findElements(this.changePasswordRepeatNewPaswordHelpMsgLocator); + if (elems.length !== 0) { + const errMsg = await this.getText(this.changePasswordRepeatNewPaswordHelpMsgLocator); + return errMsg !== ''; + } + return false; + }, + fiveSeconds, + halfSecond, + ); + } async getRepeatNewPasswordErrorMsg() { this.logger.info(`WalletSubTab::getRepeatNewPasswordErrorMsg is called.`); await this.waitElementTextMatches(this.changePasswordRepeatNewPaswordHelpMsgLocator, /\w+/g); diff --git a/packages/e2e-tests/pages/wallet/walletTab/sendSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/sendSubTab.page.js index a9096867ba..5229b2a211 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/sendSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/sendSubTab.page.js @@ -1,5 +1,5 @@ import WalletTab from './walletTab.page.js'; -import { quarterSecond, fiveSeconds } from '../../../helpers/timeConstants.js'; +import { quarterSecond, fiveSeconds, halfSecond, defaultWaitTimeout } from '../../../helpers/timeConstants.js'; class SendSubTab extends WalletTab { // locators @@ -131,14 +131,21 @@ class SendSubTab extends WalletTab { this.logger.info(`SendSubTab::receiverIsGood is called.`); return await this.customWaitIsPresented(this.receiverDoneIcon, fiveSeconds, quarterSecond); } - async receiverIsIncorrect() { - this.logger.info(`SendSubTab::receiverIsIncorrect is called.`); - return await this.customWaitIsPresented(this.receiverErrorIcon, fiveSeconds, quarterSecond); - } async getReceiverHelperText() { this.logger.info(`SendSubTab::getReceiverHelperText is called.`); return await this.getText(this.receiverHelperTextLocator); } + async waitReceiverHelperTextEqual(expectedText) { + this.logger.info(`SendSubTab::waitReceiverHelperTextEqual is called.`); + return await this.customWaiter( + async () => { + const currentText = await this.getReceiverHelperText(); + return currentText === expectedText; + }, + defaultWaitTimeout, + quarterSecond + ); + } async getReceiverHandlerAddress() { this.logger.info(`SendSubTab::getReceiverHandlerAddress is called.`); return await this.getText(this.domainResolverAddressTextLocator); @@ -226,6 +233,17 @@ class SendSubTab extends WalletTab { await this.waitElementTextMatches(this.passwordHelpMessageTextLocator, /\w+/g); return await this.getText(this.passwordHelpMessageTextLocator); } + async pwdErrMsgDisplayedAndNotEmpty() { + this.logger.info(`SendSubTab::pwdErrMsgDisplayedAndNotEmpty is called.`); + return await this.customWaiter( + async () => { + const errMsg = await this.getText(this.passwordHelpMessageTextLocator); + return errMsg !== ''; + }, + fiveSeconds, + halfSecond, + ); + } } export default SendSubTab; diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index cccbdcee30..2ef778bc74 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -1,13 +1,18 @@ import { defaultWaitTimeout, fiveSeconds, + oneSecond, quarterSecond, threeSeconds, twoSeconds, } from '../../../helpers/timeConstants.js'; import WalletTab from './walletTab.page.js'; import ExportTransactionsModal from './transactionsModals/exportTransactionModal.page.js'; -import { convertPrettyDateToNormal, convertPrettyTimeToNormal } from '../../../utils/utils.js'; +import { + convertPrettyDateToNormal, + convertPrettyTimeToNormal, + groupDateIsInPeriod, +} from '../../../utils/utils.js'; import MemoWarningModal from './transactionsModals/memoWarningModal.page.js'; import { balanceReplacer } from '../../../helpers/constants.js'; @@ -176,16 +181,17 @@ export class TransactionsSubTab extends WalletTab { // methods async isDisplayed() { this.logger.info(`TransactionsSubTab::isDisplayed is called`); - const submenuState = await this.customWaitIsPresented( + const submenuStatePromise = this.customWaitIsPresented( this.transactionsSubmenuItemLocator, fiveSeconds, quarterSecond ); - const summaryState = await this.customWaitIsPresented( + const summaryStatePromise = this.customWaitIsPresented( this.walletSummaryBoxLocator, fiveSeconds, quarterSecond ); + const [submenuState, summaryState] = await Promise.all([submenuStatePromise, summaryStatePromise]); return submenuState && summaryState; } @@ -197,7 +203,7 @@ export class TransactionsSubTab extends WalletTab { const displayedTxsGroups = await this.__getTxsGroups(); return emptyBannerIsDisplayed && displayedTxsGroups == 0; } - async __getTxsGroups() { + async __getTxsGroups(usePeriod = false, startDate = '00000000', endDate = '00000000') { const locatorForAllGroups = { locator: '//div[starts-with(@id, "wallet:transactions:transactionsList-transactionsGroup_")]', method: 'xpath', @@ -210,10 +216,20 @@ export class TransactionsSubTab extends WalletTab { this.walletTransactionsGroupDateTextLocator(groupIndex) ); const groupDate = convertPrettyDateToNormal(groupDatePrettified); - result.push({ - groupDate, - groupIndex, - }); + + if (usePeriod) { + if (groupDateIsInPeriod(groupDate, startDate, endDate)) { + result.push({ + groupDate, + groupIndex, + }); + } + } else { + result.push({ + groupDate, + groupIndex, + }); + } } await this.setImplicitTimeout(defaultWaitTimeout, this.__getTxsGroups.name); return result; @@ -306,9 +322,9 @@ export class TransactionsSubTab extends WalletTab { this.logger.info(`TransactionsSubTab::getExportDialog is called`); return new ExportTransactionsModal(this.driver, this.logger); } - async getTxsInfo() { + async getTxsInfo(startDate, endDate) { this.logger.info(`TransactionsSubTab::getTxsInfo is called`); - const allGroups = await this.__getTxsGroups(); + const allGroups = await this.__getTxsGroups(true, startDate, endDate); const allTxsInfo = []; for (const group of allGroups) { const txsInfoInGroup = await this.__getAllTxsInGroup(group); @@ -356,8 +372,8 @@ export class TransactionsSubTab extends WalletTab { return false; } } - async waitLoaderIsNotDisplayed(timeout, repearPeriod) { - this.logger.info(`TransactionsSubTab::waitLoaderIsNotDisplayed is called`); + async waitTxLoaderIsNotDisplayed(timeout, repearPeriod) { + this.logger.info(`TransactionsSubTab::waitTxLoaderIsNotDisplayed is called`); const loaderIsNotDisplayed = await this.customWaiter( async () => { const displayed = await this.loaderIsDisplayed(); @@ -367,31 +383,37 @@ export class TransactionsSubTab extends WalletTab { repearPeriod ); this.logger.info( - `TransactionsSubTab::waitLoaderIsNotDisplayed::loaderIsNotDisplayed ${loaderIsNotDisplayed}` + `TransactionsSubTab::waitTxLoaderIsNotDisplayed::loaderIsNotDisplayed ${loaderIsNotDisplayed}` ); return loaderIsNotDisplayed; } + async _pressShowMoreTransactions() { + await this.scrollIntoView(this.showMoreTxsButtonLocator); + await this.click(this.showMoreTxsButtonLocator); + await this.sleep(quarterSecond); + return true; + } async _loadMore() { const showMoreIsDisplayed = await this.showMoreBtnIsDisplayed(); - const loaderIsDisplayed = await this.loaderIsDisplayed(); - if (!showMoreIsDisplayed && !loaderIsDisplayed) { - return false; - } if (showMoreIsDisplayed) { - await this.scrollIntoView(this.showMoreTxsButtonLocator); - await this.click(this.showMoreTxsButtonLocator); - await this.sleep(quarterSecond); - return true; + return await this._pressShowMoreTransactions(); } + const loaderIsDisplayed = await this.loaderIsDisplayed(); if (loaderIsDisplayed) { const thirtySec = 3 * defaultWaitTimeout; await this.scrollIntoView(this.txsLoaderSpinnerLocator); - const result = await this.waitLoaderIsNotDisplayed(thirtySec, quarterSecond); + const result = await this.waitTxLoaderIsNotDisplayed(thirtySec, quarterSecond); if (!result) { throw new Error(`Transactions are still loading after ${thirtySec / 1000} seconds`); } + const btnIsDisplayed = await this.showMoreBtnIsDisplayed(); + if (btnIsDisplayed) { + return await this._pressShowMoreTransactions(); + } } + this.logger.warn(`TransactionsSubTab::_loadMore There are no Show More Transactions button and no loader`); + return false; } async loadMoreTxs(amountOfLoads = 1) { this.logger.info(`TransactionsSubTab::loadMoreTxs is called. Amount of loads ${amountOfLoads}`); @@ -400,13 +422,17 @@ export class TransactionsSubTab extends WalletTab { if (!canLoadMore) { break; } + await this.sleep(oneSecond); } + const thirtySec = 3 * defaultWaitTimeout; + await this.waitTxLoaderIsNotDisplayed(thirtySec, quarterSecond); } async downloadAllTxs() { this.logger.info(`TransactionsSubTab::downloadAllTxs is called`); let canLoadMore = true; while (canLoadMore) { canLoadMore = await this._loadMore(); + await this.sleep(oneSecond); } } async __getAddrsLinks(groupIndex, txIndex, addrsAmount, getLocatorFunc) { @@ -499,6 +525,10 @@ export class TransactionsSubTab extends WalletTab { const noMemoState = await this.customWaiter( async () => { const allElements = await this.findElements(memoMsgLocator); + if (allElements.length === 1) { + const memoContent = await this.getAttribute(memoMsgLocator, 'textContent'); + return memoContent === '-'; + } return allElements.length === 0; }, threeSeconds, @@ -542,7 +572,9 @@ export class TransactionsSubTab extends WalletTab { // check all to addresses const amountToAddrs = await this.__getAmountOfToAddresses(groupIndex, txIndex); for (let addrToIndex = 0; addrToIndex < amountToAddrs; addrToIndex++) { - const addrToAmountRawStr = await this.getText(this.txToAddressAmountTextLocator(groupIndex, txIndex, addrToIndex)); + const addrToAmountRawStr = await this.getText( + this.txToAddressAmountTextLocator(groupIndex, txIndex, addrToIndex) + ); const addrToAmountStr = addrToAmountRawStr.split(' ')[0]; result.push(addrToAmountStr === balanceReplacer); } diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index 02c342ee31..a0d40746b1 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -1,5 +1,12 @@ import { balanceReplacer } from '../helpers/constants.js'; -import { defaultWaitTimeout, halfSecond, oneMinute, oneSecond } from '../helpers/timeConstants.js'; +import { + defaultWaitTimeout, + fiveSeconds, + halfSecond, + oneMinute, + oneSecond, + quarterSecond, +} from '../helpers/timeConstants.js'; import BasePage from './basepage.js'; class WalletCommonBase extends BasePage { @@ -107,6 +114,10 @@ class WalletCommonBase extends BasePage { locator: '.AmountDisplay_isLoading', method: 'css', }; + walletIsLoadingLogo = { + locator: '.Loading_yoroiLogo', + method: 'css', + }; // modal window of selecting a wallet // "Discover a new Yoroi" modal window dialogUpdatesTitleLocator = { @@ -132,7 +143,7 @@ class WalletCommonBase extends BasePage { const adaBalance = await this.waitPresentedAndAct(this.walletBalanceTextLocator, async () => { const rawBalanceText = await this.getText(this.walletBalanceTextLocator); - const [numberPart, ] = rawBalanceText.split(' '); + const [numberPart] = rawBalanceText.split(' '); const digits = numberPart.split('\n'); return Number(digits.join('')); }); @@ -161,8 +172,12 @@ class WalletCommonBase extends BasePage { } async closeUpdatesModalWindow() { this.logger.info(`WalletCommonBase::closeUpdatesModalWindow is called`); - await this.waitForElement(this.dialogUpdatesTitleLocator); - await this.waitForElement(this.dialogUpdatesGoToWalletButtonLocator); + await this.customWaitIsPresented(this.dialogUpdatesTitleLocator, fiveSeconds, quarterSecond); + await this.customWaitIsPresented( + this.dialogUpdatesGoToWalletButtonLocator, + fiveSeconds, + quarterSecond + ); await this.click(this.dialogUpdatesGoToWalletButtonLocator); await this.sleep(500); } @@ -170,9 +185,11 @@ class WalletCommonBase extends BasePage { this.logger.info(`WalletCommonBase::waitPrepareWalletBannerIsClosed is called`); const state = await this.customWaiter( async () => { - const elAmount = await this.findElements(this.prepareWalletBannerLocator); - const loadersAmount = await this.findElements(this.walletIsLoadingSpinnerLocator); - return elAmount.length === 0 && loadersAmount.length === 0; + const bannersElems = await this.findElements(this.prepareWalletBannerLocator); + // const loadersElems = await this.findElements(this.walletIsLoadingSpinnerLocator); + // TEMPORARY SOLUTION because of the issue https://emurgo.atlassian.net/browse/YOEXT-1288 + const loadersElems = []; + return bannersElems.length === 0 && loadersElems.length === 0; }, oneMinute, halfSecond @@ -186,6 +203,22 @@ class WalletCommonBase extends BasePage { throw new Error(`The wallet is still loading after ${oneMinute / 1000} seconds`); } } + async waitInitialWalletLoaderIsClosed() { + this.logger.info(`WalletCommonBase::waitInitialWalletLoaderisClosed is called`); + const state = await this.customWaitIsNotPresented( + this.walletIsLoadingLogo, + oneMinute, + halfSecond, + ); + if (!state) { + this.logger.error( + `WalletCommonBase::waitInitialWalletLoaderisClosed The wallet loading banner is still displayed after ${ + oneMinute / 1000 + } seconds` + ); + throw new Error(`The wallet is still loading after ${oneMinute / 1000} seconds`); + } + } async goToWalletTab() { this.logger.info(`WalletCommonBase::goToWalletTab is called`); await this.click(this.walletTabButtonLocator); @@ -293,7 +326,7 @@ class WalletCommonBase extends BasePage { this.walletBalanceTextLocator, async () => { const rawBalanceText = await this.getText(this.walletBalanceTextLocator); - const balanceStr = rawBalanceText.split(' ')[0]; + const balanceStr = rawBalanceText.split(' ')[0].trim(); return balanceStr === balanceReplacer; } ); @@ -302,7 +335,7 @@ class WalletCommonBase extends BasePage { this.walletFiatBalanceTextLocator, async () => { const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); - const fiatBalanceStr = rawFiatBalanceText.split(' ')[0]; + const fiatBalanceStr = rawFiatBalanceText.split(' ')[0].trim(); return fiatBalanceStr === balanceReplacer; } ); diff --git a/packages/e2e-tests/test/04_removingWallet.test.js b/packages/e2e-tests/test/04_removingWallet.test.js index cb7ff1be67..34c0650380 100644 --- a/packages/e2e-tests/test/04_removingWallet.test.js +++ b/packages/e2e-tests/test/04_removingWallet.test.js @@ -8,7 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import AddNewWallet from '../pages/addNewWallet.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Removing a wallet, one wallet is added', function () { this.timeout(2 * oneMinute); @@ -16,10 +16,9 @@ describe('Removing a wallet, one wallet is added', function () { let logger = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it('Remove wallet', async function () { diff --git a/packages/e2e-tests/test/05_removingWallet_2.test.js b/packages/e2e-tests/test/05_removingWallet_2.test.js index 8dd16002e6..fdbf4f8320 100644 --- a/packages/e2e-tests/test/05_removingWallet_2.test.js +++ b/packages/e2e-tests/test/05_removingWallet_2.test.js @@ -7,8 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import { checkCorrectWalletIsDisplayed, restoreWallet, - preloadDBAndStorage, - waitTxPage, + prepareWallet, } from '../helpers/restoreWalletHelper.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; @@ -23,10 +22,9 @@ describe('Removing the first wallet, two wallets is added', function () { let logger = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); // restore the second wallet diff --git a/packages/e2e-tests/test/06_renamingWallet.test.js b/packages/e2e-tests/test/06_renamingWallet.test.js index 31427bafc3..f5b1c6e50d 100644 --- a/packages/e2e-tests/test/06_renamingWallet.test.js +++ b/packages/e2e-tests/test/06_renamingWallet.test.js @@ -8,7 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Renaming the wallet', function () { this.timeout(2 * oneMinute); @@ -17,13 +17,12 @@ describe('Renaming the wallet', function () { const newWalletName = 'newWalletName'; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger,'testWallet1', this); }); - it('Go to Wallet subtub in Settings', async function () { + it('Go to Wallet subtab in Settings', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); await transactionsPage.goToSettingsTab(); const settingsPage = new SettingsTab(webdriver, logger); diff --git a/packages/e2e-tests/test/07_0_changingPassword.test.js b/packages/e2e-tests/test/07_0_changingPassword.test.js new file mode 100644 index 0000000000..5f974d7587 --- /dev/null +++ b/packages/e2e-tests/test/07_0_changingPassword.test.js @@ -0,0 +1,68 @@ +import BasePage from '../pages/basepage.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { testWallet1 } from '../utils/testWallets.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; +import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; +import { getPassword } from '../helpers/constants.js'; +import WalletTab from '../pages/wallet/walletTab/walletTab.page.js'; +import SendSubTab from '../pages/wallet/walletTab/sendSubTab.page.js'; +import { WRONG_PASSWORD } from '../helpers/messages.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; + +describe('Changing wallet password. Positive', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + + before(async function () { + logger = getTestLogger(this.test.parent.title); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); + }); + + const oldPassword = getPassword(); + const newPassword = getPassword(10, true); + + it('Go to Settings -> Wallet', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await transactionsPage.goToSettingsTab(); + const settingsPage = new SettingsTab(webdriver, logger); + await settingsPage.goToWalletSubMenu(); + }); + it('Correct old password, correct new password', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + await walletSubTabPage.changeWalletPassword(oldPassword, newPassword, newPassword); + }); + it('Go to Send page', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + await walletSubTabPage.goToWalletTab(); + const walletPage = new WalletTab(webdriver, logger); + await walletPage.goToSendSubMenu(); + }); + it('Filling send info', async function () { + const sendSubTab = new SendSubTab(webdriver, logger); + await sendSubTab.enterReceiverAndMemo(testWallet1.receiveAddress); + await sendSubTab.addAssets(1); + await sendSubTab.confirmTransaction(oldPassword); + }); + // Checking that the old password doesn't work anymore + it("Checking the old wallet doesn't work anymore", async function () { + const sendSubTab = new SendSubTab(webdriver, logger); + const errIsShown = await sendSubTab.pwdErrMsgDisplayedAndNotEmpty(); + expect(errIsShown, 'The error is not displayed').to.be.true; + const realErrMsg = await sendSubTab.getPasswordErrorMsg(); + expect(realErrMsg, 'The error message isn\'t correct').to.equal(WRONG_PASSWORD); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); diff --git a/packages/e2e-tests/test/07_1_changingPassword_incorrect_old_one.test.js b/packages/e2e-tests/test/07_1_changingPassword_incorrect_old_one.test.js new file mode 100644 index 0000000000..d2571f8d69 --- /dev/null +++ b/packages/e2e-tests/test/07_1_changingPassword_incorrect_old_one.test.js @@ -0,0 +1,60 @@ +import BasePage from '../pages/basepage.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; +import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; +import { getPassword } from '../helpers/constants.js'; +import { WRONG_PASSWORD } from '../helpers/messages.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; + +describe('Changing wallet password. Negative. Incorrect old one.', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + + const incorrectOldPassword = getPassword(10, true); + const newPassword = getPassword(10, true); + + before(async function () { + logger = getTestLogger(this.test.parent.title); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); + }); + + it('Go to Settings -> Wallet', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await transactionsPage.goToSettingsTab(); + const settingsPage = new SettingsTab(webdriver, logger); + await settingsPage.goToWalletSubMenu(); + }); + + it('Changing password, incorrect old one, correct new one', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + await walletSubTabPage.changeWalletPassword( + incorrectOldPassword, + newPassword, + newPassword, + true, + true + ); + }); + + it('Checking the error message', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + const errIsShown = await walletSubTabPage.passwordErrDisplayedAndNotEmpty(); + expect(errIsShown, 'The error is not displayed').to.be.true; + const realErrMsg = await walletSubTabPage.getPasswordErrorMsg(); + expect(realErrMsg, 'The error message isn\'t correct').to.equal(WRONG_PASSWORD); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); diff --git a/packages/e2e-tests/test/07_2_changingPassword_new_too_short.test.js b/packages/e2e-tests/test/07_2_changingPassword_new_too_short.test.js new file mode 100644 index 0000000000..2609d5459c --- /dev/null +++ b/packages/e2e-tests/test/07_2_changingPassword_new_too_short.test.js @@ -0,0 +1,51 @@ +import BasePage from '../pages/basepage.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; +import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; +import { getPassword } from '../helpers/constants.js'; +import { PASSWORD_TOO_SHORT } from '../helpers/messages.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; + +describe('Changing wallet password. Negative. New one is short', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + + const oldPassword = getPassword(); + + before(async function () { + logger = getTestLogger(this.test.parent.title); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); + }); + + it('Go to Settings -> Wallet', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await transactionsPage.goToSettingsTab(); + const settingsPage = new SettingsTab(webdriver, logger); + await settingsPage.goToWalletSubMenu(); + }); + it('Changing password, correct old one, new one is too short', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + await walletSubTabPage.changeWalletPassword(oldPassword, 'a', oldPassword, true, true); + }); + it('Checking the error message', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + const errIsShown = await walletSubTabPage.newPasswordErrDisplayedAndNotEmpty(); + expect(errIsShown, 'The error is not displayed').to.be.true; + const realErrMsg = await walletSubTabPage.getNewPasswordErrorMsg(); + expect(realErrMsg, 'Incorrect error is shown').to.equal(PASSWORD_TOO_SHORT); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); diff --git a/packages/e2e-tests/test/07_3_changingPassword_passwords_dont_match.test.js b/packages/e2e-tests/test/07_3_changingPassword_passwords_dont_match.test.js new file mode 100644 index 0000000000..03286d005d --- /dev/null +++ b/packages/e2e-tests/test/07_3_changingPassword_passwords_dont_match.test.js @@ -0,0 +1,53 @@ +import BasePage from '../pages/basepage.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; +import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; +import { getPassword } from '../helpers/constants.js'; +import { PASSWORDS_DONT_MATCH } from '../helpers/messages.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; + +describe('Changing wallet password. Negative. Wrong repeated password', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + + before(async function () { + logger = getTestLogger(this.test.parent.title); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); + }); + + const oldPassword = getPassword(); + const newPass1 = getPassword(10); + const newPass2 = getPassword(10); + + it('Go to Settings -> Wallet', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await transactionsPage.goToSettingsTab(); + const settingsPage = new SettingsTab(webdriver, logger); + await settingsPage.goToWalletSubMenu(); + }); + it('Changing password, correct old one, new passwords dont match', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + await walletSubTabPage.changeWalletPassword(oldPassword, newPass1, newPass2, true, true); + }); + it('Checking the error message', async function () { + const walletSubTabPage = new WalletSubTab(webdriver, logger); + const errIsShown = await walletSubTabPage.repeatNewPasswordErrDisplayedAndNotEmpty(); + expect(errIsShown, 'The error is not displayed').to.be.true; + const realErrMsg = await walletSubTabPage.getRepeatNewPasswordErrorMsg(); + expect(realErrMsg, 'Incorrect error is shown').to.equal(PASSWORDS_DONT_MATCH); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js deleted file mode 100644 index 9ac828348c..0000000000 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ /dev/null @@ -1,156 +0,0 @@ -import BasePage from '../pages/basepage.js'; -import { customAfterEach } from '../utils/customHooks.js'; -import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; -import { testWallet1 } from '../utils/testWallets.js'; -import { expect } from 'chai'; -import { getTestLogger } from '../utils/utils.js'; -import { oneMinute } from '../helpers/timeConstants.js'; -import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; -import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; -import { getPassword } from '../helpers/constants.js'; -import WalletTab from '../pages/wallet/walletTab/walletTab.page.js'; -import SendSubTab from '../pages/wallet/walletTab/sendSubTab.page.js'; -import { PASSWORDS_DONT_MATCH, PASSWORD_TOO_SHORT, WRONG_PASSWORD } from '../helpers/messages.js'; -import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; - -describe('Changing wallet password', function () { - this.timeout(2 * oneMinute); - let webdriver = null; - let logger = null; - - before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); - logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); - }); - - const oldPassword = getPassword(); - const newPassword = getPassword(10, true); - // Cases - // Correct old password, correct new password - describe('Changing password, positive', function () { - it('Go to Settings -> Wallet', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - await transactionsPage.goToSettingsTab(); - const settingsPage = new SettingsTab(webdriver, logger); - await settingsPage.goToWalletSubMenu(); - }); - it('Correct old password, correct new password', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(oldPassword, newPassword, newPassword); - }); - it('Go to Send page', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.goToWalletTab(); - const walletPage = new WalletTab(webdriver, logger); - await walletPage.goToSendSubMenu(); - }); - it('Filling send info', async function () { - const sendSubTab = new SendSubTab(webdriver, logger); - await sendSubTab.enterReceiverAndMemo(testWallet1.receiveAddress); - await sendSubTab.addAssets(1); - await sendSubTab.confirmTransaction(oldPassword); - }); - // Checking that the old password doesn't work anymore - it("Checking the old wallet doesn't work anymore", async function () { - const sendSubTab = new SendSubTab(webdriver, logger); - const realErrMsg = await sendSubTab.getPasswordErrorMsg(); - expect(realErrMsg, 'The old password still works').to.equal(WRONG_PASSWORD); - }); - }); - // Incorrect old password, correct new password - describe('Changing password, negative, incorrect old password', function () { - it('Refresh page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.refreshPage(); - }); - it('Go to Settings -> Wallet', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - await transactionsPage.goToSettingsTab(); - const settingsPage = new SettingsTab(webdriver, logger); - await settingsPage.goToWalletSubMenu(); - }); - it('Changing password, incorrect old one, correct new one', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword( - oldPassword, - newPassword, - newPassword, - true, - true - ); - }); - it('Checking the error message', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - const realErrMsg = await walletSubTabPage.getPasswordErrorMsg(); - expect(realErrMsg, 'The incorrect password is accepted').to.equal(WRONG_PASSWORD); - }); - }); - // Correct old password, new too short - describe('Changing password, negative, new password too short', function () { - it('Refresh page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.refreshPage(); - }); - it('Go to Settings -> Wallet', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - await transactionsPage.goToSettingsTab(); - const settingsPage = new SettingsTab(webdriver, logger); - await settingsPage.goToWalletSubMenu(); - }); - it('Changing password, correct old one, new one is too short', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(newPassword, 'a', newPassword, true, true); - }); - it('Checking the error message', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - const realErrMsg = await walletSubTabPage.getNewPasswordErrorMsg(); - expect(realErrMsg, 'Incorrect error is shown').to.equal(PASSWORD_TOO_SHORT); - }); - }); - // Correct old password, new and repeated passwords do not match - describe('Changing password, negative, new passwords do not match', function () { - const newPass1 = getPassword(10); - const newPass2 = getPassword(10); - it('Refresh page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.refreshPage(); - }); - it('Go to Settings -> Wallet', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - await transactionsPage.goToSettingsTab(); - const settingsPage = new SettingsTab(webdriver, logger); - await settingsPage.goToWalletSubMenu(); - }); - it('Changing password, correct old one, new passwords dont match', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(newPassword, newPass1, newPass2, true, true); - }); - it('Checking the error message', async function () { - const walletSubTabPage = new WalletSubTab(webdriver, logger); - const realErrMsg = await walletSubTabPage.getRepeatNewPasswordErrorMsg(); - expect(realErrMsg, 'Incorrect error is shown').to.equal(PASSWORDS_DONT_MATCH); - }); - }); - - afterEach(function (done) { - customAfterEach(this, webdriver, logger); - done(); - }); - - after(function (done) { - const basePage = new BasePage(webdriver, logger); - basePage.closeBrowser(); - done(); - }); -}); diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index 33492f7022..102d906e20 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -12,7 +12,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import SupportSubTab from '../pages/wallet/settingsTab/supportSubTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Downloading logs for support', function () { this.timeout(2 * oneMinute); @@ -22,8 +22,7 @@ describe('Downloading logs for support', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); cleanDownloads(); }); diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 5bb597171f..56e7e8706f 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -14,18 +14,22 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { compareExportedTxsAndDisplayedTxs } from '../helpers/customChecks.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; +// There is an issue https://emurgo.atlassian.net/browse/YOEXT-1589 describe('Export transactions, positive', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; + // mm/dd/yyyy - 11/13/2023, it is only for testWallet1 + const startDate = '11132023'; + // mm/dd/yyyy - 03/08/2024, it is only for testWallet1 + const endDate = '03082024'; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); cleanDownloads(); }); @@ -41,10 +45,8 @@ describe('Export transactions, positive', function () { it('Set correct dates', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); const exportDialog = transactionsPage.getExportDialog(); - // mm/dd/yyyy - 11/13/2023, it is only for testWallet1 - await exportDialog.setStartDate('11132023'); - // mm/dd/yyyy - 03/08/2024, it is only for testWallet1 - await exportDialog.setEndDate('03082024'); + await exportDialog.setStartDate(startDate); + await exportDialog.setEndDate(endDate); await exportDialog.clickIncludeTxsIDs(); const btnEnabled = await exportDialog.exportButtonIsEnabled(); expect(btnEnabled, 'The export button is not enabled').to.be.true; @@ -74,7 +76,7 @@ describe('Export transactions, positive', function () { const parsedFileContent = parseExportedCSV(fileContent); const transactionsPage = new TransactionsSubTab(webdriver, logger); - const displayedTxs = await transactionsPage.getTxsInfo(); + const displayedTxs = await transactionsPage.getTxsInfo(startDate, endDate); compareExportedTxsAndDisplayedTxs(parsedFileContent, displayedTxs); }); diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index f78cd46aa3..ffcd0333c6 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -12,7 +12,7 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { Colors } from '../helpers/constants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Export transactions, negative cases', function () { this.timeout(2 * oneMinute); @@ -22,8 +22,7 @@ describe('Export transactions, negative cases', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); cleanDownloads(); }); diff --git a/packages/e2e-tests/test/11_countTransactions.test.js b/packages/e2e-tests/test/11_countTransactions.test.js index cf4011a425..12e1f4c687 100644 --- a/packages/e2e-tests/test/11_countTransactions.test.js +++ b/packages/e2e-tests/test/11_countTransactions.test.js @@ -11,7 +11,7 @@ import driversPoolsManager from '../utils/driversPool.js'; const testData = [ { testWallet: testWallet1, - expectedTxsAmount: 2, + expectedTxsAmount: 7, }, { testWallet: testWallet2, diff --git a/packages/e2e-tests/test/12_loadingAllTransactions.test.js b/packages/e2e-tests/test/12_loadingAllTransactions.test.js index fb02e6225d..ea3e389a77 100644 --- a/packages/e2e-tests/test/12_loadingAllTransactions.test.js +++ b/packages/e2e-tests/test/12_loadingAllTransactions.test.js @@ -10,7 +10,7 @@ import driversPoolsManager from '../utils/driversPool.js'; const testWallet = getSpendableWallet(); -describe('Show more txs 5 times', function () { +describe('Show more txs 4 times', function () { this.timeout(5 * oneMinute); let webdriver = null; let logger = null; @@ -35,7 +35,7 @@ describe('Show more txs 5 times', function () { it('Load txs and check amount', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.loadMoreTxs(5); + await transactionsPage.loadMoreTxs(4); const displayedTxsAmount = await transactionsPage.getAmountOfTxs(); expect(displayedTxsAmount, 'The amount of txs is different from expected').to.be.at.least( testWallet.minTxs diff --git a/packages/e2e-tests/test/16_generateURILink.test.js b/packages/e2e-tests/test/16_generateURILink.test.js index 5f53434bff..5b0f824bf5 100644 --- a/packages/e2e-tests/test/16_generateURILink.test.js +++ b/packages/e2e-tests/test/16_generateURILink.test.js @@ -5,8 +5,7 @@ import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.pag import { customAfterEach } from '../utils/customHooks.js'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; -import { restoreWallet } from '../helpers/restoreWalletHelper.js'; -import { getSpendableWallet } from '../utils/testWallets.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; describe('Generating URL-link', function () { @@ -17,11 +16,7 @@ describe('Generating URL-link', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - const testWallet = getSpendableWallet(); - await restoreWallet(webdriver, logger, testWallet); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it('Go to Receive tab', async function () { diff --git a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js index c5369282a3..b4bce8abd5 100644 --- a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js +++ b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js @@ -5,8 +5,7 @@ import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.pag import { customAfterEach } from '../utils/customHooks.js'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; -import { restoreWallet } from '../helpers/restoreWalletHelper.js'; -import { getSpendableWallet } from '../utils/testWallets.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; import { INVALID_AMOUNT } from '../helpers/messages.js'; @@ -18,11 +17,7 @@ describe('Generating URL-link with really big amount', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - const testWallet = getSpendableWallet(); - await restoreWallet(webdriver, logger, testWallet); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it('Go to Receive tab', async function () { diff --git a/packages/e2e-tests/test/18_changingLanguageSettings.test.js b/packages/e2e-tests/test/18_changingLanguageSettings.test.js index d6edb7d5bf..447a69c1fd 100644 --- a/packages/e2e-tests/test/18_changingLanguageSettings.test.js +++ b/packages/e2e-tests/test/18_changingLanguageSettings.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Changing language through the Settings', function () { this.timeout(2 * oneMinute); @@ -17,8 +17,7 @@ describe('Changing language through the Settings', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); const testData = [ diff --git a/packages/e2e-tests/test/19_changingFiat.test.js b/packages/e2e-tests/test/19_changingFiat.test.js index dc40ff3b1b..3f827299b3 100644 --- a/packages/e2e-tests/test/19_changingFiat.test.js +++ b/packages/e2e-tests/test/19_changingFiat.test.js @@ -2,25 +2,22 @@ import BasePage from '../pages/basepage.js'; import { customAfterEach } from '../utils/customHooks.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import { expect } from 'chai'; -import { diffIsLessPerc, getCurrenciesPrices, getTestLogger, roundUpCurrency } from '../utils/utils.js'; +import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Changing fiat currencies', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; - let prices = {}; before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); - prices = await getCurrenciesPrices(); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); const testData = ['BRL', 'ETH', 'BTC', 'KRW', 'CNY', 'EUR', 'JPY', 'USD', 'ADA']; @@ -47,13 +44,7 @@ describe('Changing fiat currencies', function () { expect(walletInfo.fiatBalance, 'Fiat balance is different').to.equal(0); } else { expect(walletInfo.fiatCurrency, 'Fiat currency is different').to.equal(testDatum); - const expectedFiatValue = roundUpCurrency( - prices[testDatum] * walletInfo.balance, - testDatum - ); - const percents = 2; - const diffLess2Perc = diffIsLessPerc(walletInfo.fiatBalance, expectedFiatValue, percents); - expect(diffLess2Perc, `Fiat difference is more than ${percents}%`).to.be.true; + expect(walletInfo.balance, 'Fiat value is zero').to.not.equal(0); } }); }); diff --git a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js index 3cfb58de64..e70c84df2d 100644 --- a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js +++ b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import BlockchainSubTab from '../pages/wallet/settingsTab/blockchainSubTab.page.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Changing explorer', function () { this.timeout(2 * oneMinute); @@ -17,8 +17,7 @@ describe('Changing explorer', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this) }); const testData = [ diff --git a/packages/e2e-tests/test/21_checkingTOS.test.js b/packages/e2e-tests/test/21_checkingTOS.test.js index 106d869ab7..0fcbe969d3 100644 --- a/packages/e2e-tests/test/21_checkingTOS.test.js +++ b/packages/e2e-tests/test/21_checkingTOS.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import TermOfServiceAgreementSubTab from '../pages/wallet/settingsTab/tosSubTab.page.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Checking Term Of Service Agreement', function () { this.timeout(2 * oneMinute); @@ -17,8 +17,7 @@ describe('Checking Term Of Service Agreement', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it('Open Term Of User Agreement', async function () { diff --git a/packages/e2e-tests/test/22_addingMemo.test.js b/packages/e2e-tests/test/22_addingMemo.test.js index ade581a6d4..632e718f88 100644 --- a/packages/e2e-tests/test/22_addingMemo.test.js +++ b/packages/e2e-tests/test/22_addingMemo.test.js @@ -7,7 +7,7 @@ import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { getTestString } from '../helpers/constants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Adding a memo to a completed Tx', function () { this.timeout(2 * oneMinute); @@ -18,8 +18,7 @@ describe('Adding a memo to a completed Tx', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); // open the latests tx diff --git a/packages/e2e-tests/test/23_editMemo.test.js b/packages/e2e-tests/test/23_editMemo.test.js index 0087c6abda..de6bd63338 100644 --- a/packages/e2e-tests/test/23_editMemo.test.js +++ b/packages/e2e-tests/test/23_editMemo.test.js @@ -6,21 +6,19 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import { getTestString } from '../helpers/constants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; +import { getSnapshotedMemo as getOldMemo, getTestString } from '../helpers/constants.js'; describe('Editing a memo', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; - const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; const newMemoMessage = getTestString('', 40, true); before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1MemoAdded', this); }); it('Expand tx', async function () { @@ -31,7 +29,7 @@ describe('Editing a memo', function () { it('Edit memo', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); const memoMessage = await transactionsPage.getMemoMessage(0, 0); - expect(memoMessage).to.equal(oldMemo); + expect(memoMessage).to.equal(getOldMemo()); // click edit memo const memoWarningModal = await transactionsPage.clickEditMemo(0, 0); diff --git a/packages/e2e-tests/test/24_deletingMemo.test.js b/packages/e2e-tests/test/24_deletingMemo.test.js index 9bd63b1d1a..380ed2481d 100644 --- a/packages/e2e-tests/test/24_deletingMemo.test.js +++ b/packages/e2e-tests/test/24_deletingMemo.test.js @@ -5,19 +5,18 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; +import { getSnapshotedMemo as getOldMemo } from '../helpers/constants.js'; describe('Deleting a memo', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; - const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1MemoAdded', this); }); it('Expand tx', async function () { @@ -28,7 +27,7 @@ describe('Deleting a memo', function () { it('Delete memo', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); const memoMessage = await transactionsPage.getMemoMessage(0, 0); - expect(memoMessage).to.equal(oldMemo); + expect(memoMessage).to.equal(getOldMemo()); // click edit memo const memoWarningModal = await transactionsPage.clickEditMemo(0, 0); diff --git a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js similarity index 79% rename from packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js rename to packages/e2e-tests/test/25_hideShowBalance.test.js index f2546bec45..17f981fb37 100644 --- a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -1,25 +1,23 @@ -import BasePage from '../../pages/basepage.js'; -import { customAfterEach } from '../../utils/customHooks.js'; -import TransactionsSubTab from '../../pages/wallet/walletTab/walletTransactions.page.js'; -import ReceiveSubTab from '../../pages/wallet/walletTab/receiveSubTab.page.js'; +import BasePage from '../pages/basepage.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; import { expect } from 'chai'; -import { getTestLogger } from '../../utils/utils.js'; -import { oneMinute } from '../../helpers/timeConstants.js'; -import driversPoolsManager from '../../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; -import { testWallet1 } from '../../utils/testWallets.js'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; +import { testWallet1 } from '../utils/testWallets.js'; -// Issue https://emurgo.atlassian.net/browse/YOEXT-1218 describe('Hide and show balance', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + webdriver = await driversPoolsManager.getDriverFromPool(); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); // check the default state. The balance should be displayed it('Check default state', async function () { @@ -58,9 +56,6 @@ describe('Hide and show balance', function () { await receivePage.selectBaseExtHasBalanceAddrs(); const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); expect(balanceExtAddrHidden, 'Balances of external addresses are not hidden').to.be.true; - await receivePage.selectBaseInterHasBalanceAddrs(); - const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); - expect(balanceInterAddrHidden, 'Balances of internal addresses are not hidden').to.be.true; }); // add checking Staking page when testnetwork is added // click show balance @@ -97,9 +92,6 @@ describe('Hide and show balance', function () { await receivePage.selectBaseExtHasBalanceAddrs(); const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); expect(balanceExtAddrHidden, 'Balances of external addresses are hidden').to.be.false; - await receivePage.selectBaseInterHasBalanceAddrs(); - const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); - expect(balanceInterAddrHidden, 'Balances of internal addresses are hidden').to.be.false; }); // add checking Staking page when testnetwork is added diff --git a/packages/e2e-tests/test/26_verifyingAddress.test.js b/packages/e2e-tests/test/26_verifyingAddress.test.js index 713c34a09b..fa3c5ad00e 100644 --- a/packages/e2e-tests/test/26_verifyingAddress.test.js +++ b/packages/e2e-tests/test/26_verifyingAddress.test.js @@ -7,7 +7,7 @@ import { customAfterEach } from '../utils/customHooks.js'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import { getRewarKeyHashFromBech32 } from '../helpers/mock-dApp-webpage/dAppTxHelper.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; describe('Verify addresses', function () { this.timeout(2 * oneMinute); @@ -19,8 +19,7 @@ describe('Verify addresses', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it('Open the Receive tab', async function () { diff --git a/packages/e2e-tests/test/27_handles.test.js b/packages/e2e-tests/test/27_handles.test.js index 3bdf4cfb16..7b607553f6 100644 --- a/packages/e2e-tests/test/27_handles.test.js +++ b/packages/e2e-tests/test/27_handles.test.js @@ -3,9 +3,9 @@ import BasePage from '../pages/basepage.js'; import driversPoolsManager from '../utils/driversPool.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import { customAfterEach } from '../utils/customHooks.js'; -import { getTestLogger } from '../utils/utils.js'; +import { getTestLogger, isLocalRun } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; import SendSubTab from '../pages/wallet/walletTab/sendSubTab.page.js'; import { getTestString } from '../helpers/constants.js'; import { RECEIVER_DOESNT_EXIST } from '../helpers/messages.js'; @@ -18,8 +18,7 @@ describe('Handle handles', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); const testDataPositive = [ @@ -31,11 +30,10 @@ describe('Handle handles', function () { userHandle: 'rahul.ada', provider: 'Cardano Name Service (CNS)', }, - // Commented because of this https://emurgo.slack.com/archives/GCN6JLZK7/p1720772972481959 - // { - // userHandle: 'stackchain.blockchain', - // provider: 'Unstoppable Domains', - // }, + { + userHandle: 'stackchain.blockchain', + provider: 'Unstoppable Domains', + }, ]; const testDataNegative = [ @@ -47,14 +45,16 @@ describe('Handle handles', function () { userHandle: `${getTestString('', 7, false)}.ada`, provider: 'Cardano Name Service (CNS)', }, - // Commented because of this https://emurgo.slack.com/archives/GCN6JLZK7/p1720772972481959 - // { - // userHandle: `${getTestString('', 10, false)}.blockchain`, - // provider: 'Unstoppable Domains', - // }, + { + userHandle: `${getTestString('', 10, false)}.blockchain`, + provider: 'Unstoppable Domains', + }, ]; for (const testDatum of testDataPositive) { + if (testDatum.provider === 'Unstoppable Domains' && isLocalRun()) { + continue; + } describe(`Positive case, ${testDatum.provider}`, function () { it(`${testDatum.provider}. Refresh page`, async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); @@ -108,6 +108,9 @@ describe('Handle handles', function () { } for (const testNegativeDatum of testDataNegative) { + if (testNegativeDatum.provider === 'Unstoppable Domains' && isLocalRun()) { + continue; + } describe(`Negative case, ${testNegativeDatum.provider}`, function () { it(`${testNegativeDatum.provider}. Refresh page`, async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); @@ -127,16 +130,10 @@ describe('Handle handles', function () { await sendStep1Page.enterReceiver(testNegativeDatum.userHandle); }); - it(`${testNegativeDatum.provider}. Wait for domain resolver response`, async function () { + it(`${testNegativeDatum.provider}. Wait and check displayed info`, async function () { const sendStep1Page = new SendSubTab(webdriver, logger); - const errorMarkIsDisplayed = await sendStep1Page.receiverIsIncorrect(); - expect(errorMarkIsDisplayed, 'There is no error for receiver').to.be.true; - }); - - it(`${testNegativeDatum.provider}. Check displayed info and continue`, async function () { - const sendStep1Page = new SendSubTab(webdriver, logger); - const helperText = await sendStep1Page.getReceiverHelperText(); - expect(helperText, 'A different error message is displayed').to.equal(RECEIVER_DOESNT_EXIST); + const errorMessageIsDisplayed = await sendStep1Page.waitReceiverHelperTextEqual(RECEIVER_DOESNT_EXIST); + expect(errorMessageIsDisplayed, 'A different error message is displayed').to.equal(true); }); }); } diff --git a/packages/e2e-tests/test/28_invalidAddressToSend.test.js b/packages/e2e-tests/test/28_invalidAddressToSend.test.js index 5b13c79f8f..7b1f72467f 100644 --- a/packages/e2e-tests/test/28_invalidAddressToSend.test.js +++ b/packages/e2e-tests/test/28_invalidAddressToSend.test.js @@ -6,7 +6,7 @@ import { customAfterEach } from '../utils/customHooks.js'; import { getTestLogger } from '../utils/utils.js'; import { expect } from 'chai'; import { oneMinute } from '../helpers/timeConstants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet } from '../helpers/restoreWalletHelper.js'; import { getTestString } from '../helpers/constants.js'; import { INVALID_ADDRESS } from '../helpers/messages.js'; @@ -20,8 +20,7 @@ describe('Invalid address for sending', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this); }); it(`Go to Send page`, async function () { @@ -37,16 +36,10 @@ describe('Invalid address for sending', function () { await sendStep1Page.enterReceiver(invalidAddress); }); - it(`Wait for checking`, async function () { + it(`Wait and check displayed info`, async function () { const sendStep1Page = new SendSubTab(webdriver, logger); - const errorMarkIsDisplayed = await sendStep1Page.receiverIsIncorrect(); - expect(errorMarkIsDisplayed, 'There is no error for receiver').to.be.true; - }); - - it(`Check displayed info`, async function () { - const sendStep1Page = new SendSubTab(webdriver, logger); - const helperText = await sendStep1Page.getReceiverHelperText(); - expect(helperText, 'A different error message is displayed').to.equal(INVALID_ADDRESS); + const errorMessageIsDisplayed = await sendStep1Page.waitReceiverHelperTextEqual(INVALID_ADDRESS); + expect(errorMessageIsDisplayed, 'A different error message is displayed').to.equal(true); }); afterEach(function (done) { diff --git a/packages/e2e-tests/test/28_invalidAmount.test.js b/packages/e2e-tests/test/28_invalidAmount.test.js index 01d893d2c4..8c2a9d7819 100644 --- a/packages/e2e-tests/test/28_invalidAmount.test.js +++ b/packages/e2e-tests/test/28_invalidAmount.test.js @@ -6,7 +6,7 @@ import { customAfterEach } from '../utils/customHooks.js'; import { getTestLogger } from '../utils/utils.js'; import { expect } from 'chai'; import { oneMinute } from '../helpers/timeConstants.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { prepareWallet} from '../helpers/restoreWalletHelper.js'; import { NOT_ENOUGH_BALANCE } from '../helpers/messages.js'; import { testWallet1 } from '../utils/testWallets.js'; @@ -18,8 +18,7 @@ describe('Invalid amount for sending', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1'); - await waitTxPage(webdriver, logger); + await prepareWallet(webdriver, logger, 'testWallet1', this) }); // Go to Send page it(`Go to Send page`, async function () { diff --git a/packages/e2e-tests/test/13_generatingNewAddress.test.js b/packages/e2e-tests/test/blacklist/13_generatingNewAddress.test.js similarity index 69% rename from packages/e2e-tests/test/13_generatingNewAddress.test.js rename to packages/e2e-tests/test/blacklist/13_generatingNewAddress.test.js index 80523b8a2b..284063b171 100644 --- a/packages/e2e-tests/test/13_generatingNewAddress.test.js +++ b/packages/e2e-tests/test/blacklist/13_generatingNewAddress.test.js @@ -1,14 +1,15 @@ import { expect } from 'chai'; -import BasePage from '../pages/basepage.js'; -import driversPoolsManager from '../utils/driversPool.js'; -import { getTestWalletName } from '../helpers/constants.js'; -import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; -import { customAfterEach } from '../utils/customHooks.js'; -import { getTestLogger } from '../utils/utils.js'; -import { oneMinute } from '../helpers/timeConstants.js'; -import { createWallet } from '../helpers/restoreWalletHelper.js'; -import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; +import BasePage from '../../pages/basepage.js'; +import driversPoolsManager from '../../utils/driversPool.js'; +import { getTestWalletName } from '../../helpers/constants.js'; +import TransactionsSubTab from '../../pages/wallet/walletTab/walletTransactions.page.js'; +import { customAfterEach } from '../../utils/customHooks.js'; +import { getTestLogger } from '../../utils/utils.js'; +import { oneMinute } from '../../helpers/timeConstants.js'; +import { createWallet } from '../../helpers/restoreWalletHelper.js'; +import ReceiveSubTab from '../../pages/wallet/walletTab/receiveSubTab.page.js'; +// Issue https://emurgo.atlassian.net/browse/YOEXT-1451 describe('Generating a new address', function () { this.timeout(2 * oneMinute); let webdriver = null; @@ -36,7 +37,7 @@ describe('Generating a new address', function () { const receivePage = new ReceiveSubTab(webdriver, logger); await receivePage.generateNewAddress(); }); - it('Check amount after generateing an address', async function () { + it('Check amount after generating an address', async function () { const receivePage = new ReceiveSubTab(webdriver, logger); const addrsAmount = await receivePage.getAmountOfAddresses(); expect(addrsAmount, 'The amount of addresses is different from expected').to.equal(2); diff --git a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js b/packages/e2e-tests/test/blacklist/14_generatingMaxAmountAddrs.test.js similarity index 76% rename from packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js rename to packages/e2e-tests/test/blacklist/14_generatingMaxAmountAddrs.test.js index cfc3815b57..2c51d50ebd 100644 --- a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js +++ b/packages/e2e-tests/test/blacklist/14_generatingMaxAmountAddrs.test.js @@ -1,15 +1,16 @@ import { expect } from 'chai'; -import BasePage from '../pages/basepage.js'; -import driversPoolsManager from '../utils/driversPool.js'; -import { getTestWalletName } from '../helpers/constants.js'; -import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; -import { customAfterEach } from '../utils/customHooks.js'; -import { getTestLogger } from '../utils/utils.js'; -import { oneMinute } from '../helpers/timeConstants.js'; -import { createWallet } from '../helpers/restoreWalletHelper.js'; -import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; -import { MAX_ALLOWED_UNUSED_ADDRS } from '../helpers/messages.js'; +import BasePage from '../../pages/basepage.js'; +import driversPoolsManager from '../../utils/driversPool.js'; +import { getTestWalletName } from '../../helpers/constants.js'; +import TransactionsSubTab from '../../pages/wallet/walletTab/walletTransactions.page.js'; +import { customAfterEach } from '../../utils/customHooks.js'; +import { getTestLogger } from '../../utils/utils.js'; +import { oneMinute } from '../../helpers/timeConstants.js'; +import { createWallet } from '../../helpers/restoreWalletHelper.js'; +import ReceiveSubTab from '../../pages/wallet/walletTab/receiveSubTab.page.js'; +import { MAX_ALLOWED_UNUSED_ADDRS } from '../../helpers/messages.js'; +// Issue https://emurgo.atlassian.net/browse/YOEXT-1451 describe('Generating a max amount of addresses', function () { this.timeout(2 * oneMinute); let webdriver = null; diff --git a/packages/e2e-tests/test/dapp/dAppConnection.test.js b/packages/e2e-tests/test/dapp/dAppConnection.test.js index 14c7b778d1..db89e11147 100644 --- a/packages/e2e-tests/test/dapp/dAppConnection.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnection.test.js @@ -4,13 +4,13 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, extensionTabName, mockDAppName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; import ConnectorTab from '../../pages/wallet/connectorTab/connectorTab.page.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, connection in extension', function () { this.timeout(2 * oneMinute); @@ -21,25 +21,28 @@ describe('dApp, connection in extension', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { await windowManager.openNewTab(mockDAppName, mockDAppUrl); }); - it('Connect the wallet without auth to the dapp', async function () { + it('Connect the wallet to the dapp', async function () { await connectNonAuth(webdriver, logger, windowManager, mockedDApp, testWallet1); }); diff --git a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js index 57c45bb7ab..43e2889ba6 100644 --- a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js @@ -4,13 +4,13 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName, popupConnectorName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import DAppConnectWallet from '../../pages/dapp/dAppConnectWallet.page.js'; import { ApiErrorCode } from '../../helpers/mock-dApp-webpage/cip30Errors.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, cancel connection', function () { this.timeout(2 * oneMinute); @@ -21,26 +21,29 @@ describe('dApp, cancel connection', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { await windowManager.openNewTab(mockDAppName, mockDAppUrl); }); - it('Request connection the wallet without auth to the dapp', async function () { - await mockedDApp.requestNonAuthAccess(); + it('Request connection the wallet to the dapp', async function () { + await mockedDApp.requestAccess(); const dappConnectPage = new DAppConnectWallet(webdriver, logger); // the window focus is switched to the pop-up here const popUpAppeared = await dappConnectPage.popUpIsDisplayed(windowManager); diff --git a/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js b/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js index 44d2bd7b48..9eccb6b8ad 100644 --- a/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js @@ -42,7 +42,7 @@ describe('dApp, connection, no wallets', function () { }); it('Request connection', async function () { - await mockedDApp.requestNonAuthAccess(); + await mockedDApp.requestAccess(); const dappConnectPage = new DAppConnectWallet(webdriver, logger); const popUpAppeared = await dappConnectPage.popUpIsDisplayed(windowManager); expect(popUpAppeared, 'The connector pop-up is not displayed').to.be.true; diff --git a/packages/e2e-tests/test/dapp/dAppGeneral.test.js b/packages/e2e-tests/test/dapp/dAppGeneral.test.js index ea61e7482a..688ba7b025 100644 --- a/packages/e2e-tests/test/dapp/dAppGeneral.test.js +++ b/packages/e2e-tests/test/dapp/dAppGeneral.test.js @@ -4,13 +4,13 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; import { adaInLovelaces } from '../../helpers/constants.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, general functions, without pop-up', function () { this.timeout(2 * oneMinute); @@ -21,18 +21,21 @@ describe('dApp, general functions, without pop-up', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js index 3613d1ba45..04d942bb05 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js @@ -4,7 +4,6 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; @@ -12,8 +11,9 @@ import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; import { adaInLovelaces } from '../../helpers/constants.js'; import { ApiErrorCode } from '../../helpers/mock-dApp-webpage/cip30Errors.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; -describe('dApp, getCollateral, error, max limit, not auth,', function () { +describe('dApp, getCollateral, error, max limit', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; @@ -22,18 +22,21 @@ describe('dApp, getCollateral, error, max limit, not auth,', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js index c327d29fdc..59399342bc 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js @@ -12,7 +12,7 @@ import { adaInLovelaces, getTestWalletName } from '../../helpers/constants.js'; import { ApiErrorCode } from '../../helpers/mock-dApp-webpage/cip30Errors.js'; import driversPoolsManager from '../../utils/driversPool.js'; -describe('dApp, getCollateral, error, empty wallet, not auth', function () { +describe('dApp, getCollateral, error, empty wallet', function () { const testWalletName = getTestWalletName(); let newTestWallet = { name: '', diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js index d4ccd26198..f8175d8d3c 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js @@ -4,13 +4,13 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; import { adaInLovelaces } from '../../helpers/constants.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, getUtxos, nested tests', function () { this.timeout(2 * oneMinute); @@ -21,18 +21,21 @@ describe('dApp, getUtxos, nested tests', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js index d461290d06..0ebde7718d 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js @@ -11,7 +11,7 @@ import { getTestWalletName } from '../../helpers/constants.js'; import { createWallet } from '../../helpers/restoreWalletHelper.js'; import driversPoolsManager from '../../utils/driversPool.js'; -describe('dApp, getUtxos, empty wallet, not auth', function () { +describe('dApp, getUtxos, empty wallet', function () { const testWalletName = getTestWalletName(); let newTestWallet = { name: '', diff --git a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js index 6961a27cf8..32e33d9763 100644 --- a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js +++ b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js @@ -4,14 +4,14 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; -describe('dApp, isEnabled, not auth', function () { +describe('dApp, isEnabled', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; @@ -20,18 +20,21 @@ describe('dApp, isEnabled, not auth', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSignData.test.js b/packages/e2e-tests/test/dapp/dAppSignData.test.js index 6291f4a1fd..89a7c3f8aa 100644 --- a/packages/e2e-tests/test/dapp/dAppSignData.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignData.test.js @@ -4,7 +4,6 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName, popupConnectorName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; @@ -13,6 +12,7 @@ import DAppSignData from '../../pages/dapp/dAppSignData.page.js'; import { getPassword } from '../../helpers/constants.js'; import { DataSignErrorCode } from '../../helpers/mock-dApp-webpage/cip30Errors.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, signData', function () { this.timeout(2 * oneMinute); @@ -23,18 +23,21 @@ describe('dApp, signData', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js index aaccf97ca7..4181369534 100644 --- a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js @@ -4,7 +4,6 @@ import { testWallet1 } from '../../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../../utils/utils.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import { WindowManager, mockDAppName, popupConnectorName } from '../../helpers/windowManager.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; @@ -13,6 +12,7 @@ import DAppSignData from '../../pages/dapp/dAppSignData.page.js'; import { getPassword } from '../../helpers/constants.js'; import { DataSignErrorCode } from '../../helpers/mock-dApp-webpage/cip30Errors.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, CIP-95, signData', function () { this.timeout(2 * oneMinute); @@ -23,18 +23,21 @@ describe('dApp, CIP-95, signData', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js index 41eec29c9e..12f07acd2c 100644 --- a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js +++ b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js @@ -1,15 +1,14 @@ import BasePage from '../../pages/basepage.js'; import { customAfterEach } from '../../utils/customHooks.js'; import { expect } from 'chai'; -import { testWallet1 } from '../../utils/testWallets.js'; import { getTestLogger } from '../../utils/utils.js'; import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; import { yoroiObject } from '../../helpers/constants.js'; import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; import driversPoolsManager from '../../utils/driversPool.js'; +import { collectInfo, preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; describe('dApp, Yoroi object in Cardano', function () { this.timeout(2 * oneMinute); @@ -20,18 +19,21 @@ describe('dApp, Yoroi object in Cardano', function () { let mockedDApp = null; before(async function () { - webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); - const wmLogger = getTestLogger('windowManager', this.test.parent.title); - windowManager = new WindowManager(webdriver, wmLogger); - windowManager.init(); - const dappLogger = getTestLogger('dApp', this.test.parent.title); - mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - }); - - it('Restore a 15-word wallet', async function () { - await restoreWallet(webdriver, logger, testWallet1); + try { + webdriver = await driversPoolsManager.getDriverFromPool(); + const wmLogger = getTestLogger('windowManager', this.test.parent.title); + windowManager = new WindowManager(webdriver, wmLogger); + windowManager.init(); + const dappLogger = getTestLogger('dApp', this.test.parent.title); + mockedDApp = new MockDAppWebpage(webdriver, dappLogger); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + } catch (error) { + await collectInfo(this, webdriver, logger); + throw new Error(error); + } }); it('Open a dapp page', async function () { diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index f741ee7f0d..9ee66267a5 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -72,6 +72,7 @@ const getChromeBuilder = () => { .addArguments('--disable-gpu') .addArguments('--disable-setuid-sandbox') .addArguments('--start-maximized') + .addArguments('--remote-debugging-pipe') .setUserPreferences({ 'download.default_directory': downloadsDir }); if (isHeadless()) { chromeOpts.addArguments('--headless=new'); diff --git a/packages/e2e-tests/utils/utils.js b/packages/e2e-tests/utils/utils.js index 4fe0829376..8123d1ee1b 100644 --- a/packages/e2e-tests/utils/utils.js +++ b/packages/e2e-tests/utils/utils.js @@ -48,6 +48,7 @@ export const isLinux = () => getCurrentOS() === 'linux'; export const isMacOS = () => getCurrentOS() === 'darwin'; export const isHeadless = () => process.env.HEADLESS === 'true'; export const isDapp = () => process.env.ISDAPP === 'true'; +export const isLocalRun = () => process.env.EXTENSION_LOCAL_RUN === 'true'; export const createTestRunDataDir = testSuiteName => { const clearedTestSuiteName = testSuiteName.replace(/[ |,]/gi, '_'); @@ -230,6 +231,20 @@ export const convertPrettyDateToNormal = prettyDate => { return `${year}-${month}-${day}`; }; +const uglyDateToDateObject = uglyDateStr => { + const yearStr = uglyDateStr.slice(-4); + const monthStr = uglyDateStr.slice(0, 2); + const dayStr = uglyDateStr.slice(2, 4); + return new Date(`${yearStr}-${monthStr}-${dayStr}`); +}; + +export const groupDateIsInPeriod = (groupDate, startDate, endDate) => { + const groupDateObject = new Date(groupDate); + const startDateObject = uglyDateToDateObject(startDate); + const endDateObject = uglyDateToDateObject(endDate); + return startDateObject <= groupDateObject && groupDateObject <= endDateObject; +}; + export const convertPrettyTimeToNormal = prettyTime => { const [time, modifier] = prettyTime.split(' '); let [hours, minutes] = time.split(':'); @@ -272,3 +287,5 @@ export const getCurrenciesPrices = async () => { throw new Error(`Error happen while getting currencies prices. Error: ${error}`); } }; + +export const filterTxs = (startDate, endDate) => {}; diff --git a/packages/yoroi-extension/.eslintrc.js b/packages/yoroi-extension/.eslintrc.js index f93f5f318d..13e52685ac 100644 --- a/packages/yoroi-extension/.eslintrc.js +++ b/packages/yoroi-extension/.eslintrc.js @@ -125,7 +125,16 @@ module.exports = { camelcase: 0, 'react/jsx-curly-brace-presence': 0, }, - plugins: ['import', 'promise', 'react', 'flowtype', 'no-floating-promise', 'prettier', 'eslint-plugin-simple-import-sort'], + plugins: [ + 'import', + 'promise', + 'react', + 'flowtype', + 'no-floating-promise', + 'prettier', + 'eslint-plugin-simple-import-sort', + '@typescript-eslint', + ], globals: { chrome: true, API: true, diff --git a/packages/yoroi-extension/.gitignore b/packages/yoroi-extension/.gitignore index ab56a11aaf..c2ff53bb2d 100644 --- a/packages/yoroi-extension/.gitignore +++ b/packages/yoroi-extension/.gitignore @@ -47,4 +47,5 @@ Yoroi Shelley Testnet # SSL overrides for DEV scripts/sslOverrides.js -*.d.ts \ No newline at end of file +*.d.ts +app/UI/**/*.d.ts diff --git a/packages/yoroi-extension/ampli/index.js b/packages/yoroi-extension/ampli/index.js index 397079a676..eb54dba3f3 100644 --- a/packages/yoroi-extension/ampli/index.js +++ b/packages/yoroi-extension/ampli/index.js @@ -46,6 +46,13 @@ export var DefaultConfiguration = __assign({ plan: { sourceVersion: '2.0.0' } }); +var ToDeleteGovernanceAbstainPageViewed = /** @class */ (function () { + function ToDeleteGovernanceAbstainPageViewed() { + this.event_type = '(to delete)Governance Abstain Page Viewed'; + } + return ToDeleteGovernanceAbstainPageViewed; +}()); +export { ToDeleteGovernanceAbstainPageViewed }; var AllWalletsPageViewed = /** @class */ (function () { function AllWalletsPageViewed() { this.event_type = 'All Wallets Page Viewed'; @@ -60,6 +67,20 @@ var AssetsPageViewed = /** @class */ (function () { return AssetsPageViewed; }()); export { AssetsPageViewed }; +var BuyAdaInputAmount = /** @class */ (function () { + function BuyAdaInputAmount() { + this.event_type = 'Buy Ada Input Amount'; + } + return BuyAdaInputAmount; +}()); +export { BuyAdaInputAmount }; +var BuyAdaSuccessRedirect = /** @class */ (function () { + function BuyAdaSuccessRedirect() { + this.event_type = 'Buy Ada Success Redirect'; + } + return BuyAdaSuccessRedirect; +}()); +export { BuyAdaSuccessRedirect }; var ClaimAdaPageViewed = /** @class */ (function () { function ClaimAdaPageViewed() { this.event_type = 'Claim ADA Page Viewed'; @@ -67,6 +88,54 @@ var ClaimAdaPageViewed = /** @class */ (function () { return ClaimAdaPageViewed; }()); export { ClaimAdaPageViewed }; +var ClaimAdaTransactionSettled = /** @class */ (function () { + function ClaimAdaTransactionSettled(event_properties) { + this.event_properties = event_properties; + this.event_type = 'Claim Ada Transaction Settled'; + this.event_properties = event_properties; + } + return ClaimAdaTransactionSettled; +}()); +export { ClaimAdaTransactionSettled }; +var ClaimAdaTransactionSubmitted = /** @class */ (function () { + function ClaimAdaTransactionSubmitted(event_properties) { + this.event_properties = event_properties; + this.event_type = 'Claim Ada Transaction Submitted'; + this.event_properties = event_properties; + } + return ClaimAdaTransactionSubmitted; +}()); +export { ClaimAdaTransactionSubmitted }; +var ConnectWalletCheckPageViewed = /** @class */ (function () { + function ConnectWalletCheckPageViewed() { + this.event_type = 'Connect Wallet Check Page Viewed'; + } + return ConnectWalletCheckPageViewed; +}()); +export { ConnectWalletCheckPageViewed }; +var ConnectWalletConnectPageViewed = /** @class */ (function () { + function ConnectWalletConnectPageViewed() { + this.event_type = 'Connect Wallet Connect Page Viewed'; + } + return ConnectWalletConnectPageViewed; +}()); +export { ConnectWalletConnectPageViewed }; +var ConnectWalletDetailsPageViewed = /** @class */ (function () { + function ConnectWalletDetailsPageViewed() { + this.event_type = 'Connect Wallet Details Page Viewed'; + } + return ConnectWalletDetailsPageViewed; +}()); +export { ConnectWalletDetailsPageViewed }; +var ConnectWalletDetailsSubmitted = /** @class */ (function () { + function ConnectWalletDetailsSubmitted(event_properties) { + this.event_properties = event_properties; + this.event_type = 'Connect Wallet Details Submitted'; + this.event_properties = event_properties; + } + return ConnectWalletDetailsSubmitted; +}()); +export { ConnectWalletDetailsSubmitted }; var ConnectorPageViewed = /** @class */ (function () { function ConnectorPageViewed() { this.event_type = 'Connector Page Viewed'; @@ -283,6 +352,13 @@ var NftGallerySearchActivated = /** @class */ (function () { return NftGallerySearchActivated; }()); export { NftGallerySearchActivated }; +var OnboardingAnalyticsPageViewed = /** @class */ (function () { + function OnboardingAnalyticsPageViewed() { + this.event_type = 'Onboarding Analytics Page Viewed'; + } + return OnboardingAnalyticsPageViewed; +}()); +export { OnboardingAnalyticsPageViewed }; var PortfolioTokenDetails = /** @class */ (function () { function PortfolioTokenDetails(event_properties) { this.event_properties = event_properties; @@ -402,6 +478,20 @@ var RestoreWalletTypeStepViewed = /** @class */ (function () { return RestoreWalletTypeStepViewed; }()); export { RestoreWalletTypeStepViewed }; +var SellAdaInputAmount = /** @class */ (function () { + function SellAdaInputAmount() { + this.event_type = 'Sell Ada Input Amount'; + } + return SellAdaInputAmount; +}()); +export { SellAdaInputAmount }; +var SellAdaSuccessRedirect = /** @class */ (function () { + function SellAdaSuccessRedirect() { + this.event_type = 'Sell Ada Success Redirect'; + } + return SellAdaSuccessRedirect; +}()); +export { SellAdaSuccessRedirect }; var SendInitiated = /** @class */ (function () { function SendInitiated() { this.event_type = 'Send Initiated'; @@ -459,6 +549,13 @@ var SettingsPageViewed = /** @class */ (function () { return SettingsPageViewed; }()); export { SettingsPageViewed }; +var StakingCenterDelegationInitiated = /** @class */ (function () { + function StakingCenterDelegationInitiated() { + this.event_type = 'Staking Center Delegation Initiated'; + } + return StakingCenterDelegationInitiated; +}()); +export { StakingCenterDelegationInitiated }; var StakingCenterPageViewed = /** @class */ (function () { function StakingCenterPageViewed() { this.event_type = 'Staking Center Page Viewed'; @@ -545,6 +642,15 @@ var SwapSlippageChanged = /** @class */ (function () { return SwapSlippageChanged; }()); export { SwapSlippageChanged }; +var ThemeSelected = /** @class */ (function () { + function ThemeSelected(event_properties) { + this.event_properties = event_properties; + this.event_type = 'Theme Selected'; + this.event_properties = event_properties; + } + return ThemeSelected; +}()); +export { ThemeSelected }; var TransactionsPageViewed = /** @class */ (function () { function TransactionsPageViewed() { this.event_type = 'Transactions Page Viewed'; @@ -663,6 +769,18 @@ var Ampli = /** @class */ (function () { } return this.amplitude.track(event, undefined, options); }; + /** + * (to delete)Governance Abstain Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/(to%20delete)Governance%20Abstain%20Page%20Viewed) + * + * This event tracks when a user selects abstain governance status and the confirm transaction page is displayed + * + * @param options Amplitude event options. + */ + Ampli.prototype.toDeleteGovernanceAbstainPageViewed = function (options) { + return this.track(new ToDeleteGovernanceAbstainPageViewed(), options); + }; /** * All Wallets Page Viewed * @@ -688,6 +806,30 @@ var Ampli = /** @class */ (function () { Ampli.prototype.assetsPageViewed = function (options) { return this.track(new AssetsPageViewed(), options); }; + /** + * Buy Ada Input Amount + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Buy%20Ada%20Input%20Amount) + * + * Event to track when a user starts the buy flow and must input amount of ADA to buy + * + * @param options Amplitude event options. + */ + Ampli.prototype.buyAdaInputAmount = function (options) { + return this.track(new BuyAdaInputAmount(), options); + }; + /** + * Buy Ada Success Redirect + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Buy%20Ada%20Success%20Redirect) + * + * This event tracks when a user is redirected to Yoroi after successfully buying ADA + * + * @param options Amplitude event options. + */ + Ampli.prototype.buyAdaSuccessRedirect = function (options) { + return this.track(new BuyAdaSuccessRedirect(), options); + }; /** * Claim ADA Page Viewed * @@ -702,6 +844,81 @@ var Ampli = /** @class */ (function () { Ampli.prototype.claimAdaPageViewed = function (options) { return this.track(new ClaimAdaPageViewed(), options); }; + /** + * Claim Ada Transaction Settled + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Claim%20Ada%20Transaction%20Settled) + * + * Event to track when a user successfully claims ADA and transaction is settled on chain + * + * @param properties The event's properties (e.g. reward_amount) + * @param options Amplitude event options. + */ + Ampli.prototype.claimAdaTransactionSettled = function (properties, options) { + return this.track(new ClaimAdaTransactionSettled(properties), options); + }; + /** + * Claim Ada Transaction Submitted + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Claim%20Ada%20Transaction%20Submitted) + * + * This Event to track when a user submits a transaction to claim ADA. + * + * @param properties The event's properties (e.g. reward_amount) + * @param options Amplitude event options. + */ + Ampli.prototype.claimAdaTransactionSubmitted = function (properties, options) { + return this.track(new ClaimAdaTransactionSubmitted(properties), options); + }; + /** + * Connect Wallet Check Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Check%20Page%20Viewed) + * + * This event tracks when user chooses the connect hardware wallet option. This is the 1st step of the connect hardware wallet flow. In this page, the information about connecting a harware wallet is displayed to the user. + * + * @param options Amplitude event options. + */ + Ampli.prototype.connectWalletCheckPageViewed = function (options) { + return this.track(new ConnectWalletCheckPageViewed(), options); + }; + /** + * Connect Wallet Connect Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Connect%20Page%20Viewed) + * + * This event tracks when user connects the device and instructions are displayed. This is the 2nd step of the flow. + * + * @param options Amplitude event options. + */ + Ampli.prototype.connectWalletConnectPageViewed = function (options) { + return this.track(new ConnectWalletConnectPageViewed(), options); + }; + /** + * Connect Wallet Details Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Details%20Page%20Viewed) + * + * This event tracks when user accesses the enter wallet name page. This is the 3rd and final step of the flow + * + * @param options Amplitude event options. + */ + Ampli.prototype.connectWalletDetailsPageViewed = function (options) { + return this.track(new ConnectWalletDetailsPageViewed(), options); + }; + /** + * Connect Wallet Details Submitted + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Details%20Submitted) + * + * This event captures the submission of the wallet name on the last step of the connecting a hardware wallet flow. + * + * @param properties The event's properties (e.g. hardware_wallet) + * @param options Amplitude event options. + */ + Ampli.prototype.connectWalletDetailsSubmitted = function (properties, options) { + return this.track(new ConnectWalletDetailsSubmitted(properties), options); + }; /** * Connector Page Viewed * @@ -1054,6 +1271,18 @@ var Ampli = /** @class */ (function () { Ampli.prototype.nftGallerySearchActivated = function (properties, options) { return this.track(new NftGallerySearchActivated(properties), options); }; + /** + * Onboarding Analytics Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Onboarding%20Analytics%20Page%20Viewed) + * + * Event to track when a user views the onboarding analytics page. + * + * @param options Amplitude event options. + */ + Ampli.prototype.onboardingAnalyticsPageViewed = function (options) { + return this.track(new OnboardingAnalyticsPageViewed(), options); + }; /** * Portfolio Token Details * @@ -1245,6 +1474,30 @@ var Ampli = /** @class */ (function () { Ampli.prototype.restoreWalletTypeStepViewed = function (options) { return this.track(new RestoreWalletTypeStepViewed(), options); }; + /** + * Sell Ada Input Amount + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Sell%20Ada%20Input%20Amount) + * + * Event to track when user starts the Sell ada flow so after selecting the sell option and having to input amount of ADA to sell + * + * @param options Amplitude event options. + */ + Ampli.prototype.sellAdaInputAmount = function (options) { + return this.track(new SellAdaInputAmount(), options); + }; + /** + * Sell Ada Success Redirect + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Sell%20Ada%20Success%20Redirect) + * + * This event tracks when a user is redirected to Yoroi after successfully selling ADA + * + * @param options Amplitude event options. + */ + Ampli.prototype.sellAdaSuccessRedirect = function (options) { + return this.track(new SellAdaSuccessRedirect(), options); + }; /** * Send Initiated * @@ -1318,7 +1571,7 @@ var Ampli = /** @class */ (function () { * * When a user click "send" on the "Preview" step on the send flow. * - * @param properties The event's properties (e.g. asset_count) + * @param properties The event's properties (e.g. ada_amount) * @param options Amplitude event options. */ Ampli.prototype.sendSummarySubmitted = function (properties, options) { @@ -1336,6 +1589,18 @@ var Ampli = /** @class */ (function () { Ampli.prototype.settingsPageViewed = function (options) { return this.track(new SettingsPageViewed(), options); }; + /** + * Staking Center Delegation Initiated + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Staking%20Center%20Delegation%20Initiated) + * + * Event to track when a user initiates the delegation process in the Staking Center, accessing the delegate modal after selecting a pool + * + * @param options Amplitude event options. + */ + Ampli.prototype.stakingCenterDelegationInitiated = function (options) { + return this.track(new StakingCenterDelegationInitiated(), options); + }; /** * Staking Center Page Viewed * @@ -1482,6 +1747,19 @@ var Ampli = /** @class */ (function () { Ampli.prototype.swapSlippageChanged = function (properties, options) { return this.track(new SwapSlippageChanged(properties), options); }; + /** + * Theme Selected + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Theme%20Selected) + * + * This event is triggrered when a user had selected a theme. + * + * @param properties The event's properties (e.g. theme) + * @param options Amplitude event options. + */ + Ampli.prototype.themeSelected = function (properties, options) { + return this.track(new ThemeSelected(properties), options); + }; /** * Transactions Page Viewed * diff --git a/packages/yoroi-extension/ampli/index.js.flow b/packages/yoroi-extension/ampli/index.js.flow index b61142f11e..caa25b0afb 100644 --- a/packages/yoroi-extension/ampli/index.js.flow +++ b/packages/yoroi-extension/ampli/index.js.flow @@ -46,6 +46,32 @@ export type LoadOptions = | LoadOptionsWithEnvironment | LoadOptionsWithApiKey | LoadOptionsWithClientInstance; +export type ClaimAdaTransactionSettledProperties = {| + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + reward_amount: number, +|}; +export type ClaimAdaTransactionSubmittedProperties = {| + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + reward_amount: number, +|}; +export type ConnectWalletDetailsSubmittedProperties = {| + /** + * The name of the hardware wallet. + * + * | Rule | Value | + * |---|---| + * | Enum Values | Ledger, Trezor | + */ + hardware_wallet: "Ledger" | "Trezor", +|}; export type CreateWalletVerifyPhraseWordSelectedProperties = {| recovery_word_order?: any, |}; @@ -182,7 +208,7 @@ export type ReceiveAmountGeneratedPageViewedProperties = {| * |---|---| * | Type | number | */ - ada_amount: number, + ada_amount?: number, |}; export type ReceiveCopyAddressClickedProperties = {| /** @@ -328,6 +354,15 @@ export type SendSummaryPageViewedProperties = {| tokens?: any[], |}; export type SendSummarySubmittedProperties = {| + /** + * The amount of ADA that the user will be exchanging. + * + * | Rule | Value | + * |---|---| + * | Type | number | + */ + ada_amount?: number, + /** * | Rule | Value | * |---|---| @@ -335,6 +370,14 @@ export type SendSummarySubmittedProperties = {| */ asset_count: number, + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + nft_amount?: number, + nft_name?: string, + /** * ``` * nfts: [ @@ -350,6 +393,14 @@ export type SendSummarySubmittedProperties = {| */ nfts?: any[], + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + token_amount?: number, + token_name?: string, + /** * ``` * Tokens: [ @@ -526,6 +577,13 @@ export type SwapOrderSelectedProperties = {| */ from_asset: any[], + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + from_asset_fiat_value?: number, + /** * The type of order selected on a given transaction * @@ -558,6 +616,11 @@ export type SwapOrderSelectedProperties = {| */ swap_fees?: number, + /** + * Cryptocurrency pairs being swapped (e.g., ADA to SNEK {ADA/SNEK}). + */ + swap_pair?: string, + /** * The amount of asset that the user is swapping to */ @@ -571,6 +634,13 @@ export type SwapOrderSelectedProperties = {| * Policy ID */ to_asset: any[], + + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + to_asset_fiat_value?: number, |}; export type SwapOrderSubmittedProperties = {| /** @@ -592,6 +662,13 @@ export type SwapOrderSubmittedProperties = {| */ from_asset: any[], + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + from_asset_fiat_value?: number, + /** * The type of order selected on a given transaction * @@ -624,6 +701,11 @@ export type SwapOrderSubmittedProperties = {| */ swap_fees?: number, + /** + * Cryptocurrency pairs being swapped (e.g., ADA to SNEK {ADA/SNEK}). + */ + swap_pair?: string, + /** * The amount of asset that the user is swapping to */ @@ -637,6 +719,13 @@ export type SwapOrderSubmittedProperties = {| * Policy ID */ to_asset: any[], + + /** + * | Rule | Value | + * |---|---| + * | Type | number | + */ + to_asset_fiat_value?: number, |}; export type SwapSlippageChangedProperties = {| /** @@ -648,6 +737,16 @@ export type SwapSlippageChangedProperties = {| */ slippage_tolerance: number, |}; +export type ThemeSelectedProperties = {| + /** + * The theme that is selected. + * + * | Rule | Value | + * |---|---| + * | Enum Values | auto, light, dark | + */ + theme: "auto" | "light" | "dark", +|}; export type SendProperties = {| /** * Total numbers of assets to be send @@ -755,15 +854,48 @@ export type SwapProperties = {| */ to_asset: any[], |}; +declare export class ToDeleteGovernanceAbstainPageViewed mixins BaseEvent { + event_type: string; +} declare export class AllWalletsPageViewed mixins BaseEvent { event_type: string; } declare export class AssetsPageViewed mixins BaseEvent { event_type: string; } +declare export class BuyAdaInputAmount mixins BaseEvent { + event_type: string; +} +declare export class BuyAdaSuccessRedirect mixins BaseEvent { + event_type: string; +} declare export class ClaimAdaPageViewed mixins BaseEvent { event_type: string; } +declare export class ClaimAdaTransactionSettled mixins BaseEvent { + event_properties: ClaimAdaTransactionSettledProperties; + event_type: string; + constructor(event_properties: ClaimAdaTransactionSettledProperties): this; +} +declare export class ClaimAdaTransactionSubmitted mixins BaseEvent { + event_properties: ClaimAdaTransactionSubmittedProperties; + event_type: string; + constructor(event_properties: ClaimAdaTransactionSubmittedProperties): this; +} +declare export class ConnectWalletCheckPageViewed mixins BaseEvent { + event_type: string; +} +declare export class ConnectWalletConnectPageViewed mixins BaseEvent { + event_type: string; +} +declare export class ConnectWalletDetailsPageViewed mixins BaseEvent { + event_type: string; +} +declare export class ConnectWalletDetailsSubmitted mixins BaseEvent { + event_properties: ConnectWalletDetailsSubmittedProperties; + event_type: string; + constructor(event_properties: ConnectWalletDetailsSubmittedProperties): this; +} declare export class ConnectorPageViewed mixins BaseEvent { event_type: string; } @@ -876,6 +1008,9 @@ declare export class NftGallerySearchActivated mixins BaseEvent { event_type: string; constructor(event_properties: NftGallerySearchActivatedProperties): this; } +declare export class OnboardingAnalyticsPageViewed mixins BaseEvent { + event_type: string; +} declare export class PortfolioTokenDetails mixins BaseEvent { event_properties: PortfolioTokenDetailsProperties; event_type: string; @@ -894,10 +1029,10 @@ declare export class PortfolioTokensListSearchActivated mixins BaseEvent { ): this; } declare export class ReceiveAmountGeneratedPageViewed mixins BaseEvent { - event_properties: ReceiveAmountGeneratedPageViewedProperties; + event_properties?: ReceiveAmountGeneratedPageViewedProperties; event_type: string; constructor( - event_properties: ReceiveAmountGeneratedPageViewedProperties + event_properties?: ReceiveAmountGeneratedPageViewedProperties ): this; } declare export class ReceiveAmountPageViewed mixins BaseEvent { @@ -943,6 +1078,12 @@ declare export class RestoreWalletEnterPhraseStepViewed mixins BaseEvent { declare export class RestoreWalletTypeStepViewed mixins BaseEvent { event_type: string; } +declare export class SellAdaInputAmount mixins BaseEvent { + event_type: string; +} +declare export class SellAdaSuccessRedirect mixins BaseEvent { + event_type: string; +} declare export class SendInitiated mixins BaseEvent { event_type: string; } @@ -972,6 +1113,9 @@ declare export class SendSummarySubmitted mixins BaseEvent { declare export class SettingsPageViewed mixins BaseEvent { event_type: string; } +declare export class StakingCenterDelegationInitiated mixins BaseEvent { + event_type: string; +} declare export class StakingCenterPageViewed mixins BaseEvent { event_type: string; } @@ -1018,6 +1162,11 @@ declare export class SwapSlippageChanged mixins BaseEvent { event_type: string; constructor(event_properties: SwapSlippageChangedProperties): this; } +declare export class ThemeSelected mixins BaseEvent { + event_properties: ThemeSelectedProperties; + event_type: string; + constructor(event_properties: ThemeSelectedProperties): this; +} declare export class TransactionsPageViewed mixins BaseEvent { event_type: string; } @@ -1062,6 +1211,18 @@ declare export class Ampli { */ track(event: Event, options?: EventOptions): PromiseResult; + /** + * (to delete)Governance Abstain Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/(to%20delete)Governance%20Abstain%20Page%20Viewed) + * + * This event tracks when a user selects abstain governance status and the confirm transaction page is displayed + * @param options Amplitude event options. + */ + toDeleteGovernanceAbstainPageViewed( + options?: EventOptions + ): PromiseResult; + /** * All Wallets Page Viewed * @@ -1087,6 +1248,30 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Buy Ada Input Amount + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Buy%20Ada%20Input%20Amount) + * + * Event to track when a user starts the buy flow and must input amount of ADA to buy + * @param options Amplitude event options. + */ + buyAdaInputAmount( + options?: EventOptions + ): PromiseResult; + + /** + * Buy Ada Success Redirect + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Buy%20Ada%20Success%20Redirect) + * + * This event tracks when a user is redirected to Yoroi after successfully buying ADA + * @param options Amplitude event options. + */ + buyAdaSuccessRedirect( + options?: EventOptions + ): PromiseResult; + /** * Claim ADA Page Viewed * @@ -1101,6 +1286,84 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Claim Ada Transaction Settled + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Claim%20Ada%20Transaction%20Settled) + * + * Event to track when a user successfully claims ADA and transaction is settled on chain + * @param properties The event's properties (e.g. reward_amount) + * @param options Amplitude event options. + */ + claimAdaTransactionSettled( + properties: ClaimAdaTransactionSettledProperties, + options?: EventOptions + ): PromiseResult; + + /** + * Claim Ada Transaction Submitted + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Claim%20Ada%20Transaction%20Submitted) + * + * This Event to track when a user submits a transaction to claim ADA. + * @param properties The event's properties (e.g. reward_amount) + * @param options Amplitude event options. + */ + claimAdaTransactionSubmitted( + properties: ClaimAdaTransactionSubmittedProperties, + options?: EventOptions + ): PromiseResult; + + /** + * Connect Wallet Check Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Check%20Page%20Viewed) + * + * This event tracks when user chooses the connect hardware wallet option. This is the 1st step of the connect hardware wallet flow. In this page, the information about connecting a harware wallet is displayed to the user. + * @param options Amplitude event options. + */ + connectWalletCheckPageViewed( + options?: EventOptions + ): PromiseResult; + + /** + * Connect Wallet Connect Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Connect%20Page%20Viewed) + * + * This event tracks when user connects the device and instructions are displayed. This is the 2nd step of the flow. + * @param options Amplitude event options. + */ + connectWalletConnectPageViewed( + options?: EventOptions + ): PromiseResult; + + /** + * Connect Wallet Details Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Details%20Page%20Viewed) + * + * This event tracks when user accesses the enter wallet name page. This is the 3rd and final step of the flow + * @param options Amplitude event options. + */ + connectWalletDetailsPageViewed( + options?: EventOptions + ): PromiseResult; + + /** + * Connect Wallet Details Submitted + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Connect%20Wallet%20Details%20Submitted) + * + * This event captures the submission of the wallet name on the last step of the connecting a hardware wallet flow. + * @param properties The event's properties (e.g. hardware_wallet) + * @param options Amplitude event options. + */ + connectWalletDetailsSubmitted( + properties: ConnectWalletDetailsSubmittedProperties, + options?: EventOptions + ): PromiseResult; + /** * Connector Page Viewed * @@ -1463,6 +1726,18 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Onboarding Analytics Page Viewed + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Onboarding%20Analytics%20Page%20Viewed) + * + * Event to track when a user views the onboarding analytics page. + * @param options Amplitude event options. + */ + onboardingAnalyticsPageViewed( + options?: EventOptions + ): PromiseResult; + /** * Portfolio Token Details * @@ -1515,7 +1790,7 @@ declare export class Ampli { * @param options Amplitude event options. */ receiveAmountGeneratedPageViewed( - properties: ReceiveAmountGeneratedPageViewedProperties, + properties?: ReceiveAmountGeneratedPageViewedProperties, options?: EventOptions ): PromiseResult; @@ -1661,6 +1936,30 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Sell Ada Input Amount + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Sell%20Ada%20Input%20Amount) + * + * Event to track when user starts the Sell ada flow so after selecting the sell option and having to input amount of ADA to sell + * @param options Amplitude event options. + */ + sellAdaInputAmount( + options?: EventOptions + ): PromiseResult; + + /** + * Sell Ada Success Redirect + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Sell%20Ada%20Success%20Redirect) + * + * This event tracks when a user is redirected to Yoroi after successfully selling ADA + * @param options Amplitude event options. + */ + sellAdaSuccessRedirect( + options?: EventOptions + ): PromiseResult; + /** * Send Initiated * @@ -1734,7 +2033,7 @@ declare export class Ampli { * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Send%20Summary%20Submitted) * * When a user click "send" on the "Preview" step on the send flow. - * @param properties The event's properties (e.g. asset_count) + * @param properties The event's properties (e.g. ada_amount) * @param options Amplitude event options. */ sendSummarySubmitted( @@ -1754,6 +2053,18 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Staking Center Delegation Initiated + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Staking%20Center%20Delegation%20Initiated) + * + * Event to track when a user initiates the delegation process in the Staking Center, accessing the delegate modal after selecting a pool + * @param options Amplitude event options. + */ + stakingCenterDelegationInitiated( + options?: EventOptions + ): PromiseResult; + /** * Staking Center Page Viewed * @@ -1908,6 +2219,20 @@ declare export class Ampli { options?: EventOptions ): PromiseResult; + /** + * Theme Selected + * + * [View in Tracking Plan](https://data.amplitude.com/emurgo/Yoroi/events/main/latest/Theme%20Selected) + * + * This event is triggrered when a user had selected a theme. + * @param properties The event's properties (e.g. theme) + * @param options Amplitude event options. + */ + themeSelected( + properties: ThemeSelectedProperties, + options?: EventOptions + ): PromiseResult; + /** * Transactions Page Viewed * diff --git a/packages/yoroi-extension/app/App.js b/packages/yoroi-extension/app/App.js index 838d6a2c45..a055e2ff9d 100644 --- a/packages/yoroi-extension/app/App.js +++ b/packages/yoroi-extension/app/App.js @@ -2,7 +2,6 @@ import type { Node } from 'react'; import type { RouterHistory } from 'react-router-dom'; import type { StoresMap } from './stores'; -import type { ActionsMap } from './actions'; import { Component } from 'react'; import { observer } from 'mobx-react'; import { Router } from 'react-router-dom'; @@ -26,7 +25,6 @@ addLocaleData(locales); type Props = {| +stores: StoresMap, - +actions: ActionsMap, +history: RouterHistory, |}; type State = {| @@ -102,18 +100,18 @@ class App extends Component { } getContent: void => ?Node = () => { - const { stores, actions, history } = this.props; + const { stores, history } = this.props; if (this.state.crashed === true) { return ; } if (stores.serverConnectionStore.isMaintenance) { - return ; + return ; } return (
- {Routes(stores, actions)} + {Routes(stores)}
); diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 61cd88e7c7..0f2f5c2df4 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -4,15 +4,13 @@ import type { Node } from 'react'; import React, { Suspense } from 'react'; import { Redirect, Route, Switch } from 'react-router-dom'; import type { ConfigType } from '../config/config-types'; -import type { ActionsMap } from './actions/index'; import ConnectedWebsitesPage, { ConnectedWebsitesPagePromise } from './containers/dapp-connector/ConnectedWebsitesContainer'; import Transfer, { WalletTransferPagePromise } from './containers/transfer/Transfer'; import AddWalletPage from './containers/wallet/AddWalletPage'; import StakingPage, { StakingPageContentPromise } from './containers/wallet/staking/StakingPage'; import VotingPage, { VotingPageContentPromise } from './containers/wallet/voting/VotingPage'; import { ROUTES } from './routes-config'; -import type { StoresMap } from './stores/index'; -import type { StoresAndActionsProps } from './types/injectedProps.types'; +import type { StoresMap, StoresProps } from './stores/index'; // Todo: Add lazy loading import { Stack } from '@mui/material'; import { QueryClient, QueryClientProvider } from 'react-query'; @@ -28,10 +26,14 @@ import NFTsWrapper from './containers/wallet/NFTsWrapper'; import Wallet from './containers/wallet/Wallet'; import RestoreWalletPage, { RestoreWalletPagePromise } from './containers/wallet/restore/RestoreWalletPage'; +// GOLABL Context +// $FlowIgnore: suppressing this error +import { CurrencyProvider } from './UI/context/CurrencyContext'; + import PagePreparation from './components/page-preparation/PagePreparation'; // New UI pages // $FlowIgnore: suppressing this error -import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; +import { createCurrrentWalletInfo } from './UI/utils/createCurrentWalletInfo'; // $FlowIgnore: suppressing this error import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; // $FlowIgnore: suppressing this error @@ -51,6 +53,7 @@ import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; // $FlowIgnore: suppressing this error import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; import BuySellDialog from './components/buySell/BuySellDialog'; +import { ampli } from '../ampli/index'; // $FlowIgnore: suppressing this error // PAGES @@ -186,121 +189,120 @@ export const LazyLoadPromises: Array<() => any> = [ // populated by ConfigWebpackPlugin declare var CONFIG: ConfigType; -export const Routes = (stores: StoresMap, actions: ActionsMap): Node => { +export const Routes = (stores: StoresMap): Node => { const queryClient = new QueryClient(); - return ( - } /> + } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> - } /> + } /> wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions))} + component={props => wrapAssets({ ...props, stores }, AssetsSubpages(stores))} /> wrapNFTs({ ...props, stores, actions }, NFTsSubPages(stores, actions))} + component={props => wrapNFTs({ ...props, stores }, NFTsSubPages(stores))} /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> wrapWallet({ ...props, stores, actions }, WalletsSubpages(stores, actions))} + component={props => wrapWallet({ ...props, stores }, WalletsSubpages(stores))} /> wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions))} + component={props => wrapSettings({ ...props, stores }, SettingsSubpages(stores))} /> wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions))} + component={props => wrapSwap({ ...props, stores }, SwapSubpages(stores))} /> - } /> + } /> } + component={props => } /> } + component={props => } /> - } /> + } /> } + component={props => } /> } + component={props => } /> {/* NEW UI Routes */} wrapGovernance({ ...props, stores, actions }, GovernanceSubpages(stores, actions))} + component={props => wrapGovernance({ ...props, stores }, GovernanceSubpages(stores))} /> wrapPortfolio({ ...props, stores, actions }, PortfolioSubpages(stores, actions))} + component={props => wrapPortfolio({ ...props, stores }, PortfolioSubpages(stores))} /> @@ -310,178 +312,179 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => { ); }; -const WalletsSubpages = (stores, actions) => ( +const WalletsSubpages = (stores) => ( } + component={props => } /> } + component={props => } /> - } /> + } /> - wrapReceive({ ...props, stores, actions }, ) + wrapReceive({ ...props, stores }, ) } /> } + component={props => } /> ( - + )} /> } + component={props => } /> } + component={props => } /> ); -const SwapSubpages = (stores, actions) => ( +const SwapSubpages = (stores) => ( - } /> - } /> - } /> + } /> + } /> + } /> ); -const SettingsSubpages = (stores, actions) => ( +const SettingsSubpages = (stores) => ( } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> ); -const PortfolioSubpages = (stores, actions) => ( +const PortfolioSubpages = (stores) => ( } + component={props => } /> } + component={props => } /> } + component={props => } /> ); -const NFTsSubPages = (stores, actions) => ( +const NFTsSubPages = (stores) => ( - } /> + } /> } + component={props => } /> ); -const AssetsSubpages = (stores, actions) => ( +const AssetsSubpages = (stores) => ( } + component={props => } /> } + component={props => } /> ); -const GovernanceSubpages = (stores, actions) => ( +const GovernanceSubpages = (stores) => ( } + component={props => } /> } + component={props => } /> } + component={props => } /> } + component={props => } /> ); -export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node { +export function wrapSwap(swapProps: StoresProps, children: Node): Node { // const queryClient = new QueryClient(); + const loader = ( @@ -500,7 +503,7 @@ export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node ); } -export function wrapSettings(settingsProps: StoresAndActionsProps, children: Node): Node { +export function wrapSettings(settingsProps: StoresProps, children: Node): Node { return ( {children} @@ -508,7 +511,7 @@ export function wrapSettings(settingsProps: StoresAndActionsProps, children: Nod ); } -export function wrapAssets(assetsProps: StoresAndActionsProps, children: Node): Node { +export function wrapAssets(assetsProps: StoresProps, children: Node): Node { return ( {children} @@ -516,7 +519,7 @@ export function wrapAssets(assetsProps: StoresAndActionsProps, children: Node): ); } -export function wrapNFTs(assetsProps: StoresAndActionsProps, children: Node): Node { +export function wrapNFTs(assetsProps: StoresProps, children: Node): Node { return ( {children} @@ -524,7 +527,7 @@ export function wrapNFTs(assetsProps: StoresAndActionsProps, children: Node): No ); } -export function wrapWallet(walletProps: StoresAndActionsProps, children: Node): Node { +export function wrapWallet(walletProps: StoresProps, children: Node): Node { return ( {children} @@ -532,36 +535,51 @@ export function wrapWallet(walletProps: StoresAndActionsProps, children: Node): ); } -export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node): Node { +export function wrapReceive(receiveProps: StoresProps, children: Node): Node { return {children}; } // NEW UI - TODO: to be refactred -export function wrapGovernance(governanceProps: StoresAndActionsProps, children: Node): Node { - const currentWalletInfo = createCurrrentWalletInfo(governanceProps.stores); - - const { delegationTransaction } = governanceProps.stores.substores.ada; +export function wrapGovernance(governanceProps: StoresProps, children: Node): Node { + const { stores } = governanceProps; + const currentWalletInfo = createCurrrentWalletInfo(stores); + const { delegationTransaction } = stores.substores.ada; const delegationTxResult = delegationTransaction.createDelegationTx.result; const delegationTxError = delegationTransaction.createDelegationTx.error; - return ( stores.delegation.createDrepDelegationTransaction(request)} + signDelegationTransaction={request => stores.substores.ada.delegationTransaction.signTransaction(request)} txDelegationResult={delegationTxResult} txDelegationError={delegationTxError} - tokenInfo={governanceProps.stores.tokenInfoStore.tokenInfo} - triggerBuySellAdaDialog={() => governanceProps.actions.dialogs.open.trigger({ dialog: BuySellDialog })} + tokenInfo={stores.tokenInfoStore.tokenInfo} + triggerBuySellAdaDialog={() => stores.uiDialogs.open({ dialog: BuySellDialog })} + getCurrentPrice={governanceProps.stores.coinPriceStore.getCurrentPrice} + ampli={ampli} > {children}; ); } -export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { +export function wrapPortfolio(portfolioProps: StoresProps, children: Node): Node { + const currentWalletInfo = createCurrrentWalletInfo(portfolioProps.stores); + + const openDialogWrapper = (dialog): void => { + portfolioProps.stores.uiDialogs.open({ dialog }); + }; + return ( - - {children} - + + + + {children} + + + ); } diff --git a/packages/yoroi-extension/app/UI/components/BackButton.tsx b/packages/yoroi-extension/app/UI/components/BackButton.tsx new file mode 100644 index 0000000000..7f50212dbb --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/BackButton.tsx @@ -0,0 +1,26 @@ +import { Button, Typography } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import React from 'react'; +import { ReactComponent as BackIcon } from '../../assets/images/assets-page/back-arrow.inline.svg'; + +const SButton = styled(Button)(({ theme }: any) => ({ + color: theme.palette.ds.el_gray_medium, + '&.MuiButton-sizeMedium': { + padding: '13px 16px', + }, + '& svg': { + '& path': { + fill: theme.palette.ds.el_gray_medium, + }, + }, +})); + +export const BackButton = ({ label, onAction }: { label: string; onAction: () => void }) => { + return ( + }> + + {label} + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.tsx b/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.tsx index f587de6765..0d635d7d0c 100644 --- a/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.tsx +++ b/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.tsx @@ -38,17 +38,18 @@ const AccordionDetails = styled(MuiAccordionDetails)(({ theme }: any) => ({ type Props = { title: string; content: React.ReactNode; + expanded?: boolean, }; -export const Collapsible = ({ title, content }: Props) => { - const [expanded, setExpanded] = React.useState('none'); +export const Collapsible = ({ title, content, expanded: startExpanded }: Props) => { + const [expanded, setExpanded] = React.useState(startExpanded ?? false); - const handleChange = (panel: string | false) => (_: React.SyntheticEvent, newExpanded: boolean) => { - setExpanded(newExpanded ? panel : false); + const handleChange = (_: React.SyntheticEvent, newExpanded: boolean) => { + setExpanded(newExpanded); }; return ( - + ({ - borderRadius: `${theme.shape.borderRadius}px`, +const StyledInput = styled(OutlinedInput)(({ theme }: any) => ({ width: '320px', height: '40px', - padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, - border: '1px solid', - borderColor: theme.palette.ds.gray_400, - 'input::placeholder': { - color: theme.palette.ds.gray_600, + padding: '8px', + '& svg': { + '& path': { + fill: theme.palette.ds.el_gray_low, + }, + }, + '& input::placeholder': { + color: theme.palette.ds.el_gray_low, + opacity: 1, }, })); diff --git a/packages/yoroi-extension/app/UI/components/Tooltip.tsx b/packages/yoroi-extension/app/UI/components/Tooltip.tsx index 52ca32d315..be68793d3b 100644 --- a/packages/yoroi-extension/app/UI/components/Tooltip.tsx +++ b/packages/yoroi-extension/app/UI/components/Tooltip.tsx @@ -1,6 +1,6 @@ -import React from 'react'; -import { default as MuiTooltip, TooltipProps } from '@mui/material/Tooltip'; import { useTheme } from '@mui/material'; +import { default as MuiTooltip, TooltipProps } from '@mui/material/Tooltip'; +import React from 'react'; interface Props extends TooltipProps { children: JSX.Element; @@ -17,8 +17,8 @@ export const Tooltip = ({ children, title, ...props }: Props): JSX.Element => { componentsProps={{ tooltip: { sx: { - color: theme.palette.ds.text_primary_on, - bgcolor: theme.palette.ds.gray_900, + color: theme.palette.ds.text_gray_medium, + bgcolor: theme.palette.ds.bg_color_min, borderRadius: `${theme.shape.borderRadius / 2}px`, padding: '5px 12px', }, diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx index f40ab28149..01884d3619 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx @@ -4,9 +4,12 @@ import { FormattedMessage } from 'react-intl'; import globalMessages from '../../../i18n/global-messages'; import { useNavigateTo } from '../../features/governace/common/useNavigateTo'; import { FailedIlustration } from './FailedIlustration'; +import LocalizableError from '../../../i18n/LocalizableError'; -export const TransactionFailed = () => { +export const TransactionFailed = (props: { error: Error | null }) => { const navigate = useNavigateTo(); + const { error } = props; + return ( @@ -14,7 +17,9 @@ export const TransactionFailed = () => { - + {/* @ts-ignore */} @@ -102,10 +96,7 @@ export default class WalletInfo extends Component { if (request.shouldHideBalance) { balanceDisplay = {hiddenAmount}; } else { - const [beforeDecimalRewards, afterDecimalRewards] = splitAmount( - shiftedAmount, - tokenInfo.Metadata.numberOfDecimals - ); + const [beforeDecimalRewards, afterDecimalRewards] = splitAmount(shiftedAmount, tokenInfo.Metadata.numberOfDecimals); balanceDisplay = ( <> @@ -131,8 +122,16 @@ export default class WalletInfo extends Component { const truncatedName = truncateLongName(walletName); return ( - {walletName}}> - {truncatedName} + + {walletName} + + } + > + + {truncatedName} + ); }; diff --git a/packages/yoroi-extension/app/components/common/walletInfo/WalletInfo.scss b/packages/yoroi-extension/app/components/common/walletInfo/WalletInfo.scss index 85ffe01693..01a53ad5d2 100644 --- a/packages/yoroi-extension/app/components/common/walletInfo/WalletInfo.scss +++ b/packages/yoroi-extension/app/components/common/walletInfo/WalletInfo.scss @@ -28,7 +28,6 @@ font-weight: 500; font-size: 14px; line-height: 22px; - color: var(--yoroi-palette-gray-900); margin-right: 4px; display: flex; align-items: center; @@ -40,7 +39,6 @@ } .plate { - color: var(--yoroi-palette-gray-600); font-weight: 400; font-size: 12px; line-height: 20px; @@ -64,7 +62,6 @@ font-weight: 500; font-size: 14px; line-height: 22px; - color: var(--yoroi-palette-gray-900); .isLoading { margin-left: 9px; diff --git a/packages/yoroi-extension/app/components/dapp-connector/ConnectedWebsites/WalletRowRevamp.js b/packages/yoroi-extension/app/components/dapp-connector/ConnectedWebsites/WalletRowRevamp.js index f6d42556f5..120d0753c8 100644 --- a/packages/yoroi-extension/app/components/dapp-connector/ConnectedWebsites/WalletRowRevamp.js +++ b/packages/yoroi-extension/app/components/dapp-connector/ConnectedWebsites/WalletRowRevamp.js @@ -13,7 +13,7 @@ import { ReactComponent as NoDappImage } from '../../../assets/images/dapp-conne import { intlShape } from 'react-intl'; import { splitAmount, truncateToken } from '../../../utils/formatters'; import { Box, Typography, styled } from '@mui/material'; -import { constructPlate } from '../../topbar/NavPlate'; +import { constructPlate40 } from '../../topbar/WalletCard'; import styles from './WalletRow.scss'; type Props = {| @@ -95,7 +95,7 @@ export default class WalletRowRevamp extends Component { } = this.props; const { showDeleteIcon } = this.state; - const [, plateIcon] = constructPlate(plate, 0, ''); + const [, plateIcon] = constructPlate40(plate); return ( { id={id} > - - {plateIcon} - + {plateIcon}
{walletName} diff --git a/packages/yoroi-extension/app/components/layout/CenteredLayout.js b/packages/yoroi-extension/app/components/layout/CenteredLayout.js index bdace96563..046a9bd7f5 100644 --- a/packages/yoroi-extension/app/components/layout/CenteredLayout.js +++ b/packages/yoroi-extension/app/components/layout/CenteredLayout.js @@ -14,7 +14,7 @@ function CenteredLayout({ children }: Props): Node { display: 'flex', alignItems: 'center', justifyContent: 'space-between', - backgroundColor: 'var(--yoroi-loading-background-color)', + backgroundColor: 'ds.bg_color_max', height: '100%', }} > diff --git a/packages/yoroi-extension/app/components/layout/HorizintallyCenteredLayout.js b/packages/yoroi-extension/app/components/layout/HorizintallyCenteredLayout.js new file mode 100644 index 0000000000..6ba97af118 --- /dev/null +++ b/packages/yoroi-extension/app/components/layout/HorizintallyCenteredLayout.js @@ -0,0 +1,24 @@ +// @flow +import type { Node, ComponentType } from 'react'; +import { observer } from 'mobx-react'; +import { Box } from '@mui/system'; + +type Props = {| + +children: Node, +|}; + +function HorizontallyCenteredLayout({ children }: Props): Node { + return ( + + {children} + + ); +} +export default (observer(HorizontallyCenteredLayout): ComponentType); diff --git a/packages/yoroi-extension/app/components/layout/TopBarLayout.js b/packages/yoroi-extension/app/components/layout/TopBarLayout.js index 04a3beeeee..fb27dc2b24 100644 --- a/packages/yoroi-extension/app/components/layout/TopBarLayout.js +++ b/packages/yoroi-extension/app/components/layout/TopBarLayout.js @@ -15,6 +15,7 @@ type Props = {| +showInContainer?: boolean, +withPadding?: boolean, // default: true +bgcolor?: string, + +isErrorPage?: boolean, |}; /** Adds a top bar above the wrapped node */ @@ -29,6 +30,7 @@ function TopBarLayout({ showInContainer, withPadding, bgcolor, + isErrorPage, }: Props) { const getContentUnderBanner: void => Node = () => { const topbarComponent = {topbar}; @@ -58,14 +60,14 @@ function TopBarLayout({ flex: '0 1 auto', height: '100%', }), - overflow: 'auto', + overflow: 'scroll', }} > {( { +export default class PagePreparation extends Component { static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { intl: intlShape.isRequired, }; @@ -56,7 +56,7 @@ export default class PagePreparation extends Component {
@@ -179,6 +239,7 @@ export default class OptForAnalyticsForm extends Component { variant="primary" onClick={() => this.onOpt(true)} loading={this.state.isSubmitting} + id="startupAnalytics-accept-button" > {intl.formatMessage(messages.accept)} @@ -187,6 +248,7 @@ export default class OptForAnalyticsForm extends Component { )}
+ ); } } diff --git a/packages/yoroi-extension/app/components/profile/terms-of-use/OptForAnalyticsForm.scss b/packages/yoroi-extension/app/components/profile/terms-of-use/OptForAnalyticsForm.scss index b4a15d44a4..5067604cff 100644 --- a/packages/yoroi-extension/app/components/profile/terms-of-use/OptForAnalyticsForm.scss +++ b/packages/yoroi-extension/app/components/profile/terms-of-use/OptForAnalyticsForm.scss @@ -12,11 +12,6 @@ letter-spacing: 0px; } - .learnMore { - color: #4b6dde; - text-decoration: none; - } - .skip { text-align: center; cursor: pointer; diff --git a/packages/yoroi-extension/app/components/profile/uri-prompt/UriPromptForm.js b/packages/yoroi-extension/app/components/profile/uri-prompt/UriPromptForm.js index 09e8574d38..298c9d5b4f 100644 --- a/packages/yoroi-extension/app/components/profile/uri-prompt/UriPromptForm.js +++ b/packages/yoroi-extension/app/components/profile/uri-prompt/UriPromptForm.js @@ -51,6 +51,7 @@ export default class UriPromptForm extends Component { variant="secondary" onClick={this.props.onSkip} sx={{ width: '240px' }} + id='uriPrompt-skip-button' > {intl.formatMessage(globalMessages.skipLabel)} @@ -60,6 +61,7 @@ export default class UriPromptForm extends Component { variant="primary" onClick={this.props.onAccept} sx={{ width: '240px' }} + id='uriPrompt-allow-button' > {intl.formatMessage(globalMessages.allowLabel)} diff --git a/packages/yoroi-extension/app/components/settings/categories/SupportSettings.js b/packages/yoroi-extension/app/components/settings/categories/SupportSettings.js index ca79d80fcf..e11c33198f 100644 --- a/packages/yoroi-extension/app/components/settings/categories/SupportSettings.js +++ b/packages/yoroi-extension/app/components/settings/categories/SupportSettings.js @@ -3,7 +3,7 @@ import { Component } from 'react'; import type { Node } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape, FormattedMessage } from 'react-intl'; -import { Box, Button, Typography } from '@mui/material'; +import { Box, Button, Link, Typography } from '@mui/material'; import globalMessages from '../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; @@ -36,11 +36,20 @@ const messages = defineMessages({ id: 'settings.support.logs.title', defaultMessage: '!!!Logs', }, + paperWallet: { + id: 'settings.support.paperWallet.title', + defaultMessage: '!!!Paper Wallet', + }, + paperWalletTransfer: { + id: 'settings.support.paperWallet.button', + defaultMessage: '!!!Transfer from Paper Wallet', + }, }); type Props = {| +onExternalLinkClick: MouseEvent => void, +onDownloadLogs: void => void, + +onPaperWalletTransfer: void => void, |}; @observer @@ -54,23 +63,23 @@ export default class SupportSettings extends Component { const { intl } = this.context; const faqLink = ( - onExternalLinkClick(event)} id="settings:support-faq-link" > {intl.formatMessage(messages.faqLink)} - + ); const supportRequestLink = ( - onExternalLinkClick(event)} id="settings:support-requestSupport-link" > {intl.formatMessage(messages.supportRequestLink)} - + ); const downloadLogsLink = ( @@ -121,12 +130,6 @@ export default class SupportSettings extends Component { @@ -145,6 +148,21 @@ export default class SupportSettings extends Component { > {intl.formatMessage(globalMessages.downloadLogsButtonLabel)} + + + + {intl.formatMessage(messages.paperWallet)} + + +
); } diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/AboutYoroiSettingsBlock.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/AboutYoroiSettingsBlock.js index 2dc91a7bec..5e1be3172d 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/AboutYoroiSettingsBlock.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/AboutYoroiSettingsBlock.js @@ -151,7 +151,7 @@ export default class AboutYoroiSettingsBlock extends Component { mt: '40px', }} > - + {intl.formatMessage(messages.aboutYoroiLabel)} @@ -216,10 +216,11 @@ function LabelWithValue({ |}): Node { return ( - + {label} - diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/ExplorerSettings.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/ExplorerSettings.js index f900350088..17c3243dfd 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/ExplorerSettings.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/ExplorerSettings.js @@ -4,7 +4,7 @@ import type { Node } from 'react'; import { observer } from 'mobx-react'; import classNames from 'classnames'; import Select from '../../../common/Select'; -import { Box, MenuItem, Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import { defineMessages, intlShape } from 'react-intl'; import ReactToolboxMobxForm from '../../../../utils/ReactToolboxMobxForm'; import LocalizableError from '../../../../i18n/LocalizableError'; @@ -13,6 +13,7 @@ import globalMessages from '../../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import type { ExplorerRow } from '../../../../api/ada/lib/storage/database/explorers/tables'; import { SelectedExplorer } from '../../../../domain/SelectedExplorer'; +import { MenuItemStyled } from '../../../common/commonStyles/MenuItemStyled'; type Props = {| +explorers: $ReadOnlyArray<$ReadOnly>, @@ -70,7 +71,7 @@ export default class ExplorerSettings extends Component { return (
- + {intl.formatMessage(messages.title)} @@ -80,11 +81,20 @@ export default class ExplorerSettings extends Component { {...explorerId.bind()} value={this.props.selectedExplorer.selected.ExplorerId} onChange={this.selectExplorer} + renderValue={() => ( + + {this.props.selectedExplorer.selected.Name} + + )} > {options.map(option => ( - + {option.label} - + ))} {error &&
{intl.formatMessage(error, error.values)}
} diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.js index 05d105d8a1..c793977b9c 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.js @@ -4,7 +4,7 @@ import type { Node } from 'react'; import { observer } from 'mobx-react'; import classNames from 'classnames'; import Select from '../../../common/Select'; -import { Box, MenuItem, Typography } from '@mui/material'; +import { Box, Typography } from '@mui/material'; import { defineMessages, intlShape } from 'react-intl'; import ReactToolboxMobxForm from '../../../../utils/ReactToolboxMobxForm'; import LocalizableError from '../../../../i18n/LocalizableError'; @@ -14,6 +14,8 @@ import FlagLabel from '../../../widgets/FlagLabel'; import { tier1Languages } from '../../../../config/languagesConfig'; import globalMessages, { listOfTranslators } from '../../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { GlobalStyledScrollbar } from '../../../common/commonStyles/GlobalStylesScrollbar'; +import { MenuItemStyled } from '../../../common/commonStyles/MenuItemStyled'; type Props = {| +languages: Array, @@ -68,10 +70,11 @@ export default class GeneralSettings extends Component { svg: language.svg, })); const componentClassNames = classNames([styles.component, 'general']); + const selectedLanguage = languageOptions.filter(item => item.value === this.props.currentLocale)[0]; return (
- + {intl.formatMessage(messages.languageLabel)} { width: '506px', }} > + {error &&
{intl.formatMessage(error, error.values)}
}
{!tier1Languages.includes(languageId.value) && ( -
-

{intl.formatMessage(globalMessages.languageSelectLabelInfo)}

-
+ + + {intl.formatMessage(globalMessages.languageSelectLabelInfo)} + + {intl.formatMessage(globalMessages.languageSelectInfo)}{' '} {listOfTranslators( intl.formatMessage(globalMessages.translationContributors), intl.formatMessage(globalMessages.translationAcknowledgment) )} -
-
+
+ )}
); diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.scss b/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.scss index 32c17a8236..35d7deed3f 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.scss +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/GeneralSettings.scss @@ -21,20 +21,4 @@ .info { color: var(--yoroi-terms-of-use-text-color); text-align: justify; - margin-top: 10px; - - h1 { - color: var(--yoroi-palette-gray-800); - font-weight: 500; - font-size: 14px; - margin-bottom: 11px; - } - - p { - font-weight: 400; - font-size: 12px; - letter-spacing: 0.5px; - line-height: 1.38; - margin-bottom: 11px; - } } diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js index 74daf9c854..42c6d8ff67 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js @@ -28,7 +28,7 @@ export default class ThemeSettingsBlock extends Component { py: false, }} > - {environment.isDev() && ( + {(environment.isDev() || environment.isNightly()) && ( diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/UnitOfAccountSettings.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/UnitOfAccountSettings.js index cd8f628695..19911a71bc 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/UnitOfAccountSettings.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/UnitOfAccountSettings.js @@ -4,7 +4,7 @@ import type { Node } from 'react'; import { observer } from 'mobx-react'; import classNames from 'classnames'; import Select from '../../../common/Select'; -import { MenuItem, Typography } from '@mui/material'; +import { Typography } from '@mui/material'; import { Box } from '@mui/system'; import { defineMessages, intlShape, FormattedHTMLMessage } from 'react-intl'; import ReactToolboxMobxForm from '../../../../utils/ReactToolboxMobxForm'; @@ -15,6 +15,8 @@ import VerticalFlexContainer from '../../../layout/VerticalFlexContainer'; import LoadingSpinner from '../../../widgets/LoadingSpinner'; import globalMessages from '../../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { GlobalStyledScrollbar } from '../../../common/commonStyles/GlobalStylesScrollbar'; +import { MenuItemStyled } from '../../../common/commonStyles/MenuItemStyled'; const messages = defineMessages({ unitOfAccountTitle: { @@ -88,7 +90,7 @@ export default class UnitOfAccountSettings extends Component { const optionRenderer = option => { const SvgElem = option.svg; return ( - { )}
- + ); }; - const lastUpdated = - lastUpdatedTimestamp != null ? new Date(lastUpdatedTimestamp).toLocaleString() : '-'; + const lastUpdated = lastUpdatedTimestamp != null ? new Date(lastUpdatedTimestamp).toLocaleString() : '-'; const dialog = this.props.isSubmitting ? ( - + @@ -152,6 +150,7 @@ export default class UnitOfAccountSettings extends Component { variant="body1" fontWeight={500} mb="16px" + color="ds.text_gray_medium" > {intl.formatMessage(messages.unitOfAccountTitle)}
@@ -162,6 +161,7 @@ export default class UnitOfAccountSettings extends Component { marginTop: '0px', }} > +