diff --git a/tee-worker/ts-tests/.env.local b/tee-worker/ts-tests/.env.local index 65d34e082e..d7602455ee 100644 --- a/tee-worker/ts-tests/.env.local +++ b/tee-worker/ts-tests/.env.local @@ -5,4 +5,7 @@ WORKER_END_POINT = wss://localhost:2000 SUBSTRATE_END_POINT = "ws://localhost:9946" +ETH_END_POINT = "http://localhost:8545" + + ID_HUB_URL='http://localhost:3000' diff --git a/tee-worker/ts-tests/identity.test.ts b/tee-worker/ts-tests/identity.test.ts index 0c4fd5e5f4..a10e07fe3d 100644 --- a/tee-worker/ts-tests/identity.test.ts +++ b/tee-worker/ts-tests/identity.test.ts @@ -1,5 +1,10 @@ -import { describeLitentry, generateVerificationMessage, getMessage } from "./utils"; -import { hexToU8a, u8aToHex } from "@polkadot/util"; +import { + describeLitentry, + generateVerificationMessage, + getMessage, + listenEncryptedEvents, +} from "./utils"; +import { hexToU8a, u8aToHex, stringToU8a } from "@polkadot/util"; import { createIdentity, setUserShieldingKey, @@ -10,6 +15,9 @@ import { step } from "mocha-steps"; import { assert } from "chai"; import { LitentryIdentity, LitentryValidationData } from "./type-definitions"; import { Sign } from "./web3/functions"; +import { generateTestKeys } from "./web3/functions"; +import { ethers } from "ethers"; +import { HexString } from "@polkadot/util/types"; const twitterIdentity = { handle: { PlainString: `0x${Buffer.from("mock_user", "utf8").toString("hex")}`, @@ -19,6 +27,27 @@ const twitterIdentity = { }, }; +const ethereumIdentity = { + handle: { + Address20: `0xff93B45308FD417dF303D6515aB04D9e89a750Ca`, + }, + web_type: { + Web3Identity: { + Evm: "Ethereum", + }, + }, +}; + +const substrateIdentity = { + handle: { + Address32: `0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d`, //alice + }, + web_type: { + Web3Identity: { + Substrate: "Litentry", + }, + }, +}; const twitterValidationData = { Web2Validation: { Twitter: { @@ -27,6 +56,32 @@ const twitterValidationData = { }, }; +const ethereumValidationData = { + Web3Validation: { + Evm: { + message: `0x${Buffer.from("mock_message", "utf8").toString("hex")}`, + signature: { + Ethereum: `0x${Buffer.from( + "10ee76e356d944d17bce552a4fd0d4554ccc97dc81213f470367bd3b99c441c51", + "utf8" + ).toString("hex")}`, + }, + }, + }, +}; +const substrateValidationData = { + Web3Validation: { + Substrate: { + message: `0x${Buffer.from("mock_message", "utf8").toString("hex")}`, + signature: { + Sr25519: `0x${Buffer.from( + "10ee76e356d944d17bce552a4fd0d4554ccc97dc81213f470367bd3b99c441c51", + "utf8" + ).toString("hex")}`, + }, + }, + }, +}; const discordIdentity = { handle: { PlainString: `0x${Buffer.from("859641379851337798", "utf8").toString("hex")}`, @@ -48,21 +103,26 @@ const discordValidationData = { describeLitentry("Test Identity", (context) => { const aesKey = "0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12"; + var signature_ethereum; + var signature_substrate; step("set user shielding key", async function () { - //get signature - // const message = getMessage(context.defaultSigner.address, "polkadot-js"); - // const signature = await Sign(message, context.defaultSigner); - const who = await setUserShieldingKey(context, context.defaultSigner, aesKey, true); assert.equal(who, u8aToHex(context.defaultSigner.addressRaw), "check caller error"); }); - step("create twitter identity", async function () { - const r = await createIdentity(context, context.defaultSigner, aesKey, true, twitterIdentity); - if (r) { - const [_who, challengeCode] = r; - console.log("challengeCode: ", challengeCode); + step("create identity", async function () { + //create twitter identity + const resp_twitter = await createIdentity( + context, + context.defaultSigner, + aesKey, + true, + twitterIdentity + ); + if (resp_twitter) { + const [_who, challengeCode] = resp_twitter; + console.log("twitterIdentity challengeCode: ", challengeCode); const msg = generateVerificationMessage( context, hexToU8a(challengeCode), @@ -72,10 +132,60 @@ describeLitentry("Test Identity", (context) => { console.log("post verification msg to twitter: ", msg); assert.isNotEmpty(challengeCode, "challengeCode empty"); } + //create ethereum identity + const resp_ethereum = await createIdentity( + context, + context.defaultSigner, + aesKey, + true, + ethereumIdentity + ); + if (resp_ethereum) { + const [_who, challengeCode] = resp_ethereum; + console.log("ethereumIdentity challengeCode: ", challengeCode); + const msg = generateVerificationMessage( + context, + hexToU8a(challengeCode), + context.defaultSigner.addressRaw, + ethereumIdentity + ); + console.log("post verification msg to ethereum: ", msg); + ethereumValidationData!.Web3Validation!.Evm!.message = msg; + const msgHash = ethers.utils.arrayify(msg); + signature_ethereum = await context.ethersWallet.alice.signMessage(msgHash); + ethereumValidationData!.Web3Validation!.Evm!.signature!.Ethereum = signature_ethereum; + assert.isNotEmpty(challengeCode, "challengeCode empty"); + } + // create substrate identity + const resp_substrate = await createIdentity( + context, + context.defaultSigner, + aesKey, + true, + substrateIdentity + ); + if (resp_substrate) { + const [_who, challengeCode] = resp_substrate; + console.log("substrateIdentity challengeCode: ", challengeCode); + const msg = generateVerificationMessage( + context, + hexToU8a(challengeCode), + context.defaultSigner.addressRaw, + substrateIdentity + ); + + console.log("post verification msg to substrate: ", msg); + substrateValidationData!.Web3Validation!.Substrate!.message = msg; + signature_substrate = context.defaultSigner.sign(msg); + substrateValidationData!.Web3Validation!.Substrate!.signature!.Sr25519 = + u8aToHex(signature_substrate); + assert.isNotEmpty(challengeCode, "challengeCode empty"); + } }); - step("verify twitter identity", async function () { - const who = await verifyIdentity( + step("verify identity", async function () { + //verify twitter identity + const who_twitter = await verifyIdentity( context, context.defaultSigner, aesKey, @@ -83,17 +193,72 @@ describeLitentry("Test Identity", (context) => { twitterIdentity, twitterValidationData ); + assert.equal(who_twitter, u8aToHex(context.defaultSigner.addressRaw), "check caller error"); + + // verify ethereum identity + const who_ethereum = await verifyIdentity( + context, + context.defaultSigner, + aesKey, + true, + ethereumIdentity, + ethereumValidationData + ); + assert.equal( + who_ethereum, + u8aToHex(context.defaultSigner.addressRaw), + "check caller error" + ); + + //verify substrate identity + const who = await verifyIdentity( + context, + context.defaultSigner, + aesKey, + true, + substrateIdentity, + substrateValidationData + ); assert.equal(who, u8aToHex(context.defaultSigner.addressRaw), "check caller error"); }); step("remove identity", async function () { - const who = await removeIdentity( + //remove twitter identity + const who_twitter = await removeIdentity( context, context.defaultSigner, aesKey, true, twitterIdentity ); - assert.equal(who, u8aToHex(context.defaultSigner.addressRaw), "check caller error"); + assert.equal(who_twitter, u8aToHex(context.defaultSigner.addressRaw), "check caller error"); + + //remove ethereum identity + const who_ethereum = await removeIdentity( + context, + context.defaultSigner, + aesKey, + true, + ethereumIdentity + ); + assert.equal( + who_ethereum, + u8aToHex(context.defaultSigner.addressRaw), + "check caller error" + ); + + //remove substrate identity + const who_substrate = await removeIdentity( + context, + context.defaultSigner, + aesKey, + true, + substrateIdentity + ); + assert.equal( + who_substrate, + u8aToHex(context.defaultSigner.addressRaw), + "check caller error" + ); }); }); diff --git a/tee-worker/ts-tests/indirect_calls.ts b/tee-worker/ts-tests/indirect_calls.ts index 8aabdb2667..3fc21b611c 100644 --- a/tee-worker/ts-tests/indirect_calls.ts +++ b/tee-worker/ts-tests/indirect_calls.ts @@ -38,9 +38,10 @@ export async function createIdentity( ): Promise { const encode = context.substrate.createType("LitentryIdentity", identity).toHex(); const ciphertext = encryptWithTeeShieldingKey(context.teeShieldingKey, encode).toString("hex"); + const nonce = await context.substrate.rpc.system.accountNextIndex(signer.address); await context.substrate.tx.identityManagement .createIdentity(context.shard, `0x${ciphertext}`, null) - .signAndSend(signer); + .signAndSend(signer, { nonce }); if (listening) { const event = await listenEncryptedEvents(context, aesKey, { module: "identityManagement", @@ -62,9 +63,11 @@ export async function removeIdentity( ): Promise { const encode = context.substrate.createType("LitentryIdentity", identity).toHex(); const ciphertext = encryptWithTeeShieldingKey(context.teeShieldingKey, encode).toString("hex"); + const nonce = await context.substrate.rpc.system.accountNextIndex(signer.address); + await context.substrate.tx.identityManagement .removeIdentity(context.shard, `0x${ciphertext}`) - .signAndSend(signer); + .signAndSend(signer, { nonce }); if (listening) { const event = await listenEncryptedEvents(context, aesKey, { module: "identityManagement", @@ -95,9 +98,11 @@ export async function verifyIdentity( context.teeShieldingKey, validation_encode ).toString("hex"); + const nonce = await context.substrate.rpc.system.accountNextIndex(signer.address); + await context.substrate.tx.identityManagement .verifyIdentity(context.shard, `0x${identity_ciphertext}`, `0x${validation_ciphertext}`) - .signAndSend(signer); + .signAndSend(signer, { nonce }); if (listening) { const event = await listenEncryptedEvents(context, aesKey, { module: "identityManagement", diff --git a/tee-worker/ts-tests/package.json b/tee-worker/ts-tests/package.json index 42270b4ac1..b11b75c71a 100644 --- a/tee-worker/ts-tests/package.json +++ b/tee-worker/ts-tests/package.json @@ -15,11 +15,13 @@ "ws": "^8.8.1" }, "devDependencies": { + "@ethersproject/providers": "^5.7.2", "@types/chai": "^4.3.3", "@types/mocha": "^10.0.0", "@types/ws": "^8.5.3", "cross-env": "^7.0.3", "dotenv": "^16.0.3", + "ethers": "^5.7.2", "ts-node": "^10.8.1", "typescript": "^4.7.3" }, diff --git a/tee-worker/ts-tests/type-definitions.ts b/tee-worker/ts-tests/type-definitions.ts index 967138545b..1587bef071 100644 --- a/tee-worker/ts-tests/type-definitions.ts +++ b/tee-worker/ts-tests/type-definitions.ts @@ -1,211 +1,245 @@ -import {ApiPromise, Keyring} from "@polkadot/api"; -import {KeyObject} from "crypto"; -import {HexString} from "@polkadot/util/types"; +import { ApiPromise, Keyring } from "@polkadot/api"; +import { KeyObject } from "crypto"; +import { HexString } from "@polkadot/util/types"; import WebSocketAsPromised = require("websocket-as-promised"); -import {KeyringPair} from "@polkadot/keyring/types"; - +import { KeyringPair } from "@polkadot/keyring/types"; +import { Web3Provider } from "@ethersproject/providers"; +import { ethers, Wallet } from "ethers"; export const teeTypes = { WorkerRpcReturnString: { - vec: "Bytes" + vec: "Bytes", }, WorkerRpcReturnValue: { - value: 'Bytes', - do_watch: 'bool', - status: 'DirectRequestStatus', + value: "Bytes", + do_watch: "bool", + status: "DirectRequestStatus", }, TrustedOperation: { _enum: { indirect_call: "(TrustedCallSigned)", direct_call: "(TrustedCallSigned)", get: "(Getter)", - } + }, }, TrustedCallSigned: { - call: 'TrustedCall', - index: 'u32', - signature: 'MultiSignature', + call: "TrustedCall", + index: "u32", + signature: "MultiSignature", }, Getter: { _enum: { - 'public': '(PublicGetter)', - 'trusted': '(TrustedGetterSigned)' - } + public: "(PublicGetter)", + trusted: "(TrustedGetterSigned)", + }, }, PublicGetter: { - _enum: [ - 'some_value' - ] + _enum: ["some_value"], }, TrustedGetterSigned: { getter: "TrustedGetter", - signature: "MultiSignature" + signature: "MultiSignature", }, /// important TrustedGetter: { _enum: { - free_balance: '(AccountId)' - } + free_balance: "(AccountId)", + }, }, /// important TrustedCall: { _enum: { - balance_set_balance: '(AccountId, AccountId, Balance, Balance)', - balance_transfer: '(AccountId, AccountId, Balance)', - balance_unshield: '(AccountId, AccountId, Balance, ShardIdentifier)', - } + balance_set_balance: "(AccountId, AccountId, Balance, Balance)", + balance_transfer: "(AccountId, AccountId, Balance)", + balance_unshield: "(AccountId, AccountId, Balance, ShardIdentifier)", + }, }, DirectRequestStatus: { _enum: [ //TODO support TrustedOperationStatus(TrustedOperationStatus) - 'Ok', 'TrustedOperationStatus', 'Error' - ] + "Ok", + "TrustedOperationStatus", + "Error", + ], }, /// identity LitentryIdentity: { web_type: "IdentityWebType", - handle: "IdentityHandle" + handle: "IdentityHandle", }, IdentityWebType: { _enum: { Web2Identity: "Web2Network", - Web3Identity: "Web3Network" - } + Web3Identity: "Web3Network", + }, }, Web2Network: { - _enum: ["Twitter", "Discord", "Github"] + _enum: ["Twitter", "Discord", "Github"], }, Web3Network: { _enum: { Substrate: "SubstrateNetwork", - Evm: "EvmNetwork" - } + Evm: "EvmNetwork", + }, }, SubstrateNetwork: { - _enum: ["Polkadot", "Kusama", "Litentry", "Litmus"] + _enum: ["Polkadot", "Kusama", "Litentry", "Litmus"], }, EvmNetwork: { - _enum: ['Ethereum', 'BSC'] + _enum: ["Ethereum", "BSC"], }, IdentityHandle: { _enum: { - Address32: '[u8;32]', - Address20: '[u8;20]', - PlainString: 'Vec' - } + Address32: "[u8;32]", + Address20: "[u8;20]", + PlainString: "Vec", + }, }, /// Validation Data LitentryValidationData: { _enum: { Web2Validation: "Web2ValidationData", - Web3Validation: "Web3ValidationData" - } + Web3Validation: "Web3ValidationData", + }, }, Web2ValidationData: { _enum: { Twitter: "TwitterValidationData", - Discord: "DiscordValidationData" - } + Discord: "DiscordValidationData", + }, }, TwitterValidationData: { - tweet_id: "Vec" + tweet_id: "Vec", }, DiscordValidationData: { channel_id: "Vec", message_id: "Vec", - guild_id: "Vec" + guild_id: "Vec", }, Web3ValidationData: { _enum: { Substrate: "Web3CommonValidationData", - Evm: "Web3CommonValidationData" - } + Evm: "Web3CommonValidationData", + }, }, Web3CommonValidationData: { message: "Vec", - signature: "IdentityMultiSignature" + signature: "IdentityMultiSignature", }, + IdentityMultiSignature: { - _enum: {} - } -} + _enum: { + Ed25519: "ed25519::Signature", + Sr25519: "sr25519::Signature", + Ecdsa: "ecdsa::Signature", + Ethereum: "EthereumSignature", + }, + }, + EthereumSignature: "([u8; 65])", +}; export type WorkerRpcReturnValue = { - value: HexString - do_watch: boolean - status: string -} + value: HexString; + do_watch: boolean; + status: string; +}; export type WorkerRpcReturnString = { - vec: string -} + vec: string; +}; export type PubicKeyJson = { - n: Uint8Array, - e: Uint8Array -} - + n: Uint8Array; + e: Uint8Array; +}; export type IntegrationTestContext = { - tee: WebSocketAsPromised, - substrate: ApiPromise, - teeShieldingKey: KeyObject, - shard: HexString - defaultSigner: KeyringPair -} + tee: WebSocketAsPromised; + substrate: ApiPromise; + teeShieldingKey: KeyObject; + shard: HexString; + defaultSigner: KeyringPair; + ethersProvider: Web3Provider; + //@todo add type + ethersWallet: any; +}; export class AESOutput { - ciphertext?: Uint8Array - aad?: Uint8Array - nonce?: Uint8Array + ciphertext?: Uint8Array; + aad?: Uint8Array; + nonce?: Uint8Array; } export type LitentryIdentity = { - web_type: IdentityWebType, - handle: IdentityHandle, -} + web_type: IdentityWebType; + handle: IdentityHandle; +}; export type IdentityWebType = { - Web2Identity?: Web2Network - Web3Identity?: Web3Network -} + Web2Identity?: Web2Network; + Web3Identity?: Web3Network; +}; export type IdentityHandle = { - Address32: `0x${string}`, - Address20: `0x${string},` - PlainString: `0x${string}` -} + Address32?: HexString; + Address20?: HexString; + PlainString?: `0x${string}`; +}; export type LitentryValidationData = { - Web2Validation?: Web2ValidationData, - Web3Validation?: string, -} + Web2Validation?: Web2ValidationData; + Web3Validation?: Web3ValidationData; +}; export type Web2ValidationData = { - Twitter?: TwitterValidationData, - Discord?: DiscordValidationData -} + Twitter?: TwitterValidationData; + Discord?: DiscordValidationData; +}; + +export type Web3ValidationData = { + Substrate?: Web3CommonValidationData; + Evm?: Web3CommonValidationData; +}; + +export type Web3CommonValidationData = { + message: HexString; + signature: IdentityMultiSignature; +}; + +export type IdentityMultiSignature = { + Ethereum?: HexString; + Ed25519: HexString; + Sr25519: HexString; +}; + +export type Ed25519Signature = { + Ed25519: HexString; + Sr25519: HexString; + Ecdsa: HexString; + Ethereum: EthereumSignature; +}; + +export type EthereumSignature = HexString; export type TwitterValidationData = { - tweet_id: HexString -} + tweet_id: HexString; +}; export type DiscordValidationData = { - channel_id: HexString, - message_id: HexString, - guild_id: HexString -} + channel_id: HexString; + message_id: HexString; + guild_id: HexString; +}; // export type DiscordValidationData = {} export type Web3Network = { - Substrate: SubstrateNetwork - Evm: EvmNetwork -} - -export type Web2Network = "Twitter" | "Discord" | "Github" -export type SubstrateNetwork = "Polkadot" | "Kusama" | "Litentry" | "Litmus" -export type EvmNetwork = 'Ethereum' | 'BSC' + Substrate?: SubstrateNetwork; + Evm?: EvmNetwork; +}; +export type Web2Network = "Twitter" | "Discord" | "Github"; +export type SubstrateNetwork = "Polkadot" | "Kusama" | "Litentry" | "Litmus"; +export type EvmNetwork = "Ethereum" | "BSC"; diff --git a/tee-worker/ts-tests/utils.ts b/tee-worker/ts-tests/utils.ts index 54faecf910..ead1e7aae6 100644 --- a/tee-worker/ts-tests/utils.ts +++ b/tee-worker/ts-tests/utils.ts @@ -22,7 +22,11 @@ import { KeyObject } from "crypto"; import { EventRecord } from "@polkadot/types/interfaces"; import { after, before, describe } from "mocha"; import { randomAsHex } from "@polkadot/util-crypto"; -import { generateChallengeCode, getSinger } from "./web3/setup"; +import { generateChallengeCode, getSigner } from "./web3/setup"; +import { ethers } from "ethers"; +import { Web3Provider } from "@ethersproject/providers"; +import { generateTestKeys } from "./web3/functions"; + const base58 = require("micro-base58"); const crypto = require("crypto"); // in order to handle self-signed certificates we need to turn off the validation @@ -74,9 +78,19 @@ export async function getTEEShieldingKey( export async function initIntegrationTestContext( workerEndpoint: string, - substrateEndpoint: string + substrateEndpoint: string, + ethereumEndpoint: string ): Promise { const provider = new WsProvider(substrateEndpoint); + const ethersProvider = new ethers.providers.JsonRpcProvider(ethereumEndpoint); + const ethersWallet = { + alice: new ethers.Wallet(generateTestKeys().alice, ethersProvider), + bob: new ethers.Wallet(generateTestKeys().bob, ethersProvider), + charlie: new ethers.Wallet(generateTestKeys().charlie, ethersProvider), + dave: new ethers.Wallet(generateTestKeys().dave, ethersProvider), + eve: new ethers.Wallet(generateTestKeys().eve, ethersProvider), + }; + const api = await ApiPromise.create({ provider, types: teeTypes, @@ -93,7 +107,6 @@ export async function initIntegrationTestContext( if (shard == "") { throw new Error("shard not found"); } - // random shard for testing // let shard = randomAsHex(32); @@ -115,7 +128,9 @@ export async function initIntegrationTestContext( substrate: api, teeShieldingKey, shard, - defaultSigner: getSinger(0), + defaultSigner: getSigner(0), + ethersProvider, + ethersWallet, }; } @@ -283,13 +298,16 @@ export function describeLitentry(title: string, cb: (context: IntegrationTestCon substrate: {} as ApiPromise, tee: {} as WebSocketAsPromised, teeShieldingKey: {} as KeyObject, + ethersProvider: {} as Web3Provider, + ethersWallet: {}, }; before("Starting Litentry(parachain&tee)", async function () { //env url const tmp = await initIntegrationTestContext( process.env.WORKER_END_POINT!, - process.env.SUBSTRATE_END_POINT! + process.env.SUBSTRATE_END_POINT!, + process.env.ETH_END_POINT! ); context.defaultSigner = tmp.defaultSigner; @@ -297,6 +315,8 @@ export function describeLitentry(title: string, cb: (context: IntegrationTestCon context.substrate = tmp.substrate; context.tee = tmp.tee; context.teeShieldingKey = tmp.teeShieldingKey; + context.ethersProvider = tmp.ethersProvider; + context.ethersWallet = tmp.ethersWallet; }); after(async function () {}); diff --git a/tee-worker/ts-tests/web3/functions.ts b/tee-worker/ts-tests/web3/functions.ts index 3bf81e6cf6..5d496354ac 100644 --- a/tee-worker/ts-tests/web3/functions.ts +++ b/tee-worker/ts-tests/web3/functions.ts @@ -7,3 +7,22 @@ export async function Sign(data: string, options?: KeyringPair): Promise const signature = signer!.sign(stringToU8a(data)); return u8aToHex(signature); } + +export function generateTestKeys(): { + alice: string; + bob: string; + charlie: string; + dave: string; + eve: string; +} { + const secp256k1PrivateKeyLength = 32; + const names = ["alice", "bob", "charlie", "dave", "eve"]; + let keys = new Array(); + for (const name of names) { + const result = Buffer.alloc(secp256k1PrivateKeyLength); + result.fill(name, secp256k1PrivateKeyLength - Buffer.from(name, "utf8").length); + keys.push(result.toString("hex")); + } + + return { alice: keys[0], bob: keys[1], charlie: keys[2], dave: keys[3], eve: keys[4] }; +} diff --git a/tee-worker/ts-tests/web3/setup.ts b/tee-worker/ts-tests/web3/setup.ts index 2f1ed7748a..234bc85493 100644 --- a/tee-worker/ts-tests/web3/setup.ts +++ b/tee-worker/ts-tests/web3/setup.ts @@ -2,7 +2,7 @@ import { Keyring } from "@polkadot/api"; import type { KeyringPair } from "@polkadot/keyring/types"; const keyring = new Keyring({ type: "sr25519" }); const crypto = require("crypto"); -export function getSinger(index: number): KeyringPair { +export function getSigner(index: number): KeyringPair { let Alice = keyring.addFromUri("//Alice", { name: "Alice" }); let Bob = keyring.addFromUri("//Bob", { name: "Bob" }); let Charlie = keyring.addFromUri("//Charlie", { name: "Charlie" }); diff --git a/tee-worker/ts-tests/yarn.lock b/tee-worker/ts-tests/yarn.lock index d76178f56f..562c61257b 100644 --- a/tee-worker/ts-tests/yarn.lock +++ b/tee-worker/ts-tests/yarn.lock @@ -23,6 +23,348 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" @@ -482,6 +824,11 @@ acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -532,11 +879,21 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" @@ -564,6 +921,11 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -763,6 +1125,19 @@ ed2curve@^0.3.0: dependencies: tweetnacl "1.x.x" +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -843,6 +1218,42 @@ escape-string-regexp@4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -1011,11 +1422,28 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1024,7 +1452,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1162,6 +1590,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + js-yaml@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1223,6 +1656,16 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + minimatch@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" @@ -1482,6 +1925,11 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -1712,6 +2160,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + ws@^8.8.1: version "8.9.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e"