List of known phishing addresses (for use in wallets) (#57)

* Add list of known addresses

* Sorted

* Add polkadot.express

* typo

* Add checkAddress & tests

* Update comments

* Return error

* U8a cache
This commit is contained in:
Jaco Greeff
2021-01-22 12:16:41 +01:00
committed by GitHub
parent 55b0fb1f9e
commit 53be1b8416
6 changed files with 428 additions and 24 deletions
+3 -1
View File
@@ -14,7 +14,9 @@
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/phishing#readme",
"dependencies": {
"@babel/runtime": "^7.12.5",
"@polkadot/x-fetch": "^5.3.1"
"@polkadot/util": "^5.3.2-6",
"@polkadot/util-crypto": "^5.3.2-6",
"@polkadot/x-fetch": "^5.3.2-6"
},
"devDependencies": {
"@types/js-yaml": "^4.0.0",
+21 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2020-2021 @polkadot/phishing authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { checkIfDenied } from '.';
import { checkAddress, checkIfDenied } from '.';
describe('checkIfDenied', (): void => {
it('returns false when host in list', async (): Promise<void> => {
@@ -40,3 +40,23 @@ describe('checkIfDenied', (): void => {
).toEqual(true);
});
});
describe('checkAddress', (): void => {
it('returns null if the address is not found', async (): Promise<void> => {
expect(
await checkAddress('5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY')
).toEqual(null);
});
it('returns the site when the address is found', async (): Promise<void> => {
expect(
await checkAddress('14Vxs7UB9FqfQ53wwTJUBAJThs5N7b3bg89HscRU6eBqrFhQ')
).toEqual('polkadot.center');
});
it('returns the site even if the ss58 is different', async (): Promise<void> => {
expect(
await checkAddress('5FkmzcdNekhdSA7j4teSSyHGUnKT8bzNBFvVVeZSGmbSpYHH')
).toEqual('polkadots.network');
});
});
+71 -11
View File
@@ -1,17 +1,23 @@
// Copyright 2020-2021 @polkadot/phishing authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HostList } from './types';
import type { AddressList, HostList } from './types';
import { u8aEq } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { fetch } from '@polkadot/x-fetch';
// Equivalent to https://raw.githubusercontent.com/polkadot-js/phishing/master/all.json
// Equivalent to https://raw.githubusercontent.com/polkadot-js/phishing/master/{address,all}.json
const ADDRESS_JSON = 'https://polkadot.js.org/phishing/address.json';
const ALL_JSON = 'https://polkadot.js.org/phishing/all.json';
// 1 hour cache refresh
const CACHE_TIMEOUT = 1 * 60 * 60 * 1000;
const CACHE_TIMEOUT = 45 * 60 * 1000;
let cacheEnd = 0;
let cacheList: HostList | null = null;
let cacheAddrEnd = 0;
let cacheAddrList: AddressList | null = null;
let cacheAddrU8a: [string, Uint8Array[]][] | null = null;
let cacheHostEnd = 0;
let cacheHostList: HostList | null = null;
// gets the host-only part for a host
function extractHost (path: string): string {
@@ -20,21 +26,56 @@ function extractHost (path: string): string {
.split('/')[0];
}
/**
* Retrieve a list of known phishing addresses
*/
export async function retrieveAddrList (allowCached = true): Promise<AddressList> {
const now = Date.now();
if (allowCached && cacheAddrList && (now < cacheAddrEnd)) {
return cacheAddrList;
}
const response = await fetch(ADDRESS_JSON);
const list = (await response.json()) as AddressList;
cacheAddrEnd = now + CACHE_TIMEOUT;
cacheAddrList = list;
return list;
}
async function retrieveAddrU8a (allowCached = true): Promise<[string, Uint8Array[]][]> {
const now = Date.now();
if (allowCached && cacheAddrU8a && (now < cacheAddrEnd)) {
return cacheAddrU8a;
}
const all = await retrieveAddrList(allowCached);
cacheAddrU8a = Object
.entries(all)
.map(([key, addresses]): [string, Uint8Array[]] => [key, addresses.map((a) => decodeAddress(a))]);
return cacheAddrU8a;
}
/**
* Retrieve allow/deny from our list provider
*/
export async function retrieveHostList (allowCached = true): Promise<HostList> {
const now = Date.now();
if (allowCached && cacheList && (now < cacheEnd)) {
return cacheList;
if (allowCached && cacheHostList && (now < cacheHostEnd)) {
return cacheHostList;
}
const response = await fetch(ALL_JSON);
const list = (await response.json()) as HostList;
cacheEnd = now + CACHE_TIMEOUT;
cacheList = list;
cacheHostEnd = now + CACHE_TIMEOUT;
cacheHostList = list;
return list;
}
@@ -58,9 +99,28 @@ export function checkHost (items: string[], host: string): boolean {
});
}
/**
* Determines if a host is in our deny list. Returns a string containing the phishing site if host is a
* problematic one. Returns null if the address is not associated with phishing.
*/
export async function checkAddress (address: string | Uint8Array, allowCached = true): Promise<string | null> {
try {
const all = await retrieveAddrU8a(allowCached);
const u8a = decodeAddress(address);
const entry = all.find(([, all]) => all.some((a) => u8aEq(a, u8a))) || [null];
return entry[0];
} catch (error) {
console.error('Exception while checking address, assuming non-phishing');
console.error(error);
return null;
}
}
/**
* Determines if a host is in our deny list. Returns true if host is a problematic one. Returns
* true if the host provided is in our list of less-than-honest sites.
* false if the host provided is not in our list of less-than-honest sites.
*/
export async function checkIfDenied (host: string, allowCached = true): Promise<boolean> {
try {
@@ -68,7 +128,7 @@ export async function checkIfDenied (host: string, allowCached = true): Promise<
return checkHost(deny, host);
} catch (error) {
console.error('Exception while checking host, assuming false');
console.error('Exception while checking host, assuming non-phishing');
console.error(error);
return false;
+2
View File
@@ -5,3 +5,5 @@ export interface HostList {
allow: string[];
deny: string[];
}
export type AddressList = Record<string, string[]>;
+13 -3
View File
@@ -7,14 +7,24 @@ function sortSection (values) {
return values.sort((a, b) => a.localeCompare(b));
}
const original = JSON.parse(fs.readFileSync('all.json', 'utf-8'));
function sortAddress (values) {
return Object
.entries(values)
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, addresses]) => [key, sortSection(addresses)])
.reduce((all, [key, addresses]) => ({ ...all, [key]: addresses }), {});
}
const addr = JSON.parse(fs.readFileSync('address.json', 'utf-8'));
const all = JSON.parse(fs.readFileSync('all.json', 'utf-8'));
const meta = JSON.parse(fs.readFileSync('urlmeta.json', 'utf-8'));
// sorted order for all entries
const allow = sortSection(original.allow);
const deny = sortSection(original.deny);
const allow = sortSection(all.allow);
const deny = sortSection(all.deny);
// rewrite with all our entries (newline included)
fs.writeFileSync('address.json', `${JSON.stringify(sortAddress(addr), null, 2)}\n`);
fs.writeFileSync('all.json', `${JSON.stringify({ allow, deny }, null, 2)}\n`);
// find out what we don't have
+318 -8
View File
@@ -1708,12 +1708,23 @@ __metadata:
languageName: node
linkType: hard
"@polkadot/networks@npm:5.3.2-7":
version: 5.3.2-7
resolution: "@polkadot/networks@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
checksum: 4bd6193b653dfb1f7fd0e3b59e201ccc53c85da37a090bcbe06de1a4ab9fa64364057b372335158a3d4e522a8fb716deb592f8bbdbbf5654410b0fc91dde7b26
languageName: node
linkType: hard
"@polkadot/phishing@workspace:packages/phishing":
version: 0.0.0-use.local
resolution: "@polkadot/phishing@workspace:packages/phishing"
dependencies:
"@babel/runtime": ^7.12.5
"@polkadot/x-fetch": ^5.3.1
"@polkadot/util": ^5.3.2-6
"@polkadot/util-crypto": ^5.3.2-6
"@polkadot/x-fetch": ^5.3.2-6
"@types/js-yaml": ^4.0.0
js-yaml: ^4.0.0
languageName: unknown
@@ -1725,14 +1736,113 @@ __metadata:
languageName: unknown
linkType: soft
"@polkadot/x-fetch@npm:^5.3.1":
version: 5.3.1
resolution: "@polkadot/x-fetch@npm:5.3.1"
"@polkadot/util-crypto@npm:^5.3.2-6":
version: 5.3.2-7
resolution: "@polkadot/util-crypto@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
"@polkadot/networks": 5.3.2-7
"@polkadot/util": 5.3.2-7
"@polkadot/wasm-crypto": ^3.2.1
"@polkadot/x-randomvalues": 5.3.2-7
base-x: ^3.0.8
blakejs: ^1.1.0
bn.js: ^4.11.9
create-hash: ^1.2.0
elliptic: ^6.5.3
hash.js: ^1.1.7
js-sha3: ^0.8.0
scryptsy: ^2.1.0
tweetnacl: ^1.0.3
xxhashjs: ^0.2.2
peerDependencies:
"@polkadot/util": 5.3.2-7
checksum: 9c0a231fe5b1a2513d2f17c2ca12cc8aecf33c91d78716f5631b341252eb0b1c556c2f61410dcc34b4997311eed26f6e06635d71a93139d71521268e97d2fcbd
languageName: node
linkType: hard
"@polkadot/util@npm:5.3.2-7, @polkadot/util@npm:^5.3.2-6":
version: 5.3.2-7
resolution: "@polkadot/util@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
"@polkadot/x-textdecoder": 5.3.2-7
"@polkadot/x-textencoder": 5.3.2-7
"@types/bn.js": ^4.11.6
bn.js: ^4.11.9
camelcase: ^5.3.1
ip-regex: ^4.2.0
checksum: fe179b893f238f632f8434688ad94811f3ee72f100c5e92dc335851e6bb0c1f800f2cbabf08325ccc913ae9660d00b26d1900bb266d71a62fbc294ebb09fa476
languageName: node
linkType: hard
"@polkadot/wasm-crypto-asmjs@npm:^3.2.1":
version: 3.2.1
resolution: "@polkadot/wasm-crypto-asmjs@npm:3.2.1"
dependencies:
"@babel/runtime": ^7.12.5
checksum: 8aa86a954d33a562b6f1efb4beb0fc512f43bc36e5465455b3efd05edbc67626055464c7bec06e6ce2c152a8535988459b89a800b5dc044299c5b24a790ad4cf
languageName: node
linkType: hard
"@polkadot/wasm-crypto-wasm@npm:^3.2.1":
version: 3.2.1
resolution: "@polkadot/wasm-crypto-wasm@npm:3.2.1"
dependencies:
"@babel/runtime": ^7.12.5
checksum: 974372b4dff99b2ec7620a1ba9bb69e181e30ca0f0e814560311cbbc1d851e820676883c5a73b683eb2b0d82765c3256add074586983aa89b46d0d43c6d14507
languageName: node
linkType: hard
"@polkadot/wasm-crypto@npm:^3.2.1":
version: 3.2.1
resolution: "@polkadot/wasm-crypto@npm:3.2.1"
dependencies:
"@babel/runtime": ^7.12.5
"@polkadot/wasm-crypto-asmjs": ^3.2.1
"@polkadot/wasm-crypto-wasm": ^3.2.1
peerDependencies:
"@polkadot/util": "*"
"@polkadot/x-randomvalues": "*"
checksum: 388f77a79db8c5d99acae56e5b9cf0a855710a2dd468b4bec4f7687da00f64ebf7cb914b3b7d1613374068556971619220fd4ccf7f8de190ece2387e18c176a9
languageName: node
linkType: hard
"@polkadot/x-fetch@npm:^5.3.2-6":
version: 5.3.2-6
resolution: "@polkadot/x-fetch@npm:5.3.2-6"
dependencies:
"@babel/runtime": ^7.12.5
"@types/node-fetch": ^2.5.8
node-fetch: ^2.6.1
checksum: 7a0408e9ae106b1625fb193cad7c8e5e2a1a80d1f103eaa5d1fc3234563d22c2e98cbbe1a6bc17a50793fe8012c2c57a962de3207735bf956fd7594bbbdcd4b3
checksum: c6fff084f52f296b056ef15f0169c59d4e8f5897b1c9a6b224462aeed44520bed7f79661da3fb7f799e997a4baa72563ae71f6a360f8534b5b65e60a7c214fd6
languageName: node
linkType: hard
"@polkadot/x-randomvalues@npm:5.3.2-7":
version: 5.3.2-7
resolution: "@polkadot/x-randomvalues@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
checksum: aff63596c76fdaf236b93d41915f29169788e0d86cf44d871836d95d7310e8a9fed75ed4ca05f1c11ebafb77e51b78ae9921a8b35a47765b7f6ea0bae5c161eb
languageName: node
linkType: hard
"@polkadot/x-textdecoder@npm:5.3.2-7":
version: 5.3.2-7
resolution: "@polkadot/x-textdecoder@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
checksum: efceb8fe6e6856fb9f6b4242bf8cadfa33e8c93da7ed1139f990fb906ad0fb5de83b54bd92ddfadf7d31f4bfec098f2a3ee037783223c49a93953dd33c57d8a0
languageName: node
linkType: hard
"@polkadot/x-textencoder@npm:5.3.2-7":
version: 5.3.2-7
resolution: "@polkadot/x-textencoder@npm:5.3.2-7"
dependencies:
"@babel/runtime": ^7.12.5
checksum: 583a21914bdafccd2f5f81dba12950cbd7c84512eb9becbbebe8223b27236600f43802c0805494f43bd9da37bc2a66d973ec576c1adcd95db06c9a382e5c5d00
languageName: node
linkType: hard
@@ -1818,6 +1928,15 @@ __metadata:
languageName: node
linkType: hard
"@types/bn.js@npm:^4.11.6":
version: 4.11.6
resolution: "@types/bn.js@npm:4.11.6"
dependencies:
"@types/node": "*"
checksum: 0f6cbfb3d12f6b5cce62922c57b4704583307961e9d09ae07e1aab2a41f815e27417bd022c8f48bba545c2bb27ee23e1035ca53500b2081e037e749ec27b88b8
languageName: node
linkType: hard
"@types/graceful-fs@npm:^4.1.2":
version: 4.1.4
resolution: "@types/graceful-fs@npm:4.1.4"
@@ -2651,6 +2770,15 @@ __metadata:
languageName: node
linkType: hard
"base-x@npm:^3.0.8":
version: 3.0.8
resolution: "base-x@npm:3.0.8"
dependencies:
safe-buffer: ^5.0.1
checksum: 9e5832ab00f4413d63f8227901c18b2a9db5f379525f70b627e6e284007dc5e7940a765ef4ab03974b4c14a664153208758656ebb86979451d1995d13e3fa29b
languageName: node
linkType: hard
"base64-js@npm:^1.3.1":
version: 1.5.1
resolution: "base64-js@npm:1.5.1"
@@ -2707,6 +2835,13 @@ __metadata:
languageName: node
linkType: hard
"blakejs@npm:^1.1.0":
version: 1.1.0
resolution: "blakejs@npm:1.1.0"
checksum: 007d68a909d94cea612294bbab0cb2c26440c3a59eb340dfca046f1913cf4aa917da56088ad762f13921883ccc81c6eed2924ceac27f4ebbf9b4d25981a85fcd
languageName: node
linkType: hard
"bluebird@npm:^3.1.1":
version: 3.7.2
resolution: "bluebird@npm:3.7.2"
@@ -2714,6 +2849,13 @@ __metadata:
languageName: node
linkType: hard
"bn.js@npm:^4.11.9, bn.js@npm:^4.4.0":
version: 4.11.9
resolution: "bn.js@npm:4.11.9"
checksum: 31630d3560b28931010980886a0f657b37ce818ba237867cd838e89a1a0b71044fb4977aa56376616997b372bbb3f55d3bb25e5378c48c1d24a47bfb4235b60e
languageName: node
linkType: hard
"boxen@npm:^4.2.0":
version: 4.2.0
resolution: "boxen@npm:4.2.0"
@@ -2767,6 +2909,13 @@ __metadata:
languageName: node
linkType: hard
"brorand@npm:^1.0.1":
version: 1.1.0
resolution: "brorand@npm:1.1.0"
checksum: 4536dd73f07f6884d89c09c906345b606abff477e87babef64a85656e8cf12b1c5f40d06313b91dac12bf3e031ac190b5d548f2c3bf75f655344c3fcf90cbc8a
languageName: node
linkType: hard
"browser-process-hrtime@npm:^1.0.0":
version: 1.0.0
resolution: "browser-process-hrtime@npm:1.0.0"
@@ -2991,6 +3140,16 @@ __metadata:
languageName: node
linkType: hard
"cipher-base@npm:^1.0.1":
version: 1.0.4
resolution: "cipher-base@npm:1.0.4"
dependencies:
inherits: ^2.0.1
safe-buffer: ^5.0.1
checksum: ec80001ec91dbb7c5c08facc00ffc9c75fed7abd6d720c7a9c62c260aa2e5cb2655c183e011b50b8b711f755b1753c7fdd2ca44c091ee78d81c377ca74ed83c9
languageName: node
linkType: hard
"cjs-module-lexer@npm:^0.6.0":
version: 0.6.0
resolution: "cjs-module-lexer@npm:0.6.0"
@@ -3291,6 +3450,19 @@ __metadata:
languageName: node
linkType: hard
"create-hash@npm:^1.2.0":
version: 1.2.0
resolution: "create-hash@npm:1.2.0"
dependencies:
cipher-base: ^1.0.1
inherits: ^2.0.1
md5.js: ^1.3.4
ripemd160: ^2.0.1
sha.js: ^2.4.0
checksum: 5565182efc3603e4d34c3ce13fd0765a058b27f91e49ba8e720e30ba8bfc53e9cd835e5343136000b6f210a979fe1041a4f3fe728e866e64f34db04b068fd725
languageName: node
linkType: hard
"cross-spawn@npm:^6.0.0":
version: 6.0.5
resolution: "cross-spawn@npm:6.0.5"
@@ -3354,6 +3526,13 @@ __metadata:
languageName: node
linkType: hard
"cuint@npm:^0.2.2":
version: 0.2.2
resolution: "cuint@npm:0.2.2"
checksum: e2b313668c8ba3867e66188dadf122b385bbc3ba16f639bfaf5f4c950665eefb7ca9bbd2a2e0dbe0cd62fdef20317347c01ab9e270db2c9790bebe5b0fc613af
languageName: node
linkType: hard
"dashdash@npm:^1.12.0":
version: 1.14.1
resolution: "dashdash@npm:1.14.1"
@@ -3755,6 +3934,21 @@ __metadata:
languageName: node
linkType: hard
"elliptic@npm:^6.5.3":
version: 6.5.3
resolution: "elliptic@npm:6.5.3"
dependencies:
bn.js: ^4.4.0
brorand: ^1.0.1
hash.js: ^1.0.0
hmac-drbg: ^1.0.0
inherits: ^2.0.1
minimalistic-assert: ^1.0.0
minimalistic-crypto-utils: ^1.0.0
checksum: b66cf0b8f8d9a4d47992e6f0b754cbe4c0681b78b7d6691529c99fc79d8a87069f354a665a528c4bdd0327e1d937c617f9bb2fef1aa92761e4c2b7f73200af38
languageName: node
linkType: hard
"email-addresses@npm:^3.0.1":
version: 3.1.0
resolution: "email-addresses@npm:3.1.0"
@@ -5151,6 +5345,17 @@ __metadata:
languageName: node
linkType: hard
"hash-base@npm:^3.0.0":
version: 3.1.0
resolution: "hash-base@npm:3.1.0"
dependencies:
inherits: ^2.0.4
readable-stream: ^3.6.0
safe-buffer: ^5.2.0
checksum: 9f4b0d183daf13f79ef60f117efc7004bb3570de48fe2d3c7d03c546313490decb2dff2b08d71b8a0049a7de4b79eda16096c2a96f33a7f4916e7616bce4dc11
languageName: node
linkType: hard
"hash-sum@npm:^1.0.2":
version: 1.0.2
resolution: "hash-sum@npm:1.0.2"
@@ -5158,6 +5363,27 @@ __metadata:
languageName: node
linkType: hard
"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7":
version: 1.1.7
resolution: "hash.js@npm:1.1.7"
dependencies:
inherits: ^2.0.3
minimalistic-assert: ^1.0.1
checksum: fceb7fb87e224f4b399212f902d3a34c3ed8512560868b56dde92f617fac9c66b501e583bab2996ed7493be5ab3385e05a69d2209fa6a9144391b22e1c2d245b
languageName: node
linkType: hard
"hmac-drbg@npm:^1.0.0":
version: 1.0.1
resolution: "hmac-drbg@npm:1.0.1"
dependencies:
hash.js: ^1.0.3
minimalistic-assert: ^1.0.0
minimalistic-crypto-utils: ^1.0.1
checksum: 729d5a55bf793619830aca5e62d101dfdb4164fe30c056cdcaecb32b1a69a23aa663d88e876d9d56cb69b1c3d95395ea60b0a715763c461188b37dca3dea930d
languageName: node
linkType: hard
"hosted-git-info@npm:^2.1.4":
version: 2.8.8
resolution: "hosted-git-info@npm:2.8.8"
@@ -5299,7 +5525,7 @@ __metadata:
languageName: node
linkType: hard
"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3":
"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 98426da247ddfc3dcd7d7daedd90c3ca32d5b08deca08949726f12d49232aef94772a07b36cf4ff833e105ae2ef931777f6de4a6dd8245a216b9299ad4a50bea
@@ -5366,6 +5592,13 @@ __metadata:
languageName: node
linkType: hard
"ip-regex@npm:^4.2.0":
version: 4.2.0
resolution: "ip-regex@npm:4.2.0"
checksum: 9e376018e64da89756e27d3f1b3313abc85291b5d1b5b9878f26b3934ecb04fa512116bf66b6dcd9553ba0b88af4feaaedbccd86f0ba6c05e464642ccb8504c5
languageName: node
linkType: hard
"is-accessor-descriptor@npm:^0.1.6":
version: 0.1.6
resolution: "is-accessor-descriptor@npm:0.1.6"
@@ -6293,6 +6526,13 @@ __metadata:
languageName: node
linkType: hard
"js-sha3@npm:^0.8.0":
version: 0.8.0
resolution: "js-sha3@npm:0.8.0"
checksum: 21d7129a634d7e9072a00fa0c037a3f7192d9a2d85377ecbbc7a614fbf523d31cc7489c74adfa84d606d58eb5bffb9dbfbe53bb618ec371942e63070559f3719
languageName: node
linkType: hard
"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
version: 4.0.0
resolution: "js-tokens@npm:4.0.0"
@@ -6858,6 +7098,17 @@ __metadata:
languageName: node
linkType: hard
"md5.js@npm:^1.3.4":
version: 1.3.5
resolution: "md5.js@npm:1.3.5"
dependencies:
hash-base: ^3.0.0
inherits: ^2.0.1
safe-buffer: ^5.1.2
checksum: ca0b260ea29746f1017ad16bc0e164299ae453d2d6a24d635cc6ec03e280f350b09faa4899bfed9387c81457ca55981e9a684336d89faa94b1d2a01903fae2ec
languageName: node
linkType: hard
"merge-source-map@npm:^1.1.0":
version: 1.1.0
resolution: "merge-source-map@npm:1.1.0"
@@ -6958,6 +7209,20 @@ __metadata:
languageName: node
linkType: hard
"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1":
version: 1.0.1
resolution: "minimalistic-assert@npm:1.0.1"
checksum: 28f1de3cf9edfb82613428a58eb3dd38ec6d33ab761b98abf2d130c81104ea86be540c7e5eb8284f13e0a065ead8b17501de09419b9a98987ed27268ad538dba
languageName: node
linkType: hard
"minimalistic-crypto-utils@npm:^1.0.0, minimalistic-crypto-utils@npm:^1.0.1":
version: 1.0.1
resolution: "minimalistic-crypto-utils@npm:1.0.1"
checksum: 736067bddd0e5036a1a4943abe7b63eb1dd0115ad87588420310d26a3d56fc4cd4694b7077fa102956c88d3922dbf7cbc5b7ffe749f27441d13c3e1b1133ab40
languageName: node
linkType: hard
"minimatch@npm:^3.0.0, minimatch@npm:^3.0.4":
version: 3.0.4
resolution: "minimatch@npm:3.0.4"
@@ -8143,7 +8408,7 @@ __metadata:
languageName: node
linkType: hard
"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0":
"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0":
version: 3.6.0
resolution: "readable-stream@npm:3.6.0"
dependencies:
@@ -8521,6 +8786,16 @@ __metadata:
languageName: node
linkType: hard
"ripemd160@npm:^2.0.1":
version: 2.0.2
resolution: "ripemd160@npm:2.0.2"
dependencies:
hash-base: ^3.0.0
inherits: ^2.0.1
checksum: e0370fbe779b1f15d74c3e7dffc0ce40b57b845fc7e431fab8a571958d5fd9c91eb0038a252604600e20786d117badea0cc4cf8816b8a6be6b9166b565ad6797
languageName: node
linkType: hard
"root-workspace-0b6124@workspace:.":
version: 0.0.0-use.local
resolution: "root-workspace-0b6124@workspace:."
@@ -8561,7 +8836,7 @@ __metadata:
languageName: node
linkType: hard
"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0":
"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 0bb57f0d8f9d1fa4fe35ad8a2db1f83a027d48f2822d59ede88fd5cd4ddad83c0b497213feb7a70fbf90597a70c5217f735b0eb1850df40ce9b4ae81dd22b3f9
@@ -8630,6 +8905,13 @@ __metadata:
languageName: node
linkType: hard
"scryptsy@npm:^2.1.0":
version: 2.1.0
resolution: "scryptsy@npm:2.1.0"
checksum: 9fd847955caa9d13a6d58a0360ba8fb31f8e7e7da9250b4c09c67db784a0f6dda757bc837313b0860c0e35f84a56ba068394c682dd4fba81c5899d82832aa7d6
languageName: node
linkType: hard
"semver-diff@npm:^3.1.1":
version: 3.1.1
resolution: "semver-diff@npm:3.1.1"
@@ -8696,6 +8978,18 @@ __metadata:
languageName: node
linkType: hard
"sha.js@npm:^2.4.0":
version: 2.4.11
resolution: "sha.js@npm:2.4.11"
dependencies:
inherits: ^2.0.1
safe-buffer: ^5.0.1
bin:
sha.js: ./bin.js
checksum: 7554240ab76e683f7115123eb4815aae16b5fc6f2cdff97009831ad5b17b107ffcef022526211f7306957bce7a67fa4d0ccad79a3040c5073414365595e90516
languageName: node
linkType: hard
"shebang-command@npm:^1.2.0":
version: 1.2.0
resolution: "shebang-command@npm:1.2.0"
@@ -9591,6 +9885,13 @@ __metadata:
languageName: node
linkType: hard
"tweetnacl@npm:^1.0.3":
version: 1.0.3
resolution: "tweetnacl@npm:1.0.3"
checksum: 1188f3ef85db04d6dba632d211e481ae0a5805974491633ff60bd56ae3362312dfea1515e0d200685867b69ff212e8778e26923f8203e3c335064b07f620a6c7
languageName: node
linkType: hard
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"
@@ -10204,6 +10505,15 @@ __metadata:
languageName: node
linkType: hard
"xxhashjs@npm:^0.2.2":
version: 0.2.2
resolution: "xxhashjs@npm:0.2.2"
dependencies:
cuint: ^0.2.2
checksum: 1e99880a00c16bfe10f22bee8a1760300dca658027102feabafd458ac33d4fe07ff66ed39d2bbfe1a42f1dceac2287b0d32eca0e07a32b1e33260db5f8456f40
languageName: node
linkType: hard
"y18n@npm:^4.0.0":
version: 4.0.1
resolution: "y18n@npm:4.0.1"